Nodejs Express+jade 关于显示上传图片的问题。

Nodejs Express+jade 关于显示上传图片的问题。

上传了一张图片,路径类似 /photo/img123.jpg, 然后重定向到另一个path,用另一个句柄提交一个jade模版,来显示所有photo文件夹下的图片,结果图片是损坏标志。查看源代码,路径是正确的。请问有谁知道如何解?

3 回复

Node.js Express + Jade 显示上传图片问题

问题描述

你上传了一张图片,并将其路径存储为 /photo/img123.jpg。然后你重定向到另一个路由,并使用Jade模板引擎来显示位于 photo 文件夹下的所有图片。但是,你发现图片显示为损坏的图标。通过查看源代码,你确认路径是正确的。

解决方案

问题可能出在以下几个方面:

  1. 静态资源路径配置:你需要确保Express能够正确地提供静态文件。
  2. Jade模板中的路径问题:确保在Jade模板中正确引用了图片路径。

以下是详细的解决方案:

配置静态资源路径

首先,确保你的Express应用能够正确地提供静态文件。你可以在你的Express应用中添加以下代码:

const express = require('express');
const path = require('path');

const app = express();

// 设置静态文件目录
app.use('/public', express.static(path.join(__dirname, 'public')));

// 设置views目录
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

在这个例子中,我们将 public 目录设置为静态文件目录。假设你的图片存放在 public/photo 目录下,那么路径应该是 /public/photo/img123.jpg

修改Jade模板

接下来,在你的Jade模板中正确引用图片路径。例如:

doctype html
html
  head
    title Display Images
  body
    h1 Photos
    each img in photos
      img(src='/public/photo/' + img, alt='Photo')

在这个模板中,我们遍历 photos 数组(假设它包含了图片的文件名),并为每个图片生成一个 <img> 标签。注意路径是相对于静态文件目录的。

示例代码

完整的示例代码如下:

const express = require('express');
const path = require('path');

const app = express();

// 设置静态文件目录
app.use('/public', express.static(path.join(__dirname, 'public')));

// 设置views目录
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

// 假设你有一个路由处理上传的图片
app.post('/upload', (req, res) => {
  // 处理上传逻辑...
  const photos = ['img123.jpg', 'img456.jpg'];
  res.redirect('/display');
});

// 显示图片的路由
app.get('/display', (req, res) => {
  const photos = ['img123.jpg', 'img456.jpg']; // 这里从数据库或文件系统获取实际的图片列表
  res.render('display', { photos });
});

app.listen(3000, () => {
  console.log('Server is running on port 3000');
});

Jade模板文件 (views/display.jade)

doctype html
html
  head
    title Display Images
  body
    h1 Photos
    each img in photos
      img(src='/public/photo/' + img, alt='Photo')

通过以上配置和代码,你应该能够正确地在Express应用中显示上传的图片。确保你的图片确实存在于 public/photo 目录下,并且路径配置正确。


要在Express应用中正确显示上传的图片,你需要确保以下几点:

  1. 静态文件服务:确保你的Express应用可以正确地提供静态文件(如图片)。你可以使用express.static()中间件来实现。

  2. 路径设置:确保你的Jade模板中的路径正确无误。

示例代码

假设你的图片保存在public/photo/目录下,并且你的Express应用结构如下:

myapp/
├── app.js
├── public/
│   └── photo/
│       └── img123.jpg
└── views/
    └── index.jade

app.js

const express = require('express');
const path = require('path');
const app = express();

// 设置静态文件目录
app.use('/public', express.static(path.join(__dirname, 'public')));

app.get('/', (req, res) => {
    res.render('index');
});

app.listen(3000, () => {
    console.log('App is running on port 3000');
});

views/index.jade

doctype
html
  head
    title= title
  body
    h1= message
    img(src='/public/photo/img123.jpg')

解释

  1. 静态文件服务

    • 使用app.use('/public', express.static(path.join(__dirname, 'public')));这行代码,Express会将public目录下的文件作为静态资源提供服务。这样当你访问/public/photo/img123.jpg时,Express会从public/photo/目录下查找并提供这张图片。
  2. 路径设置

    • 在Jade模板中,使用正确的相对路径src='/public/photo/img123.jpg'指向你的图片。这样浏览器会向服务器请求这个路径,并通过Express提供的静态文件服务获取到这张图片。

确保以上设置后,你的图片应该能够正常显示。如果仍然存在问题,请检查图片是否正确上传并且没有被损坏。

回到顶部