Multer 没有将文件保存为同名且没有扩展名?

Multer is not saving the file as the same name and without extension?

我正在使用 Multer 来保存我通过表单上传的文件,但我不知道为什么我的代码将它保存为一个奇怪的名称并且没有扩展名,我刚刚使用了文档中的代码。

server.js:

const multer  = require('multer');
const app = express();
var upload = multer({ dest: 'uploads/' })

app.post('/file', upload.single('filesToAttach'), function (req, res, next) {
    console.log(req.file);
    loadUserPage(req, res);
})

userPage.ejs:

<form action="/file" method="post" enctype="multipart/form-data">
    <div id="frm-attachments">
        <div>
            <h3>Attachments</h3>
            <div>
                <input type="file" id="attachFiles" name="filesToAttach" />
                <input type="submit" value="Attach">
            </div>
            <div id="frm-attach-files">
                Attached files
                <div>
                    <textarea id="field-attached-files" class="large-textbox" name="attached-files" spellcheck="true" rows="10" cols="50" tabindex="4" disabled="true"></textarea>
                </div>
            </div>
        </div>
    </div>
</form>

当我点击提交按钮时,一个新文件出现在文件夹 uploads 中,该文件应该与我在表单中上传的文件具有相同的名称和相同的扩展名,但它有这个名称相反:

如果我尝试打印出来(req.file),我会看到:

为什么会这样?我什至不明白为什么他们在文档中写错了代码...

您应该创建一个唯一的名称来保存您的文件 "generate a random string" 并将其与您的文件的 mimetype 连接起来。如您所见,mimetype 已经存在于 req.file ,

function getFileExtension(mimeType){
if ( mimeType=== 'image/png') {
    return '.png';
}
else if ( mimeType=== 'image/jpg') {
    return '.jpg';
}
else if ( mimeType=== 'image/gif') {
    return '.gif';
}
else {
    return '.jpeg';
}
}

如果您正在处理图像,这是一个实用函数,将 req.mimetype 传递给它并将其 return 值连接到您生成的名称

可以外部设置,

试试这个,

const multer  = require('multer');
const app = express();
var storage = multer.diskStorage({
  destination: 'uploads/',
  filename: function(req, file, callback) {
    callback(null, file.originalname);
  }
});
var upload = multer({ storage: storage })

app.post('/file', upload.single('filesToAttach'), function (req, res, next) {
    console.log(req.file);
    loadUserPage(req, res);
})