真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

圖片上傳之FileAPI與NodeJs

HTML5之fileAPI

創(chuàng)新互聯(lián)公司服務(wù)項(xiàng)目包括扎蘭屯網(wǎng)站建設(shè)、扎蘭屯網(wǎng)站制作、扎蘭屯網(wǎng)頁(yè)制作以及扎蘭屯網(wǎng)絡(luò)營(yíng)銷策劃等。多年來(lái),我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,扎蘭屯網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到扎蘭屯省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

HTML5之fileAPI使得我們處理圖片上傳更加簡(jiǎn)單。

實(shí)例

html代碼

預(yù)覽區(qū)

效果:

圖片上傳之FileAPI與NodeJs

這里我們可以通過(guò)$("#modal_inputFile")[0].files[0]來(lái)獲取到圖片的信息。

圖片上傳之FileAPI與NodeJs

這里有name,size,type這幾個(gè)我們常用的屬性。

實(shí)現(xiàn)預(yù)覽

選擇好圖片后,我們都希望會(huì)有個(gè)預(yù)覽功能。這個(gè)html5也為我們想到了。

他提供了FileReader這個(gè)新的對(duì)象給我們。

FileReader該接口主要用來(lái)把文件讀入內(nèi)存,并且讀取文件中的數(shù)據(jù)。

這樣我們就可以通過(guò)date url來(lái)實(shí)現(xiàn)預(yù)覽了。

var file = document.getElementById(modal_inputFile'').files[0];
 if (!file) {
 return false;
 }
 var reader = new FileReader();
 reader.readAsDataURL(file);
 reader.onload = function(e) {
 var ib_pre = document.getElementById('modal-pre');
 ib_pre.src = this.result;
}

這樣就實(shí)現(xiàn)了預(yù)覽。

圖片上傳之FileAPI與NodeJs

我們?cè)賮?lái)查看下img的src。

預(yù)覽區(qū)

src是base64編碼。

與后臺(tái)對(duì)接

既然前端使用文件API能滿足我們的需求,那我們接下來(lái)就需要上傳到服務(wù)端了。當(dāng)仁不讓的就是NodeJs了。

前端請(qǐng)求

下面是前端發(fā)起請(qǐng)求的例子:

//圖片上傳
$('#preUpload').on('click', function(e) {
 var data = new FormData();
 var _files = $("#modal_inputFile")[0].files[0];
 var ect = ($("#modal_inputFile")[0].files[0]).name.split('.')[1];
 if(ect !== 'png'){
  alert('請(qǐng)上傳png圖片!')
  return;
 }
 data.append("modal_file", _files);
 $.ajax({
  type: 'post',
  dataType: 'json',
  url: window.stnt_hosts + 'thirdAdmanage/upload/modal',
  data: data,
  contentType: false,
  processData: false
 }).done(function(data, status) {
  console.log('上傳成功');
 }).fail(function(err) {
  console.log('上傳失敗');
 })
})

這里通過(guò)FormData來(lái)處理我們需要上傳的數(shù)據(jù)。

這里的data數(shù)據(jù)是一個(gè)序列過(guò)的對(duì)象。后臺(tái)接受就行了。

后端處理

服務(wù)端我們使用node-formidable來(lái)處理圖片的保存等操作。

見(jiàn)代碼:

var formidable = require("formidable");
var form = new formidable.IncomingForm();
//臨時(shí)目錄
form.uploadDir = './upload/';
//預(yù)覽圖片上傳
router.post('/upload/modal', function(req, res, next) {
 form.parse(req, function(err, fields, files) {
  if (files.modal_file) {
   rename(files.modal_file.path, files.modal_file.name, 'preview')
   res.send({
    stats:'success',
    data:[]
   })
  }
 })
});
function rename(old, _new, code, bId) {
 var path = './upload/' + code + '/';
  fs.exists(path, function(exists) {
   if (!exists) {
    fs.mkdir(path)
    console.log('創(chuàng)建文件夾!')
   }
   fs.renameSync(old, path + _new, function(err) {
    if (err) {
     console.log(err);
     return;
    }
    console.log('上傳成功!')
   })
  })
}

這里使用fs.renameSync的原因是,我們里面設(shè)置的臨時(shí)目錄form.uploadDir是存在于內(nèi)存中的數(shù)據(jù),并不是真正的圖片。

類似這樣

圖片上傳之FileAPI與NodeJs

我們需要通過(guò)fs的方法,將文件重新保存到我們需要的地方即可。這時(shí)候就是圖片了。

最后

這里的form.parse(req, function(err, fields, files)中的fields與files到底是什么對(duì)象,一定要自己調(diào)試著看。看完你就明白是什么了。

之前我不清楚的時(shí)候就是打開(kāi)瀏覽器就搜索,結(jié)果可想而知很慘,幾乎全是錯(cuò)的。

所以不清楚的話一定要去查github。

還有app.use(bodyParser.urlencoded({ extended: true }));的作用是用來(lái)解析我們通常的form表單提交的數(shù)據(jù),也就是請(qǐng)求頭中包含這樣的信息: Content-Type: application/x-www-form-urlencoded

app.use(bodyParser.json())是用來(lái)解析json的。

以上就是本文的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,同時(shí)也希望多多支持創(chuàng)新互聯(lián)!


文章名稱:圖片上傳之FileAPI與NodeJs
文章分享:http://weahome.cn/article/jpoose.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部