筆記:用curl上傳檔案
這篇彙整一下用curl測試上傳檔案,驗證伺服端使用node.js。
之前也有用node.js寫過伺服端,不過那時沒有用curl做測試
1. 表單上傳
使用 -F, --form表單enctype為‵multipart/form-data‵上傳檔案
curl -F "fieldName=curl" -F uploadfile=@"multiple-class.png" http://localhost:3000
留意:檔名中包含','或';'要用雙引號處理,還有些bash行為要注意
2. 串流上傳檔案
使用 --data-binary 上傳檔案
curl -H 'Content-Type: application/octet-stream' --data-binary @"multiple-class.png" http://localhost:3000
3. 用PUT上傳檔案
使用 -T, --upload-file 傳檔案會使用PUT而不是POST
curl -T "multiple-class.png" http://localhost:3000
4. 多檔序列上傳
curl -T "img[1-1000].png" http://localhost:3000
curl --upload-file "{file1,file2}" http://localhost:3000
5. 表單傳送鍵值
使用 -d, --data, --data-ascii表單enctype為‵application/x-www-form-urlencoded‵上傳檔案
curl -d "fieldName=curl" -d uploadfile=multiple-class.png http://localhost:3000
實測-d無法用來傳檔案,只會傳鍵值。
6. 純文字傳送成功,但是二進位檔案到伺服端會有問題的方式
curl -d "fieldName=curl" --data-urlencode uploadfile@"multiple-class.png" http://localhost:3000
curl -d "fieldName=curl" --data-urlencode uploadfile@"blog.txt" http://localhost:3000
會把檔案用urlencode也就是percentage encoding。實測上傳binary內容會不正常,Text正常。
測試用伺服端 用Node.js 的 Express
index.js
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
app.use(bodyParser.urlencoded({ extended: false })); //[Deprecated] app.use(express.urlencoded());
app.get('/', (req, res, next) => {
res.send(`<form method="POST" action="/" enctype="multipart/form-data">
<input type="text" name="fieldName" placeholder="username">
<input type="file" name="uploadFile" placeholder="choose">
<input type="submit">
</form>`);
});
app.post('/', function (req, res, next) {
res.send(JSON.stringify(req.body));
});
app.put('/put/:filename', function (req, res) {
let filename = req.params.filename;
console.log('put', filename);
res.send(JSON.stringify(req.body));
});
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => console.log('Port:', PORT));
package.json
{
"scripts": {
"start": "node index.js"
},
"dependencies": {
"body-parser": "^1.19.0",
"express": "^4.17.1"
}
}
參考資料
https://rammusxu.github.io/2016/04/06/nodejs-multer-file-upload-module/
留言