javascript - nodejs如何提供本地文件的http访问路径?

查看:850
本文介绍了javascript - nodejs如何提供本地文件的http访问路径?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

一个上传图片返回url的nodejs程序,返回

{
  "name": "name",
  "url": "/uploader/upload"
}

怎么才能将本地路径转化成http路径呢,比如 example.com/upload/a.jpg

router.post('/', function (req, res) {
    if (req.busboy) {
        var name = ''
        req.busboy.on('file', function (fieldname, file, fileName, encoding, mimeType) {
            name = fileName
            var stream = fs.createWriteStream(path.join(__dirname, '../', uploadPath, fileName))
            file.pipe(stream)
            console.log('uploading %s -> %s', fileName, stream.path)

        }).on('finish', function () {
            res.send({
                name: 'name',
                url: path.join(uploadPath, name)
            })
        })

        req.pipe(req.busboy)
    } else {
        console.log('uploadFile - busboy undefined.')
        res.status(502)
    }
})

解决方案

既然你用的是express框架,那么先将某个目录设置为静态目录,如下:

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

然后将上传的文件存放于该目录,并返回文件路径,这样用户访问该路径就能下载文件。
如果想要对访问该路径的用户进行鉴权,那可以自己写个模块,express.static的源码也可以参考一下。
大致代码如下:

router.get('/upload/?', function (req, res) {
    var filepath = req.originalUrl;
    var filename = req.path.substr(1);
    if (req.session.user.has(filename)) res.download(filepath);
})

如下是官方例子做了些改动:

app.get('/upload/:name', function (req, res, next) {

  var options = {
    root: __dirname + '/upload/',
    dotfiles: 'deny',
    headers: {
        'x-timestamp': Date.now(),
        'x-sent': true
    }
  };

  var fileName = req.params.name;
  res.sendFile(fileName, options, function (err) {
    if (err) {
      console.log(err);
      res.status(err.status).end();
    }
    else {
      console.log('Sent:', fileName);
    }
  });

})

参考:http://www.expressjs.com.cn/4...

这篇关于javascript - nodejs如何提供本地文件的http访问路径?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆