javascript - nodejs如何提供本地文件的http访问路径?
本文介绍了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屋!
查看全文