首頁 >web前端 >js教程 >express+multer如何實現圖片上傳功能

express+multer如何實現圖片上傳功能

亚连
亚连原創
2018-06-08 13:43:262011瀏覽

這篇文章主要介紹了使用express multer實現node中的圖片上傳功能,需要的朋友可以參考下

下文給大家介紹使用express multer實現node中的圖片上傳功能,具體內容介紹如下所示:

在前端中,我們使用ajax來異步上傳圖片,使用file-input來上傳圖片,使用formdata物件來處理圖片數據,post到伺服器中

在node中使用multer中間件來處理上傳路由介面

multer文件

package.json

html部分

<body>
<p class="form-group">
    <label>File input:</label>
    <input type="file" name="file" id="file">
    <p id="result"></p>
    <img id="img" src="">
  </p>
  <button id="upload" class="btn btn-default">提交</button>
  </body>

js部分

#
<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
  <script>
    //上传图片的业务逻辑函数
    function uploadFile(){
      //上传图片的input
      var file = document.getElementById("file")
      //因为准备用post提交,又因为图片的内容比较大,所以我们选择使用formdata来承载数据
      //创建formdata对象
      var formData = new FormData();
      //给formdata对象中放入数据(键值对的方式)
      formData.append(&#39;file&#39;,file.files[0]);
      //提交请求
      $.ajax({
        url: &#39;/upload&#39;,//请求路径
        type: &#39;POST&#39;,
        data: formData,
        contentType: false,//为了让浏览器根据传入的formdata来判断contentType
        processData: false,//同上
        success: function(data){
          if(200 === data.code) {
            $(&#39;#result&#39;).html("上传成功!");
            $(&#39;#img&#39;).attr(&#39;src&#39;,data.data);
          } else {
            $(&#39;#result&#39;).html("上传失败!");
          }
          console.log(2)
        },
        error: function(){
          $("#result").html("与服务器通信发生错误");
        }
      });
      console.log(1)
    }
    //给按钮添加点击事件
    function postPage() {
        //上传按钮
        var uploada = document.getElementById(&#39;upload&#39;);
        uploada.addEventListener("click",function () {
          uploadFile();
        },false);
    }
    window.onload = function () {
      postPage();
    }
</script>

NodeJS邏輯程式碼

#
const http = require(&#39;http&#39;)
const path = require(&#39;path&#39;)
const express = require(&#39;express&#39;)
//是nodejs中处理multipart/form-data数据格式(主要用在上传功能中)的中间件
//文档:https://github.com/expressjs/multer/blob/master/doc/README-zh-cn.md
const multer = require(&#39;multer&#39;)
const app = express()
//配置express的静态目录
app.use(express.static(path.join(__dirname, &#39;public&#39;)));
app.get(&#39;/&#39;,(req,res)=>{
  res.sendFile(__dirname+&#39;/index.html&#39;)
})
//配置diskStorage来控制文件存储的位置以及文件名字等
var storage = multer.diskStorage({
  //确定图片存储的位置
  destination: function (req, file, cb){
    cb(null, &#39;./public/uploadImgs&#39;)
  },
![](http://images2017.cnblogs.com/blog/1283058/201802/1283058-20180201154342296-515041615.png)
  //确定图片存储时的名字,注意,如果使用原名,可能会造成再次上传同一张图片的时候的冲突
  filename: function (req, file, cb){
    cb(null, Date.now()+file.originalname)
  }
});
//生成的专门处理上传的一个工具,可以传入storage、limits等配置
var upload = multer({storage: storage});
//接收上传图片请求的接口
app.post(&#39;/upload&#39;, upload.single(&#39;file&#39;), function (req, res, next) {
  //图片已经被放入到服务器里,且req也已经被upload中间件给处理好了(加上了file等信息)
  //线上的也就是服务器中的图片的绝对地址
  var url = &#39;/uploadImgs/&#39; + req.file.filename
  res.json({
    code : 200,
    data : url
  })
});
http.createServer(app).listen(3000,()=>{
  console.log(&#39;server is listening&#39;)
})

自我感覺良好,不知道部落格花園為什麼要給我移除首頁....

再发一次,if(delete){
alert(&#39;Never publish anything again.&#39;)
}else{
alert(1)
}

上面是我整理給大家的,希望今後會對大家有幫助。

相關文章:

JavaScript中Object基礎內部方法圖(圖文教學)

如何實作node express個人化聊天室?

在webpack中如何使用ECharts?

以上是express+multer如何實現圖片上傳功能的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn