国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

node.js實現formdata上傳文件

Aceyclee / 3677人閱讀

摘要:對象包含表單的文本域信息,或對象包含對象表單上傳的文件信息。是文件的信息前端傳遞的文件類型在中獲取將具有文本域數據,如果存在的話。

node.js實現formdata上傳文件 1.關于formdata
XMLHttpRequest Level 2 添加了一個新的接口——FormData。利用 FormData 對象,我們可以通過 JavaScript 用一些鍵值對來模擬一系列表單控件,我們還可以使用 XMLHttpRequest 的 send() 方法來異步的提交表單。與普通的 Ajax 相比,使用 FormData 的最大優點就是我們可以異步上傳二進制文件。
FormData的api
方法一:

創建一個空FormData對象:
var formData = new FormData()
使用FormData.append添加一個鍵/值對:
formData.append("username", "Chris");

方法二:利用form表單傳遞給formdata
var myForm = document.getElementById("myForm");
formData = new FormData(myForm);
2.formdata上傳文件
目錄結構
.
├── index.js
├── node_modules
├── package.json
└── public
    ├── index.html
    └── uploads
客戶端代碼
 
    
    
    
    
服務端代碼
// index.js
var express = require("express");
var app = express();
/*
    1. 保存在文件夾中的文件為二進制,所以想在本地點開能預覽的,取消下面fs模塊引用的注釋
    2. 并在命令行中輸入 npm install fs --save
*/
// var fs = require("fs");

var multer = require("multer");
// 這里dest對應的值是你要將上傳的文件存的文件夾
var upload = multer({dest:"./public/uploads"});
app.use(express.static("./public"));
app.post("/upload", upload.single("file"),(req, res) => {
    
    // req.file 是 "file" 文件的信息 (前端傳遞的文件類型在req.file中獲取)
    // req.body 將具有文本域數據,如果存在的話  。(上面前端代碼中傳遞的date字段在req.body中獲取)
    console.log(req.body) //{ date: "2018/1/20 下午5:25:56" }

    // ---------- 因為保存的文件為二進制,取消下面代碼塊注釋可讓保存的圖片文件在本地文件夾中預覽 ------
    /*
    var file_type;
    if (req.file.mimetype.split("/")[0] == "image") file_type = "." + req.file.mimetype.split("/")[1];
    if (file_type) {
        fs.rename(req.file.path, req.file.path + file_type, function (err, doc) {
            if (err) {
                console.error(err);
                return;
            }
            console.log("55");
            res.send("./uploads/" + req.file.filename + file_type)
        })
        return;
    }
    */
    // ---------------------
    
    res.send("./uploads/" + req.file.filename)
})
app.listen(9999);
接下來解釋下上述代碼
上面的例子是上傳圖片,服務端傳回圖片路徑進行展示。上傳其他文件同理!

index.js中依賴express、multer 可以通過npm install express multer --save進行安裝,當然你也可以不使用express。
接下去重點講述下multer:
1.安裝:
npm install --save multer
2.使用:
multer(opts)

Multer 接受一個 options 對象,其中最基本的是 dest 屬性,這將告訴 Multer 將上傳文件保存在哪。如果你省略 options 對象,這些文件將保存在內存中,永遠不會寫入磁盤。通常,只需要設置 dest 屬性 像這樣:
var upload = multer({ dest: "uploads/" }) // dest對應的值就是你想文件存儲的文件夾

.single(fieldname)

接受一個以 fieldname 命名的文件。這個文件的信息保存在 req.file。(這里的fieldname指的是formdata.append("file",文件)中的"file"字段。
其他方法詳見multer文檔。

Multer 會添加一個 body 對象 以及 filefiles 對象 到 express 的 request 對象中。body 對象包含表單的文本域信息,filefiles 對象包含對象表單上傳的文件信息。

app.post("/upload", upload.single("file"),(req, res) => {
    // req.file 是 "file" 文件的信息 (前端傳遞的文件類型在req.file中獲取)
    // req.body 將具有文本域數據,如果存在的話 。(上面前端代碼中傳遞的date字段在req.body中獲取)
    console.log(req.body) // { date: "2018/1/20 下午5:25:56" }
    res.send("./uploads/"+req.file.filename)
})
注意事項:

一、formdata在控制臺打印為空

可通過下面方法獲取:
var formData = new FormData();
formData.append("username", "Chris");
formData.append("username", "Bob");
// get()函數只會返回username附加的第一個值
formData.get("username"); // Returns "Chris"
// getAll()函數將返回username一個數組中的兩個值:
formData.getAll("username"); // Returns ["Chris", "Bob"]

更多formdata方法

二、如果formdata添加文件成功了的話,還是上傳失敗,可以看看頭部是否為multipart/form-data

文章都是學習過程中的總結,如果發現錯誤,歡迎留言指出

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/92638.html

相關文章

  • H5拖放+FormData接口+NodeJS,完整異步文件上傳(一)

    摘要:前段時間面試過程中,頻繁遇到異步文件上傳的相關問題。所以,這會是一個拖放接口實現文件異步上傳的完整。監聽放置元素的事件,通過對象可以獲得拖拽事件的狀態及數據。后端文件接收保存后端使用實現文件上傳。 ??前段時間面試過程中,頻繁遇到H5異步文件上傳的相關問題。還遇到過一個通過H5拖放功能實現文件異步上傳的問題,大概知道H5有新增拖拽功能可以接收文件,如何異步上傳文件就母雞了(攤手)。面試...

    NervosNetwork 評論0 收藏0
  • 基于Vue + Node.js + MongoDB的圖片上傳組件,實現圖片的預覽和刪除

    摘要:網址功能單圖多圖上傳圖片上傳預覽上傳進度條分組上傳,分組查詢新建分組,刪除分組刪除圖片選擇圖片目錄結構前端利用搭建,中引入子組件。實現分組的新增查詢刪除。利用模塊實現刪除文件功能。 公司要寫一些為自身業務量身定制的的組件,要基于Vue,寫完后擴展了一下功能,選擇寫圖片上傳是因為自己之前一直對這個功能比較迷糊,所以這次好好了解了一下。演示在網址打開后的show.gif中。 使用技術:Vu...

    hzx 評論0 收藏0
  • 用現代化的方式開發一個圖片上傳工具

    摘要:對于圖片上傳,大家一定不陌生。項目地址一環境搭建本項目使用目前最新的和進行開發,所以環境的搭建必不可少。在目錄下新建代碼內容只有行,其輸入為一個圖片文件,輸出為一串編碼。同樣的方式,我們可以為也設置一個代理數組,以實現向外拋出數組的目的。 對于圖片上傳,大家一定不陌生。最近工作中遇到了關于圖片上傳的內容,借此機會認真研究了一番,遂一發不可收拾,最后琢磨了一個東西出來。在開發的過程中有不...

    beanlam 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<