簡體   English   中英

Multer不上傳文件

[英]Multer not uploading file

我正在嘗試使用 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 = 路由器;

更新

我在 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 = 路由器;

泰的幫助!

您沒有指定要上傳的文件。 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.originalname程序,並將+ file更改為+ file.originalname因為file是一個對象並且計算機可能在將對象與文件名聯系起來時遇到問題。

更新

主節點

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>

對於 multer 不將文件上傳到目標文件夾的問題,我發現使用絕對路徑而不是相對路徑很有用。

像這樣(節點js根目錄的絕對路徑)
公開/圖片/圖片

優於(相對路徑)
../公共/圖像/圖片

或(相對路徑)
./公共/圖像/圖片

那對我有用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM