亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

nodejs express圖片上傳前后端配置講解

tuniutech / 2063人閱讀

摘要:默認(rèn)地,表單數(shù)據(jù)會(huì)編碼為。就是說(shuō),在發(fā)送到服務(wù)器之前,所有字符都會(huì)進(jìn)行編碼空格轉(zhuǎn)換為加號(hào),特殊符號(hào)轉(zhuǎn)換為值。提交說(shuō)明文件上傳。圖片選擇圖片地址上傳上傳。用表單直接構(gòu)造對(duì)象就不需要下面的方法來(lái)為表單進(jìn)行賦值了。

nodejs圖片上傳

nodejs一般開(kāi)發(fā)網(wǎng)站基本都用express框架,本文也主要以express為例,講解如何上傳圖片;
express本身沒(méi)有上傳圖片功能;一般都是集成相應(yīng)的模塊;常用的有multer中間件和formidable中間件,前一個(gè)我配置的時(shí)候總是出錯(cuò),所以pass;此處主要演示formidable的用法;

首先前端頁(yè)面配置,無(wú)非兩種,

-表單提交;
-ajax提交;
表單提交代碼如下




    
    Document


這里注意表單的enctype屬性一定要是:multipart/form-data;
別忘了name屬性;
這是html文檔的講解:

定義和用法
enctype 屬性規(guī)定在發(fā)送到服務(wù)器之前應(yīng)該如何對(duì)表單數(shù)據(jù)進(jìn)行編碼。

默認(rèn)地,表單數(shù)據(jù)會(huì)編碼為 "application/x-www-form-urlencoded"。就是說(shuō),在發(fā)送到服務(wù)器之前,所有字符都會(huì)進(jìn)行編碼(空格轉(zhuǎn)換為 "+" 加號(hào),特殊符號(hào)轉(zhuǎn)換為 ASCII HEX 值)。

Alt text

ajax提交:




     formdata file jquery ajax upload





ajax 文件上傳 。

ajax上傳主要用的是Jquery;這一塊只是知道這么用;配置ajax的時(shí)候processDatacontentType都設(shè)置為false;
還有此處用了HTML5的一個(gè)新特性;FormData;
用法如下:new FormData($("#myForm")[0]);

關(guān)于ajax這一塊我做了個(gè)嘗試,就是不用html5的FormData,而是直接用$("file_upload").val()去取文件表單的值,然后通過(guò)ajax傳遞,結(jié)果不是很理想;

將這坨數(shù)據(jù)傳到后端就可以了;

前端頁(yè)面演示完了;下面是后端代碼演示:
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";        //設(shè)置編輯
  form.uploadDir = "public" + AVATAR_UPLOAD_FOLDER;     //設(shè)置上傳目錄
  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;
    //圖片寫(xiě)入地址;
    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;

圖片傳到后端其實(shí)就是一段2進(jìn)制字符串,保存在內(nèi)存中,需要用到fs模塊讀取后再寫(xiě)入到新的目錄;打印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進(jìn)制的字符串;

注:如果不配置express中間件,express是不能取到上傳的文件的,這一塊在路由回調(diào)函數(shù)的req上沒(méi)有做處理。

以上的示例基本就完成一些基本功能了;
疑惑就是網(wǎng)上一些jquery插件上傳圖片利用ajax,他們的原來(lái)是聲明呢 ?希望有人給解釋下

找到一篇相似的文章:

https://segmentfault.com/a/11...

補(bǔ)充:

 var formData = new FormData();
 var fileObj = document.getElementById("file_upload").files[0];
 formData.append("fulAvatar", fileObj);

formData的兩種用法一種是直接將表單dom直接塞進(jìn)去,還有一種就是通過(guò)append填進(jìn)去,但是這里要注意,填進(jìn)去的是name和dom的files[0]屬性;

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/79631.html

相關(guān)文章

  • 利用angular4和nodejs-express構(gòu)建一個(gè)簡(jiǎn)單的網(wǎng)站(二)——設(shè)置跨域訪問(wèn)和安裝基本

    摘要:后端程序配置因?yàn)槭怯米詣?dòng)生成的應(yīng)用。允許進(jìn)行跨域訪問(wèn)的方法,我們這里主要用到的是和兩種方法?,F(xiàn)在為止,先設(shè)置這些,后面還有具體路由的配置和認(rèn)證等內(nèi)容。所以,我一直用這個(gè)框架來(lái)構(gòu)建網(wǎng)頁(yè)樣式。其中表的與表的設(shè)置為外鍵約束。 在上面一章中,我創(chuàng)建了前端的angular4框架程序和后端的nodejs-express框架程序,在這一章中,我準(zhǔn)備對(duì)前后端程序進(jìn)行一些簡(jiǎn)單的配置,然后將后臺(tái)數(shù)據(jù)庫(kù)創(chuàng)建...

    Jokcy 評(píng)論0 收藏0
  • NodeJs+Express+Mysql + Vuejs 項(xiàng)目實(shí)戰(zhàn) - 大綱

    摘要:多一個(gè)技能多一條出路,祝你在自學(xué)道路上越走越好,掌握自己的核心技能,不只是優(yōu)秀,還要成為不可替代的人 NodeJs+Express+Mysql + Vuejs 項(xiàng)目實(shí)戰(zhàn) 最近準(zhǔn)備寫(xiě)一系列文章,全面講述如何基于NodeJs + Express + Mysql + Vuejs 從零開(kāi)發(fā)前后端完全分離項(xiàng)目; 文筆及技術(shù)可能在某些方面欠佳,請(qǐng)您指正,共同學(xué)習(xí)進(jìn)步 前端:Vuejs全家桶 后端:...

    noONE 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<