上傳檔案小例
阿新 • • 發佈:2020-12-13
技術標籤:NODEJS 學習筆記
html 頁面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>06-uploadFile</title>
</head>
<body>
<!--
form表單檔案上傳
注意:
1. 請求方式必須是post
2. 傳遞資料的格式不能是鍵值對格式, 要是formData格式
application/x-www-form-urlencoded 預設, 鍵值對格式
multipart/form-data formData格式, 檔案上傳的格式
text/plain 文字格式
-->
<form action="http://127.0.0.1:9988/upload" method="post" enctype="multipart/form-data">
<input type="file" name="myfile">
<input type="submit">
</form>
</body>
</html>
js 頁面
const http = require("http");
const fd = require("formidable");
const fs = require("fs");
http.createServer(function (req, res) {
if (req.method == "POST") {
// 檔案上傳的請求
/*
上傳的檔案資料 儲存在req物件裡
檔案上傳的原理
當檔案從前端傳遞到後臺時, 實際上node會將其先放置到一個臨時資料夾裡, 我們需要做的是 通過req物件, 從臨時資料夾裡獲取檔案, 然後將檔案移動到 目的位置
1. 通過req物件先拿到臨時檔案
2. 移動 將其放到我們想要放的位置
通過req物件獲取檔案, 我們需要藉助一個外掛 formidable外掛
*/
// 1. 建立檔案上傳物件
let uploadObj = new fd.IncomingForm();
//2. 讀取req物件裡的傳遞的檔案資訊
uploadObj.parse(req, function (error, fields, files) {
/*
error: 錯誤資訊
fields: 除了檔案資訊之外的配置資訊
files: 本次上傳的檔案的資訊
*/
console.log(files);
// 通過key獲取檔案資訊物件
let fileInfos = files.myfile;
// 檔名
let filename = fileInfos.name;
// 臨時路徑
let tempPath = fileInfos.path;
// 將檔案從臨時路徑移動到目標路徑
// 目標路徑
let targetPath = filename;
// node裡移動的原理是通過fs模組 先從臨時路徑讀取檔案, 再把檔案寫入到目標路徑
let readS = fs.createReadStream(tempPath);
let writeS = fs.createWriteStream(targetPath);
readS.pipe(writeS);
});
res.end();
} else {
res.end();
}
}).listen(9988, function () {
console.log("listening:9988...");
});