成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

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

tuniutech / 1950人閱讀

摘要:默認地,表單數(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 值)。

Alt text

ajax提交:




     formdata file jquery ajax upload





ajax 文件上傳 。

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

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

將這坨數(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進制的字符串;

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

以上的示例基本就完成一些基本功能了;
疑惑就是網(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

相關文章

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

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

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

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

    noONE 評論0 收藏0

發(fā)表評論

0條評論

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