摘要:對(duì)象包含表單的文本域信息,或?qū)ο蟀瑢?duì)象表單上傳的文件信息。是文件的信息前端傳遞的文件類型在中獲取將具有文本域數(shù)據(jù),如果存在的話。
node.js實(shí)現(xiàn)formdata上傳文件 1.關(guān)于formdata
XMLHttpRequest Level 2 添加了一個(gè)新的接口——FormData。利用 FormData 對(duì)象,我們可以通過(guò) JavaScript 用一些鍵值對(duì)來(lái)模擬一系列表單控件,我們還可以使用 XMLHttpRequest 的 send() 方法來(lái)異步的提交表單。與普通的 Ajax 相比,使用 FormData 的最大優(yōu)點(diǎn)就是我們可以異步上傳二進(jìn)制文件。
FormData的api
創(chuàng)建一個(gè)空FormData對(duì)象:
var formData = new FormData()
使用FormData.append添加一個(gè)鍵/值對(duì):
formData.append("username", "Chris");
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. 保存在文件夾中的文件為二進(jìn)制,所以想在本地點(diǎn)開(kāi)能預(yù)覽的,取消下面fs模塊引用的注釋 2. 并在命令行中輸入 npm install fs --save */ // var fs = require("fs"); var multer = require("multer"); // 這里dest對(duì)應(yīng)的值是你要將上傳的文件存的文件夾 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 將具有文本域數(shù)據(jù),如果存在的話 。(上面前端代碼中傳遞的date字段在req.body中獲取) console.log(req.body) //{ date: "2018/1/20 下午5:25:56" } // ---------- 因?yàn)楸4娴奈募槎M(jìn)制,取消下面代碼塊注釋可讓保存的圖片文件在本地文件夾中預(yù)覽 ------ /* 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);
上面的例子是上傳圖片,服務(wù)端傳回圖片路徑進(jìn)行展示。上傳其他文件同理!
index.js中依賴express、multer 可以通過(guò)npm install express multer --save進(jìn)行安裝,當(dāng)然你也可以不使用express。
接下去重點(diǎn)講述下multer:
1.安裝:
npm install --save multer
2.使用:
multer(opts)
Multer 接受一個(gè) options 對(duì)象,其中最基本的是 dest 屬性,這將告訴 Multer 將上傳文件保存在哪。如果你省略 options 對(duì)象,這些文件將保存在內(nèi)存中,永遠(yuǎn)不會(huì)寫(xiě)入磁盤(pán)。通常,只需要設(shè)置 dest 屬性 像這樣:
var upload = multer({ dest: "uploads/" }) // dest對(duì)應(yīng)的值就是你想文件存儲(chǔ)的文件夾
.single(fieldname)
接受一個(gè)以 fieldname 命名的文件。這個(gè)文件的信息保存在 req.file。(這里的fieldname指的是formdata.append("file",文件)中的"file"字段。
其他方法詳見(jiàn)multer文檔。
Multer 會(huì)添加一個(gè) body 對(duì)象 以及 file 或 files 對(duì)象 到 express 的 request 對(duì)象中。body 對(duì)象包含表單的文本域信息,file 或 files 對(duì)象包含對(duì)象表單上傳的文件信息。
app.post("/upload", upload.single("file"),(req, res) => { // req.file 是 "file" 文件的信息 (前端傳遞的文件類型在req.file中獲?。? // req.body 將具有文本域數(shù)據(jù),如果存在的話 。(上面前端代碼中傳遞的date字段在req.body中獲?。? console.log(req.body) // { date: "2018/1/20 下午5:25:56" } res.send("./uploads/"+req.file.filename) })注意事項(xiàng):
一、formdata在控制臺(tái)打印為空
可通過(guò)下面方法獲?。?/pre>var formData = new FormData(); formData.append("username", "Chris"); formData.append("username", "Bob"); // get()函數(shù)只會(huì)返回username附加的第一個(gè)值 formData.get("username"); // Returns "Chris" // getAll()函數(shù)將返回username一個(gè)數(shù)組中的兩個(gè)值: formData.getAll("username"); // Returns ["Chris", "Bob"]更多formdata方法
二、如果formdata添加文件成功了的話,還是上傳失敗,可以看看頭部是否為multipart/form-data
文章都是學(xué)習(xí)過(guò)程中的總結(jié),如果發(fā)現(xiàn)錯(cuò)誤,歡迎留言指出
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/92638.html
摘要:前段時(shí)間面試過(guò)程中,頻繁遇到異步文件上傳的相關(guān)問(wèn)題。所以,這會(huì)是一個(gè)拖放接口實(shí)現(xiàn)文件異步上傳的完整。監(jiān)聽(tīng)放置元素的事件,通過(guò)對(duì)象可以獲得拖拽事件的狀態(tài)及數(shù)據(jù)。后端文件接收保存后端使用實(shí)現(xiàn)文件上傳。 ??前段時(shí)間面試過(guò)程中,頻繁遇到H5異步文件上傳的相關(guān)問(wèn)題。還遇到過(guò)一個(gè)通過(guò)H5拖放功能實(shí)現(xiàn)文件異步上傳的問(wèn)題,大概知道H5有新增拖拽功能可以接收文件,如何異步上傳文件就母雞了(攤手)。面試...
摘要:網(wǎng)址功能單圖多圖上傳圖片上傳預(yù)覽上傳進(jìn)度條分組上傳,分組查詢新建分組,刪除分組刪除圖片選擇圖片目錄結(jié)構(gòu)前端利用搭建,中引入子組件。實(shí)現(xiàn)分組的新增查詢刪除。利用模塊實(shí)現(xiàn)刪除文件功能。 公司要寫(xiě)一些為自身業(yè)務(wù)量身定制的的組件,要基于Vue,寫(xiě)完后擴(kuò)展了一下功能,選擇寫(xiě)圖片上傳是因?yàn)樽约褐耙恢睂?duì)這個(gè)功能比較迷糊,所以這次好好了解了一下。演示在網(wǎng)址打開(kāi)后的show.gif中。 使用技術(shù):Vu...
摘要:對(duì)于圖片上傳,大家一定不陌生。項(xiàng)目地址一環(huán)境搭建本項(xiàng)目使用目前最新的和進(jìn)行開(kāi)發(fā),所以環(huán)境的搭建必不可少。在目錄下新建代碼內(nèi)容只有行,其輸入為一個(gè)圖片文件,輸出為一串編碼。同樣的方式,我們可以為也設(shè)置一個(gè)代理數(shù)組,以實(shí)現(xiàn)向外拋出數(shù)組的目的。 對(duì)于圖片上傳,大家一定不陌生。最近工作中遇到了關(guān)于圖片上傳的內(nèi)容,借此機(jī)會(huì)認(rèn)真研究了一番,遂一發(fā)不可收拾,最后琢磨了一個(gè)東西出來(lái)。在開(kāi)發(fā)的過(guò)程中有不...
閱讀 927·2021-09-09 09:32
閱讀 2904·2021-09-02 10:20
閱讀 2721·2021-07-23 11:24
閱讀 839·2019-08-30 15:54
閱讀 3645·2019-08-30 15:54
閱讀 1355·2019-08-30 11:02
閱讀 2860·2019-08-26 17:40
閱讀 1139·2019-08-26 13:55