Multer не загружает файл

1

Я пытаюсь использовать multer для загрузки файла из html-формы на стороне клиента на сервер, модуль multer обрабатывает файл на стороне сервера.

Дело здесь в том, что все в порядке, потому что я получаю ответ 200 ok от сервера, но файл должен быть загружен в мою файловую систему, и я не вижу его.

Это моя html-форма

<template>
  <div id="app">
    <form action="http://localhost:3000/upload" method="post" enctype="multipart/form-data">
      <h2>Select a file</h2>
      <input name="curriculum" id="inputVal" type="file">
      <button type="submit">Send</button>
    </form>
  </div>
</template>

мой код на стороне сервера

var express = require('express');
var router = express.Router();
var path = require('path');
var fs = require('fs');
var multer  = require('multer')
var storage = multer.diskStorage({
  destination: function(req,file,callback) {
    callback(null, '../files');
  },
  filename: function(req,file,callback) {
    callback(null,Date.now() + file,callback);
  }

})
var upload = multer({ storage: storage }).single('curriculum');

router.post('/upload', function (req, res, next) {
  upload(req,res, function(err){
    if(err) {
      return res.status(404).send("a error ocurred");
    }
    res.status(200).send("file uploaded");
  });
});

module.exports = router;

ОБНОВИТЬ

Я изменил базу решений на сайте npm multer (на стороне сервера)

var express = require('express');
var router = express.Router();
var path = require('path');
var fs = require('fs');
var multer  = require('multer')
var upload = multer({ dest: 'uploads/' });

router.post('/upload',upload.single('curriculum') ,function (req, res, next) {
  console.log(req.files);
});

module.exports = router;

Ты за помощь!

  • 0
    У вас есть подходящее разрешение на чтение / запись в папку назначения, куда вы пытаетесь загрузить свои файлы?
  • 0
    да, я не получаю никакой ошибки, обычно я получаю CORS, но я разрешаю это в своем файле приложения, я не знаю, почему это не работает
Показать ещё 4 комментария
Теги:
file
file-upload
multer

1 ответ

1

Вы не указываете файл, который хотите загрузить. input имя input.

router.post('/upload', upload.single('curriculum'), function (req, res, next) {
    if(err) {
      console.log(err);
      return res.status(404).send("a error ocurred");
    }
    console.log(req.file);
    res.status(200).send("file uploaded");
});

Также в имени файла убедитесь, что ваш файл заканчивается расширением, например .png или .jpeg иначе вы увидите кучу байт-кодов, которые ничего не означают.

Вы можете либо получить точное имя файла, которое дает ваш клиент, используя file.originalname

cb(null, file.originalname)

Или вы можете добавить его явно.

callback(null, file.fieldname + '-' + Date.now() + '.png')

Возможно, вы захотите удалить третий параметр callback(null,Date.now() + file,callback) который является callback поскольку он может прослушивать программу, и изменить + file на что-то вроде + file.originalname поскольку file является объектом и на компьютере может возникнуть проблема с объектом, связанным с именем файла.

ОБНОВИТЬ

Основные NODEJS

var express = require('express')
var multer  = require('multer')
var app = express()

var storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, __dirname + '/uploads')      //you tell where to upload the files,
  },
  filename: function (req, file, cb) {
    cb(null, file.fieldname + '-' + Date.now() + '.png')
  }
})

var upload = multer({storage: storage,
    onFileUploadStart: function (file) {
      console.log(file.originalname + ' is starting ...')
    },
});

app.set('view engine', 'ejs');

app.get('/', function(req, res, next){    
    res.render('mult');  //our html document
})

app.post('/profile', upload.single('avatar'), function (req, res, next) {
  // req.file is the 'avatar' file
  console.log(req.file);
  return false;
})

HTML-форма

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <body>
    <form accept="image/x-png,image/gif,image/jpeg" enctype="multipart/form-data" action="/profile" method="post">
      <input type="file" name="avatar" value="">
      <input type="submit" name="" value="ssss">
    </form>
  </body>
</html>
  • 0
    эй турмука смотри мой редактировать, все еще не работает
  • 0
    Эй, проверьте мое обновление, эти коды работают нормально для меня, вы, вероятно, должны внести некоторые изменения в переменную upload @costacosta
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню