本地服务端资源无法使用http获取

在实现上传图片同时将服务端返回的url,从而实现一个简单的上传图片显示缩略图的效果,但是当图片成功上传之后,以至于成功返回URL之后,却无法正常显示图片,获取的URL经过中间件处理,我企图希望url为服务端的文件夹位置,但是由于没有经验,所以不知道要怎么书写http格式的URL

我首先获取了图片位置的绝对路径(本地端服务器),大概内容如下:

file:///D:/项目位置/assets/imageUpload/xxx1.jpg

这是能够直接使用浏览器进行本机文件进行访问的,但是要想实现http URL格式,需要写成大概如下格式:

http://localhost:3000/assets/imageUpload/xxx1.jpg

 但是我不论怎么修改http URL,都是无法正常显示,主要原因是无法解析上述端口号后面的路径,所以需要在服务端使用中间件对上传的文件路径进行解析,具体解决方法如下:

app.use('/assets', express.static(path.join(__dirname, 'assets')));

上述部分是直接在Index中设置静态文件路由,从而使得http访问到assets路径时会对应查找服务端内的正确路径;

// 指定资源路由配置文件
router.post('/imageUpload',imageUpload.single('file'),chatsController.imageUpload)

// 调用的中间件操作,用于处理image

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

// 配置存储和文件命名
const storage = multer.diskStorage({
  destination: (req, file, cb) => {
    cb(null, '../assets/imageUpload'); // 设置存储目录
  },
  filename: (req, file, cb) => {
    const uniqueSuffix = `${Date.now()}-${Math.round(Math.random() * 1e9)}`; // 生成唯一的文件名
    const fileExtension = path.extname(file.originalname); // 获取文件扩展名
    const filename = `${uniqueSuffix}${fileExtension}`; // 拼接新文件名
    cb(null, filename);
  }
});

// 配置multer中间件
const upload = multer({
  storage: storage,
  fileFilter: (req, file, cb) => {
    // 检查文件类型,只接受特定的图片类型
    if (file.mimetype.startsWith('image/')) {
      cb(null, true);
    } else {
      cb(new Error('只能上传图片文件'));
    }
  }
});

module.exports = upload;

上述代码有两个部分,首先是路由调用中间件来处理表单提交的图片;其次就是中间件的部分,其中限制了图片的规格等,防止上传不符合要求的图片,否则抛出异常,返回给浏览器。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值