2017-08-11 48 views
0

我一直在試圖解決這個問題幾天了。我正在嘗試在相同請求中執行文件上傳和POST數據。我已經在PHP中完成了這個工作,但現在我想在Node.js中完成這項工作。我雖然可能是與標題或服務器設置的東西,但沒有任何工作。節點 - 多部分/表單數據上傳文件,但沒有數據

我怎麼到這裏:我開始使用文件上傳使用busboy,它的作品完美。使用form-data身體Content-Type: Multipart/form-data和正常工作:

app.post('/api/v1/files/test', function (req, res, next) { 
    var busboy = new Busboy({ headers: req.headers }); 

    // Listen for event when Busboy finds a file to stream. 
    busboy.on('file', function (fieldname, file, filename, encoding, mimetype) { 
    console.log(filename); 
    }); 

    req.pipe(busboy); 
}); 

這將返回控制檯和作品文件名。

下一步是添加常見的附加信息。該請求是這樣的: enter image description here

(。忽略了一個事實我有身體apiKey這是我固定的下一件事)

如果我添加一個console.log(req.body);,它將返回{}我錯過了什麼?爲什麼身體是空的?我已經通過req並找不到我的密鑰的任何實例。

服務器設置文件看起來像這樣:

... requires ... 
// App 
const app = express(); 

// File related 
app.use(busboy()); 

app.use(bodyParser.urlencoded({ extended: false })); 
app.use(bodyParser.json()); // maybe screwing it up? 
... then path setup, and listen ... 

如果你還是不明白,我想要做的事:

<form action="upload.php" method="post" enctype="multipart/form-data"> 
    <input type="text" name="apiKey" /> 
    <input type="file" name="file" /> 
    <button type="submit>Done</button> 
</form> 

這是它是什麼樣子的PHP:

<?php 
    $apiKey = $_POST['apiKey']; 
    $file = $_POST['files']['file']; 
?> 
+0

你看看Multer:https://github.com/expressjs/multer,它很簡單,開門見山 –

回答

1

由於您使用的打雜,嘗試安裝busboy-body-parser,則u SE:

const busboyBodyParser = require('busboy-body-parser'); 

... 

// Required to parse multipart/form-data for busboy 
app.use(busboyBodyParser()); 
+0

這的確解決了我的問題與空白身體,但它不」允許文件上傳。任何想法如何使用這個,仍然做文件上傳? – Keith

+0

我收回了,這工作完美。我剛剛檢查了'req.files'並且它存在。這是解決方案。謝謝你的幫助。 – Keith

相關問題