1. 程式人生 > 其它 >上傳檔案小例

上傳檔案小例

技術標籤: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..."); });