【发布时间】:2016-03-08 19:18:37
【问题描述】:
我正在尝试从路由器引用我的public 文件夹中名为tracks_folder 的文件夹。
我的项目的简化结构如下
app.js
routes/
tracks/
router.js
public/
tracks_folder/
基本上我想从router.js 引用tracks_folder,以便将文件上传到该文件夹,但我无法做到这一点。
我试过了:
../../public/tracks_folder/../../tracks_folder/./tracks_folder/
但它们都不起作用。在我的app.js 我有
app.use(express.static(path.join(__dirname, 'public')));
但例如对于第三种情况,我收到以下错误:
Error: ENOENT: no such file or directory, open 'tracks_folder/aaa.mp3'
发生错误(本机)
理论上我应该至少可以使用第一种方法来引用tracks_folder 文件夹,但它确实有效。
我正在使用 multer 上传文件及其磁盘存储来存储它们...
以下是router.js内的简化问题相关代码:
...
var multer = require('multer')
var uploadFolder = "./tracks_folder/";
function formatTrackName(originalName) {
return originalName.replace(/\s+/g, '-').toLowerCase();
}
var trackStorage = multer.diskStorage({
// used to determine within which folder the uploaded files should be stored.
destination: function(req, file, callback) {
callback(null, uploadFolder);
},
filename: function(req, res, callback) {
// req.body.name should contain the name of track
callback(null, formatTrackName(req.body.name) + ".mp3");
}
});
var upload = multer({
storage: trackStorage
})
...
...
这是我未实现的 post 方法:
router.post('/upload', upload.single("track"), function(req, res) {
});
【问题讨论】:
-
您可能应该在尝试写入文件的位置包含代码。
-
@mscdex 我用请求的详细信息编辑了我的问题。顺便说一句,这个磁盘存储机制真的处理了存储文件的整个过程,还是只是临时存储文件(然后我应该使用例如
fs的函数来处理文件的写入)?老实说,从文档中根本不清楚......
标签: node.js express path public multer