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

資訊專欄INFORMATION COLUMN

前端ajax上傳文件,圖片,后端nodejs接收文件;

vincent_xyb / 707人閱讀

摘要:前端上傳文件,圖片,后端接收文件學(xué)習(xí)了,就想實(shí)現(xiàn)一下有進(jìn)度條的文件上傳,在做這個(gè)功能的時(shí)候遇到的問題用普通的無法實(shí)現(xiàn)文件上傳,只能,,一些,字符串想要上傳文件或者圖片,可以添加上傳注意需要在上添加標(biāo)示缺點(diǎn),這樣會(huì)倒置頁面的刷新很糟糕有沒有

前端ajax上傳文件,圖片,后端nodejs接收文件;

學(xué)習(xí)了nodejs,就想實(shí)現(xiàn)一下有進(jìn)度條的文件上傳,

在做這個(gè)功能的時(shí)候遇到的問題

用普通的ajax無法實(shí)現(xiàn)文件上傳,只能post,get,一些json,string字符串;

想要上傳文件或者圖片,可以添加form上傳;注意需要在form上添加 標(biāo)示 enctype="multipart/form-data"

缺點(diǎn),這樣會(huì)倒置頁面的刷新;很糟糕有沒有

還可以在頁面中添加一個(gè)ifame,將表單提交到ifame中,不過,一聽說有iframe就有點(diǎn)糟心有沒有;

于是就有了下面的東西;
請(qǐng)自動(dòng)忽略沒有樣式(只是為了實(shí)現(xiàn)功能)這個(gè)梗,啊哈哈;

好了廢話少說直接上代碼

前端部分代碼



    
    Document
    







用到了 FormData 類;

使用方法

通過new FormData 創(chuàng)建一個(gè)form提交實(shí)例對(duì)象;此對(duì)象會(huì)有append方法,

用法 oMyform.append(name,value) name是一個(gè)字段,value是對(duì)應(yīng)的值(可以是字符串,數(shù)字,file文件(通過dom.files[0]獲得))

    var oMyForm = new FormData();
    oMyForm.append("username", "Groucho");
    oMyForm.append("accountnum", 123456);
    oMyForm.append("userfile", fileInputElement.files[0]);
用到了XMLHttpRequest 的 onprogress 和 onloadend

注意 onprogress、onloadend、需要通過xhr.upload 調(diào)用如下;

oReq.upload.onprogress=function(e){
    console.log(e.loaded)
    console.log(e.total)
};
oReq.upload.onloadend=function(e){};
nodejs 后端的處理

主要用到了formidable模塊

主要代碼邏輯
/**
 * [導(dǎo)出一個(gè)中間件,formupload,用于處理文件上傳;]
 */
exports.formupload = function(req,res,next){
    //console.log(req);
    var form = new formidable.IncomingForm();
    var uploadDir = path.normalize(__dirname+"/"+"../avatar");
    form.uploadDir = uploadDir;
    console.log(uploadDir);
    form.parse(req, function(err, fields, files) {
        for(item in files){
            (function(){
                var oldname = files[item].path;
                var newname = files[item].name === "blob" ? oldname+".xml" : oldname+"."+files[item].name.split(".")[1];
                fs.rename(oldname,newname,function(err){
                    if(err) console.log(err);
                    console.log("修改成功");
                })
            })(item);
        }
        console.log(util.inspect({fields: fields, files: files}));
        res.send("2");
    });
遇到的問題

for 循環(huán)中有異步邏輯,導(dǎo)致異步邏輯出現(xiàn)問題;

formidable 的上傳文件路徑用相對(duì)路徑會(huì)找不到所指定的路徑

解決辦法

可以用閉包實(shí)現(xiàn),每次傳進(jìn)到閉包的變量不會(huì)受到外界的影響;

用牛逼的__dirname 變量;指向當(dāng)前文件的絕對(duì)路徑;

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

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

相關(guān)文章

  • 一步一步搭建一個(gè)圖片上傳網(wǎng)站(后臺(tái)服務(wù)器用nodejs

    摘要:把文件上傳路徑指定到然后用當(dāng)前日期和文件名命名上傳過來的文件。后端利用建立服務(wù)器,利用中間件指定文件路徑。利用這個(gè)前端和后端技術(shù),我們基本上就可以做出一個(gè)圖片上傳存儲(chǔ)的基本網(wǎng)站核心。 前幾天看了騰訊云社區(qū)的一個(gè)文件上傳的文章文件上傳那些事兒,大體上講了以下h5中圖片上傳的幾個(gè)核心原理,但是沒有后端接受的服務(wù)器代碼,沒法做測試。也沒有具體的一個(gè)實(shí)例都是一些基本的原理片段,并且ui界面也不...

    Darkgel 評(píng)論0 收藏0
  • nodejs express圖片上傳后端配置講解

    摘要:默認(rèn)地,表單數(shù)據(jù)會(huì)編碼為。就是說,在發(fā)送到服務(wù)器之前,所有字符都會(huì)進(jìn)行編碼空格轉(zhuǎn)換為加號(hào),特殊符號(hào)轉(zhuǎn)換為值。提交說明文件上傳。圖片選擇圖片地址上傳上傳。用表單直接構(gòu)造對(duì)象就不需要下面的方法來為表單進(jìn)行賦值了。 nodejs圖片上傳 nodejs一般開發(fā)網(wǎng)站基本都用express框架,本文也主要以express為例,講解如何上傳圖片;express本身沒有上傳圖片功能;一般都是集成相應(yīng)的...

    tuniutech 評(píng)論0 收藏0
  • vuejs使用FormData,ajax上傳圖片文件

    摘要:我相信很多使用的朋友,都有采用上傳圖片的需求,因?yàn)榍昂蠖朔蛛x后,我們希望都能用來解決數(shù)據(jù)問題,傳統(tǒng)的表單提交會(huì)導(dǎo)致提交成功后頁面跳轉(zhuǎn),而使用能夠無刷新上傳圖片等文件。 我相信很多使用vuejs的朋友,都有采用ajax上傳圖片的需求,因?yàn)榍昂蠖朔蛛x后,我們希望都能用ajax來解決數(shù)據(jù)問題,傳統(tǒng)的表單提交會(huì)導(dǎo)致提交成功后頁面跳轉(zhuǎn),而使用ajax能夠無刷新上傳圖片等文件。其實(shí)已經(jīng)有朋友封裝了...

    zollero 評(píng)論0 收藏0
  • 淺析前端上傳

    摘要:項(xiàng)目上也用到很多上傳文件的地方,七牛云,阿里云,訊飛上傳都接觸過,所以在這里做一個(gè)記錄,總結(jié)一下前端上傳的幾種方式。類型的文件名七牛云上傳淺析是一個(gè)基于七牛開發(fā)的前端。 showImg(https://segmentfault.com/img/bVbvibu?w=1920&h=1080); 圖片,音頻,視頻等等這幾種常見的資源類型,如果需要從前端上傳到服務(wù)端,有幾種方式呢?不妨回顧一下...

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

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

0條評(píng)論

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