nodeJs上传附件

两种方案: 这两种方案传参还是有区别额

在nodeJs中上传附件调用了 multer 的中间件,采用这个中间件来上传

首先是表单(前端部分):

<!DOCTYPE html>
<html>
  <head>
    <title>nodejs文件上传</title>
    <script src="/javascripts/jquery.min.js"></script>
  </head>
  <body>
    <form action="/upload" method="post" enctype="multipart/form-data">
        <input name="fileUpload" type="file" />
        <!--1-->
        <img src="" >
        <button type="submit">上传</button>
    </form>
    <script>
    (function($){
      $(‘input‘).on(‘change‘, function(event) {
        var files = event.target.files,
            reader = new FileReader();
        if(files && files[0]){
            reader.onload = function (ev) {
                $(‘img‘).attr(‘src‘, ev.target.result);
            }
            reader.readAsDataURL(files[0]);
        }
      })
    }(jQuery))
    </script>
  </body>
</html>

  服务器端:

var express = require(‘express‘);
var router = express.Router();
var multer = require(‘multer‘);
var fs = require(‘fs‘);

const UPLOAD_PATH = ‘./uploads‘

var upload = multer({ dest: UPLOAD_PATH })

/* GET home page. */
router.get(‘/‘, function(req, res, next) {
  res.render(‘index‘, { title: ‘Express‘ });
});

//多文件上传
// router.post(‘/upload‘, upload.array(‘fileUpload‘), function (req, res, next) {
//   const files  = req.files;
//   const response = [];
//   const result = new Promise((resolve, reject) => {
//     files.map((v) => {
//       fs.readFile(v.path, function(err, data) {
//         fs.writeFile(`${UPLOAD_PATH}/${v.originalname}`, data, function(err, data) {
//           const result = {
//             file: v,
//           }
//           if (err)  reject(err);
//           resolve(‘成功‘);
//         })
//       })
//     })
//   })
//   result.then(r => {
//     res.json({
//       msg: ‘上传成功‘,
//     })
//   }).catch(err => {
//     res.json({ err })
//   });
// })
//单个文件上传
router.post(‘/upload‘, upload.single(‘fileUpload‘), function (req, res, next) {
  const { file } = req;
  console.log(req.files);
  fs.readFile(file.path, function(err, data) {
    fs.writeFile(`${UPLOAD_PATH}/${file.originalname}`, data, function (err) {
      if (err) res.json({ err })
      res.json({
        msg: ‘上传成功‘
      });
    });
  })
})

module.exports = router;

这事表单上传还有一种就是用异步上传(我比较常用的一种)

这种的话需要怼传输的数据进行重新封装 (首先把所得的数据封装为FormData 然后给后台)

 let _this = this;
    document.getElementById(‘upload‘).onchange = function (e) {
      let file = e.target.files[0];
      var formData = new FormData();
      formData.append(‘fileUpload‘, file);
      _this.axios.post(‘/user/file-upload‘, formData).then(function (response) {
        if (response.data.state === 200) {
          _this.imageUrl = _this.$store.state.imgBaseUrl + response.data.result;
          _this.registerFromData.imageUrl = response.data.result;
        }
      });
    }

  

原文地址:https://www.cnblogs.com/yaobolove/p/8744420.html

时间: 2024-11-05 23:09:02

nodeJs上传附件的相关文章

测试上传附件

测试上传附件 http://images2015.cnblogs.com/blog/332907/201608/332907-20160828221233845-1455710267.jpg

上传附件使用jquery-form.js的ajaxsubmit提交一点记录

最近项目用到了附件附件上传功能,因为上传附件想尽量控制在一个控件上传附件并回显在下方的列表中,选择附件则触发上传. 刚开始使用了swfupload.js的flash控件进行上传,但是在IE中如果没有相应控件就无法draw出上传控件,应该是浏览器段没有flash控件造成的. 最后还是改回html的type="file"来实现上传,因为附件上传成功后需要回调函数并在下方列表中回显:所以纯粹的使用form表单提交无法回调需要的数据.而直接使用js取得input内容组装为file对象使用aja

ajax+FormData+javascript 实现无刷新上传附件

<!doctype html> <html> <head> <meta charset="utf-8"> <title>无标题文档</title> <script type="text/javascript"> window.onload=function() { var fm=document.getElementsByTagName("form")[0]; f

wordpress上传附件提示抱歉,出于安全的考虑,不支持此文件类型

wordpress添加自定义上传附件类型添加rar支持 在wp-includes/functions.php文件中查找application/zip,在“// openoffice formats”这行的上面加上 'rar' => 'application/rar', 其它解决办法 方法1:使用winrar压缩的时候“压缩文件格式”选择为zip. 方法2:直接禁用文件类型检测,在wp-config.php文件中,添加这样一句代码 define(‘ALLOW_UNFILTERED_UPLOADS’

修改WordPress中上传附件2M大小限制的方法/php+iis上传附件默认大小修改方法

在服务器上架设好WordPress后,使用过程中发现,上传附件大小有2M的限制 话说服务器就是本机,可以直接把文件拖到附件存储文件夹下,然后在需要附件的地方引用链接 可是这种落后的方法终究不是办法,还是应该修改大小限制,使用才方便. 在网搜了一下,方法有挺多,但大部分都是不完整信息的重复,下面说说我最后更改的方法,仅供参考. 服务器版本是:Windows Server 2003 SP2 WordPress架设:IIS+PHP+MySql 1.首先在网站根目录下建一个info.php文件 例如:D

怎样解决asp.net.mvc上传附件超过长度问题?

最近,在做一个上传附件功能,但是文件超过4M,就报上传的文件超过长度问题 如何解决这个问题呢?这里我找了一下资料,了解一下问题所在,有3种解决方法 方案一:在所在项目的web.config配置文件中,修改maxRequestLength的值 方案二:在.net framework的安装目录下的machine.config配置文件,修改maxRequestLength的值 方案三:修改IIS服务的上传文件大小的限制 方案一: 1.修改web.config文件,改变这个maxRequestLengt

jquery 通过ajax FormData 对象上传附件

之前上传附件都是用插件,或者用form表单体检(这个是很久以前的方式了),今天突发奇想,自己来实现附件上传,具体实现如下 html: <div>   流程图: <input id="file" type="file" >   <button ng-click="bpmmainFunction.createBpm()">提交</button></div> js: $scope.bpmmai

Dynamic CRM 2013学习笔记(十三)附件上传 / 上传附件

上传附件可能是CRM里比较常用的一个需求了,本文将介绍如何在CRM里实现附件的上传.显示及下载.包括以下几个步骤: 附件上传的web页面 附件显示及下载的附件实体 调用上传web页面的JS文件 实体上r的上传按钮   首先来看一下效果: 先点击上面的上传按钮,然后就会弹出一个上传附件的界面,选择需要上传的文件,填写文件名,点击上传,成功后会在下面的文件grid里显示已上传的文件,双击下面的文件就会打开文件的详细信息: 然后还可以下载文件.   下面来看下实现方法 1. 附件上传的web页面 新建

bugfree无法上传附件问题

1 查看各个项目的Project ID编号 mysql -uroot -h10.10.2xx.xx show databases; use bugfree2; desc bf_TestProject; select ProjectID,ProjectName from bf_TestProject;(查询结果如下) 2 在/var/www/html/bugfree/BugFile路径下创建文件夹 mkdir Project2  Project3  Project4  Project5  Proj