Maison > interface Web > js tutoriel > Exemple de code Nodejs pour l'aperçu et le téléchargement d'images

Exemple de code Nodejs pour l'aperçu et le téléchargement d'images

黄舟
Libérer: 2017-10-01 07:42:51
original
1996 Les gens l'ont consulté

Cet article présente principalement l'exemple de code pour l'aperçu et le téléchargement d'images nodejs. L'éditeur pense que c'est assez bon, je vais donc le partager avec vous maintenant et le donner comme référence. Suivons l'éditeur et jetons un coup d'œil.

Cet article présente l'exemple de code pour l'aperçu et le téléchargement d'images nodejs, et le partage avec tout le monde. Les détails sont les suivants :

L'effet est le suivant. suit :

Avant-propos

Généralement, vous devez prévisualiser l'image localement avant de la télécharger.

L'aperçu de l'image frontale utilise la méthode readAsDataURL de FileReader

Le téléchargement d'images nodejs utilise le middleware Multer

Local Aperçu de l'image

L'objet FileReader permet à une application Web de lire de manière asynchrone le contenu d'un fichier (ou d'un tampon de données brutes) stocké sur l'ordinateur de l'utilisateur, en utilisant un objet File ou Blob pour spécifier le fichier à lire ou des données.

La méthode readAsDataURL est utilisée pour lire le contenu du Blob ou du fichier spécifié. Lorsque l'opération de lecture est terminée, readyState est terminé et Loadend est déclenché. À ce stade, l'attribut result contient les données sous forme d'URL représentant le fichier, sous forme de chaîne codée en base64.

Aperçu d'une seule image

partie HTML


<input type="file" onchange="previewFile()"><br>
<img src="" height="200" alt="Image preview...">
Copier après la connexion

partie javascript


function previewFile() {
 var preview = document.querySelector(&#39;img&#39;);
 var file  = document.querySelector(&#39;input[type=file]&#39;).files[0];
 var reader = new FileReader();

 reader.addEventListener("load", function () {
  preview.src = reader.result;
 }, false);

 if (file) {
  reader.readAsDataURL(file);
 }
}
Copier après la connexion

Aperçu de plusieurs images

section HTML


<input id="browse" type="file" onchange="previewFiles()" multiple>
<p id="preview"></p>
Copier après la connexion

Le la partie javascript


function previewFiles() {

 var preview = document.querySelector(&#39;#preview&#39;);
 var files  = document.querySelector(&#39;input[type=file]&#39;).files;

 function readAndPreview(file) {

  // 支持的图片类型(可自定义)
  if ( /\.(jpe?g|png|gif)$/i.test(file.name) ) {
   var reader = new FileReader();

   reader.addEventListener("load", function () {
    var image = new Image();
    image.height = 100;
    image.title = file.name;
    image.src = this.result;
    preview.appendChild( image );
   }, false);

   reader.readAsDataURL(file);
  }

 }
 //files 就是input选中的文件,你也可以对上传图片个数进行限制 (files.length)
 if (files) {
  [].forEach.call(files, readAndPreview);
 }

}
Copier après la connexion

est utilisée dans le projet

la partie front-end

html


<input id="txtUploadFile" type="file">
<input id="txtUploadFileList" type="file" accept="image/jpeg,image/png,image/gif" multiple class="upload-file">
<p id="preview"></p>
<input id="btnSend" type="button" value="发送" class="btn btn-default">
Copier après la connexion

javascript

la partie méthode js est démontée, c'est un peu long de la mettre dans un seul bloc de code (veuillez vérifier le contexte à la lecture)


 $(function(){
    var upload={
      txtUploadFile:$(&#39;#txtUploadFile&#39;), //上传单个文件
      txtUploadFileList:$(&#39;#txtUploadFileList&#39;), //上传多个文件
      btnSend:$(&#39;#btnSend&#39;), //上传文件
      preview:$(&#39;#preview&#39;),//图片预览盒子
      //预览图片加载
      previewImgLoad:function(fileList){
        for(var i=0;i<fileList.length;i++){
          var tempFile=fileList[i];
          var reader = new FileReader();
          reader.readAsDataURL(tempFile);
          reader.onload=function (e) {
            var image = new Image();
            image.height = 100;
            image.title = tempFile.name;
            image.src = e.target.result;
            upload.preview.append(image);
          }
        }
      }
    }
  });
Copier après la connexion


 /*
    上传单个文件
    这里是input改变时后直接上传(用于修改用户头像)
    你也可以在点击上传按钮后再上传,下面的多图上传会给出案例
    */
    upload.txtUploadFile.change(function(){
      var formData = new FormData();
      formData.append(&#39;avatar&#39;,upload.txtUploadFile[0].files[0]);
      $.ajax({
        url: &#39;/upload/file&#39;,
        type: &#39;post&#39;,
        cache: false,
        data: formData,
        processData: false,
        contentType: false,
        success:function(res){
          console.log(&#39;upload success&#39;);
        },
        error:function(){
          console.log(&#39;upload faild&#39;);
        }
      });
    });
Copier après la connexion


  //加载预览图片
    upload.txtUploadFileList.change(function(){
      var fileList=this.files;
      upload.previewImgLoad(fileList);
    });
Copier après la connexion


//上传多张图片
    upload.btnSend.click(function(){
      var files = upload.txtUploadFileList.prop(&#39;files&#39;);
      if(files.length==0){
        //没有选择文件直接返回
        return;
      }
      var formData=new FormData();
      for(var i=0;i<files.length;i++){
        formData.append(&#39;photos&#39;,files[i]);
      }
      $.ajax({
        url: &#39;/upload/filesList&#39;,
        type: &#39;post&#39;,
        cache: false,
        data: formData,
        processData: false,
        contentType: false,
        success:function(res){
          console.log(&#39;upload success&#39;);
          //到这里图片已经上传成功了.你可根据返回结果处理其他的业务逻辑
          if(res.status==1){
            // todo something
          }
        },
        error:function(){
          console.log(&#39;upload faild&#39;);
        }
      });

    });
Copier après la connexion

partie nodejs

nodejs utilise le middleware Multer, qui est principalement utilisé pour télécharger des fichiers

Installer Multer


npm install --save multer
Copier après la connexion

Multer est utilisé dans nodejs


var express = require(&#39;express&#39;);
var multer = require(&#39;multer&#39;);
var app = express();

//磁盘存储引擎(说白了就是指定上传的文件存储到哪,当然你也可以对文件重命名等等)
var storage=multer.diskStorage({
  destination: function (req, file, cb) {
    //我这里是存储在public下的uploads目录
    cb(null, &#39;public/uploads/&#39;)  
  },
  filename: function (req, file, cb) {
    cb(null, file.fieldname + &#39;-&#39; + Date.now()+"_" + file.originalname)
  }
});
Copier après la connexion

Téléchargement d'une seule image


//如果图片上传成功会返回图片的存储路径
app.post(&#39;/upload/file&#39;, upload.single(&#39;avatar&#39;), function(req, res) {
  if (!req.file) {
    console.log("no file received");
    return res.send({
      status: 0,
      filePath:&#39;&#39;
    });
  } else {
    console.log(&#39;file received&#39;);
    res.send({
      status:1,
      filePath: &#39;/uploads/&#39; + path.basename(req.file.path)
    });
  }
});
Copier après la connexion

Télécharger plusieurs photos


// 如果图片上传成功会返回图片的存储路径(数组)
app.post(&#39;/upload/filesList&#39;, upload.array(&#39;photos&#39;,9), function(req, res) {
  if (req.files==undefined) {
    console.log("no files received");
    return res.send({
      status: 0,
      filePath:&#39;&#39;
    });
  } else {
    var filesPathArr=[];
    for(var i=0;i<req.files.length;i++){
      filesPathArr.push(&#39;/uploads/&#39; + path.basename(req.files[i].path));
    }
    res.send({
      status:1,
      filesPath: filesPathArr
    });
  }
});
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal