Малтер не сохраняет файл под тем же именем и без расширения? - PullRequest
0 голосов
/ 29 октября 2019

Я использую 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 появляется новый файл, который предполагаетсяиметь то же имя и то же расширение, что и файл, который я загрузил в форму, но вместо этого у него есть это имя:

enter image description here

И если я попытаюсьраспечатать (req.file), я вижу это:

enter image description here

Почему это происходит? Я даже не понимаю, почему они пишут неправильный код в документации ...

Ответы [ 2 ]

0 голосов
/ 29 октября 2019

Вы можете установить его внешне,

Попробуйте это,

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);
})
0 голосов
/ 29 октября 2019

Вы должны сделать уникальное имя, чтобы сохранить ваш файл "генерировать случайную строку" и связать это с 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 и преобразующая возвращаемое значение в сгенерированное имя.

...