我有一个角形5应用程序运行一个文件上传实现了ngx-上传器和一个express.js后端。上传程序运行,但它不是将文件放在我指定的目录中,而是放在我的启动驱动器根目录的tmp文件夹中。ExpressJS后端是从OS主目录中的一个子文件夹运行的(Sierra10.12.6)。
ExpressJS代码:
var path = require('path');
var express = require('express');
var cors = require("cors");
var multer = require('multer');
var app = express();
app.use(cors({
credentials: true,
origin: 'http://localhost:4200'
}));
app.get('/upload', function(req, res) {
res.send('<html><head></head><body>\
<form method="POST" enctype="multipart/form-data">\
<input type="text" name="textfield"><br />\
<input type="file" name="filefield"><br />\
<input type="submit">\
</form>\
</body></html>');
res.end();
});
const upload = multer({
dest: 'uploads/',
storage: multer.diskStorage({
filename: (req, file, cb) => {
let ext = path.extname(file.originalname);
cb(null, `${Math.random().toString(36).substring(7)}${ext}`);
}
})
});
app.post('/upload', upload.any(), (req, res) => {
console.log(res.json, upload.any());
res.json(req.files.map(file => {
console.log(file);
let ext = path.extname(file.originalname);
return {
originalName: file.originalname,
filename: file.filename
}
}));
});
app.listen(3000, () => {
console.log('ngx-uploader server running on port 3000.');
});我假设这是由于OS或Unix的一些默认行为造成的。要在我指定的目录中获取这个存储文件,我需要做什么?我猜它与在我的主目录中运行应用程序有关。那么,像这样运行代码的合适位置在哪里呢?
发布于 2018-01-22 18:54:53
您需要做的就是按照以下方式声明您的upload:
const upload = multer({
// ommit dest field - it is useless while using storage
storage: multer.diskStorage({
destination: req, file, cb) => { // you are missing this one
cb(null, '/uploads')
},
filename: (req, file, cb) => {
let ext = path.extname(file.originalname);
cb(null, `${Math.random().toString(36).substring(7)}${ext}`);
}
})
});来自docs:storage比dest具有更高的优先级。

从文档进一步阅读
有两个选项,
destination和filename。它们都是决定文件存储位置的函数。destination用于确定应在哪个文件夹中存储上载的文件。这也可以给出一个字符串(例如‘/tmp/上载’)。如果没有提供destination,则使用操作系统的临时文件默认目录。
这说明了您的情况:您没有提供destination,并且使用了默认的OS目录。
https://stackoverflow.com/questions/48387563
复制相似问题