nodejs,处理表单提交文件和普通参数(enctype=“multipart/form-data“),使用插件multiparty,将图片上传到服务器的文件夹中

2022-09-22 13:08:19

目录

1. 页面form是有text类型和file类型输入框,所以需要将form提交类型设置为enctype="multipart/form-data" method="post"

2.普通的参数只需要req.body.id就可以取到,而文件在这种状态下只有一个文件名,enctype="multipart/form-data",可以传输文件,但node不可以使用req.body.id来接受数据。

需要用到插件 multiparty 。


1. 页面form是有text类型和file类型输入框,所以需要将form提交类型设置为enctype="multipart/form-data" method="post"

<form action="/article/add" enctype="multipart/form-data" method="post">
     
      <input type="hidden" name="id" value="<%- item.id %>">
      <input type="hidden" name="page" value="<%- item.page %>">
      <div  class="inputTitle">请上传封面文件</div>
      <input type="file" name="coverImg">
      <div  class="inputTitle">新闻内容:</div>
      <textarea name="content" class="xheditor"><%- item.content %></textarea>
      <% if (item.id) { %>
        <input type="submit" value="修改">
      <%} else {
      %>
        <input type="submit" value="发布">
      <%}%>
    </form>

2.普通的参数只需要req.body.id就可以取到,而文件在这种状态下只有一个文件名,enctype="multipart/form-data",可以传输文件,但node不可以使用req.body.id来接受数据。

需要用到插件multiparty

1.安装插件,

2.引入到当前文件

var multiparty = require('multiparty');

3.使用

  •  新建multiparty.Form()对象form

form的parse方法将req请求作为第一个参数,第二个参数是回调函数,在函数中:

三个参数是报错信息,普通参数数组,文件数组

普通参数id获取方式:

    var id = parseInt(fields.id[0])
    var newsType = parseInt(fields.newsType[0]) || 0


  文件获取:

    var file = files.coverImg[0]

var form = new multiparty.Form()
  form.parse(req, function(err, fields, files) {
    if (err) {
      //console.log('上传失败', err);
    } else {
      var id = parseInt(fields.id[0])
      //console.log('id:',id)
      var newsType = parseInt(fields.newsType[0]) || 0
      var file = files.coverImg[0]

    }
  •  这个方法是将文件存到服务器:

uploadsCover(file, dirName),第一个参数是文件,第二个参数是文件夹名字。

如:公司新闻动态的文件file 放在covers下面的company文件夹下:uploadsCover(file, 'company'),

会返回cover是文件名字,将文件名存储到数据库,前端可以通过名字cover访问到;

其中使用了fs核心模块,需要进行导入:

var fs = require('fs');
function uploadsCover(file, dirName){
        // var file = files.coverImg[0]
        // console.log(file)
        var rs = fs.createReadStream(file.path)
        var cover =  dirName + file.originalFilename
        // console.log('cover:'+cover)
        var newPath = '/covers/'+ cover
        // console.log(newPath, '进行写文件')
        var ws = fs.createWriteStream('./public' + newPath)
        rs.pipe(ws)
        ws.on('finish', function() {
          // console.log('文件上传成功')
          // res.send({err: '', msg: newPath})
        })
        return cover
}
  • 作者:十年4646454sdg5sagsa
  • 原文链接:https://blog.csdn.net/a12336487213/article/details/115699353
    更新时间:2022-09-22 13:08:19