摘要:默認地,表單數(shù)據(jù)會編碼為。就是說,在發(fā)送到服務器之前,所有字符都會進行編碼空格轉(zhuǎn)換為加號,特殊符號轉(zhuǎn)換為值。提交說明文件上傳。圖片選擇圖片地址上傳上傳。用表單直接構(gòu)造對象就不需要下面的方法來為表單進行賦值了。
nodejs圖片上傳
nodejs一般開發(fā)網(wǎng)站基本都用express框架,本文也主要以express為例,講解如何上傳圖片;
express本身沒有上傳圖片功能;一般都是集成相應的模塊;常用的有multer中間件和formidable中間件,前一個我配置的時候總是出錯,所以pass;此處主要演示formidable的用法;
-表單提交;
-ajax提交;
表單提交代碼如下:
Document
這里注意表單的enctype屬性一定要是:multipart/form-data;
別忘了name屬性;
這是html文檔的講解:
定義和用法
enctype 屬性規(guī)定在發(fā)送到服務器之前應該如何對表單數(shù)據(jù)進行編碼。
默認地,表單數(shù)據(jù)會編碼為 "application/x-www-form-urlencoded"。就是說,在發(fā)送到服務器之前,所有字符都會進行編碼(空格轉(zhuǎn)換為 "+" 加號,特殊符號轉(zhuǎn)換為 ASCII HEX 值)。
ajax提交:
formdata file jquery ajax upload
ajax上傳主要用的是Jquery;這一塊只是知道這么用;配置ajax的時候processData與contentType都設置為false;
還有此處用了HTML5的一個新特性;FormData;
用法如下:new FormData($("#myForm")[0]);
將這坨數(shù)據(jù)傳到后端就可以了;
前端頁面演示完了;下面是后端代碼演示:var express = require("express"); var router = express.Router(); var formidable = require("formidable"), fs = require("fs"), TITLE = "formidable上傳示例", AVATAR_UPLOAD_FOLDER = "/avatar/", domain = "http://localhost:3000"; /* 圖片上傳路由 */ router.post("/uploader", function(req, res) { var form = new formidable.IncomingForm(); //創(chuàng)建上傳表單 form.encoding = "utf-8"; //設置編輯 form.uploadDir = "public" + AVATAR_UPLOAD_FOLDER; //設置上傳目錄 form.keepExtensions = true; //保留后綴 form.maxFieldsSize = 2 * 1024 * 1024; //文件大小 form.parse(req, function(err, fields, files) { if (err) { res.locals.error = err; res.render("index", { title: TITLE }); return; } console.log(files); var extName = ""; //后綴名 switch (files.fulAvatar.type) { case "image/pjpeg": extName = "jpg"; break; case "image/jpeg": extName = "jpg"; break; case "image/png": extName = "png"; break; case "image/x-png": extName = "png"; break; } if(extName.length == 0){ res.locals.error = "只支持png和jpg格式圖片"; res.render("index", { title: TITLE }); return; } var avatarName = Math.random() + "." + extName; //圖片寫入地址; var newPath = form.uploadDir + avatarName; //顯示地址; var showUrl = domain + AVATAR_UPLOAD_FOLDER + avatarName; console.log("newPath",newPath); fs.renameSync(files.fulAvatar.path, newPath); //重命名 res.json({ "newPath":showUrl }); }); }); module.exports = router;
圖片傳到后端其實就是一段2進制字符串,保存在內(nèi)存中,需要用到fs模塊讀取后再寫入到新的目錄;打印files
{ fulAvatar: File { domain: null, _events: {}, _eventsCount: 0, _maxListeners: undefined, size: 106836, path: "public/avatar/upload_d75420a381af12d19db01599fd2d0b73.jpeg", name: "line.jpeg", type: "image/jpeg", hash: null, lastModifiedDate: 2016-12-19T15:22:47.896Z, _writeStream: WriteStream { _writableState: [Object], writable: false, domain: null, _events: {}, _eventsCount: 0, _maxListeners: undefined, path: "public/avatar/upload_d75420a381af12d19db01599fd2d0b73.jpeg", fd: null, flags: "w", mode: 438, start: undefined, autoClose: true, pos: undefined, bytesWritten: 106836, closed: true } } }
以上數(shù)據(jù)用fs模塊讀取path屬性得到是就是一段2進制的字符串;
以上的示例基本就完成一些基本功能了;
疑惑就是網(wǎng)上一些jquery插件上傳圖片利用ajax,他們的原來是聲明呢 ?希望有人給解釋下
找到一篇相似的文章:
https://segmentfault.com/a/11...
補充:
var formData = new FormData(); var fileObj = document.getElementById("file_upload").files[0]; formData.append("fulAvatar", fileObj);
formData的兩種用法一種是直接將表單dom直接塞進去,還有一種就是通過append填進去,但是這里要注意,填進去的是name和dom的files[0]屬性;
文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/79631.html
摘要:后端程序配置因為是用自動生成的應用。允許進行跨域訪問的方法,我們這里主要用到的是和兩種方法。現(xiàn)在為止,先設置這些,后面還有具體路由的配置和認證等內(nèi)容。所以,我一直用這個框架來構(gòu)建網(wǎng)頁樣式。其中表的與表的設置為外鍵約束。 在上面一章中,我創(chuàng)建了前端的angular4框架程序和后端的nodejs-express框架程序,在這一章中,我準備對前后端程序進行一些簡單的配置,然后將后臺數(shù)據(jù)庫創(chuàng)建...
摘要:多一個技能多一條出路,祝你在自學道路上越走越好,掌握自己的核心技能,不只是優(yōu)秀,還要成為不可替代的人 NodeJs+Express+Mysql + Vuejs 項目實戰(zhàn) 最近準備寫一系列文章,全面講述如何基于NodeJs + Express + Mysql + Vuejs 從零開發(fā)前后端完全分離項目; 文筆及技術可能在某些方面欠佳,請您指正,共同學習進步 前端:Vuejs全家桶 后端:...
閱讀 2843·2021-11-25 09:43
閱讀 1001·2021-10-11 10:57
閱讀 2493·2020-12-03 17:20
閱讀 3739·2019-08-30 14:05
閱讀 2434·2019-08-29 14:00
閱讀 2003·2019-08-29 12:37
閱讀 1675·2019-08-26 11:34
閱讀 3222·2019-08-26 10:27