前端 html代码 + ajax代码

  form表单(无需指定action)

<form enctype="multipart/form-data" method="post" class="upload-cont">
<input type="file" name="files1" class="files1">
<input type="text" name="username" class="username">
<input type="button" class="uploadBtn" value="点击上传">
</form>

  使用jquery中的ajax的方式上传文件

<script src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
<script>
$(".files1").on("change",function(e){
var e = e || window.event;
var files = e.target.files;
var file = files[0];
//文件上传
$(".uploadBtn").off("click").on("click",function(){
var username = $('.username').val();
var formData = new FormData();
formData.append('files1',file);
formData.append('username',username);
console.log(file);
$.ajax({
url: "/ajaxUpload",
type: "post",
data:formData,
contentType: false,
processData: false,
success: function(res){
console.log(res);
},
error:function(err){
console.log(err);
}
});
})
})
</script>

FormData对象介绍 https://developer.mozilla.org/zh-CN/docs/Web/API/FormData/Using_FormData_Objects

通过FormData对象可以组装一组用 XMLHttpRequest发送请求的键/值对。它可以更灵活方便的发送表单数据,因为可以独立于表单使用。

如果你把表单的编码类型设置为multipart/form-data ,则通过FormData传输的数据格式和表单通过submit() 方法传输的数据格式相同。

所以使用formData的时候 只需要在form上设置enctype="multipart/form-data",然后用ajax跟formData提交form表单数据,可代替直接用form表单submit提交方式。

multer介绍

  Multer 是一个 node.js 中间件,用于处理 multipart/form-data 类型的表单数据, 它主要用于上传文件. 它是写在 busboy 之上非常高效。

  注意: Multer 不会处理任何非 multipart/form-data 类型的表单数据.

  multer文档地址:https://www.npmjs.com/package/multer
  引用地址:https://github.com/expressjs/multer/blob/master/doc/README-zh-cn.md

windows下 安装 multer

npm install --save multer

multer的使用

var multer = require('multer');
/**
* process.cwd()获取项目根目录地址,可以将上传的文件指定到静态文件目录下,然后再返回地址给前端页面,如:
* var uploadPath = process.cwd()+'/public/uploads' 前端访问地址 http://localhost:3000/uploads/文件名
**/
var uploadPath = process.cwd()+'/uploads';//直接存放在根目录下uploads
var storage = multer.diskStorage({//multer存储引擎 存储引擎自定义引用 https://github.com/expressjs/multer/blob/master/StorageEngine.md
destination: ,//指定上传文件的路径
filename: function (req, file, cb) { cb(null, file.fieldname + '-' + Date.now())//命名上传文件 } })
var multer = multer({
storage: storage,
   //limits:''//Limits of the uploaded data
}).single('files1');//single 单文件上传,files1为form表单中 接受文件的name字段名称
app.post('/ajaxUpload',function(req,res){ 
  multer(req,res,function(err){
    if(err){
      console.log(err);
      return ;
    }
    console.log(req.body.username);//获取通过formData中表单的字段 name="username"的数据
    //req.body ajax提交的非文件数据
    //req.body.username //提交参数 username
    //req.file.fieldname 上传文件 input file name字段名称
    //req.file.filename 上传文件 文件名
    //req.file.originalname 上传文件 文件名
    //req.file.mimetype 上传文件类型
    //req.file.size 上传文件大小
    //req.file.destination 上传文件存在的路径
    //req.file.path 上传文件的 路径
    console.log(req.file.path);

     /**

* 可以通过req.file中的参数,做一个文件上传的过滤,例如req.file.size 限制文件上传大小,req.file.mimetype 限制文件上传的类型

**/

    res.send({msg:'上传成功',img:req.file.path});//返回数据到前端页面,可以将上传的图片,在前端预览。
  })
});
在使用 res.send()发送数据到前端时,因为本文图片存放的地址是在项目根目录下,所以显示的地址是D:\leijie\test\express-mysql\uploads\share.png。
这种形式在页面上无法预览出来,如果想简单的使用预览出,可以将图片上传的目录存放在public静态目录下
静态目录设置 在app.js文件中设置 app.use(express.static(path.join(__dirname, 'public')));

 参考链接:

 https://www.npmjs.com/package/multer

   https://github.com/expressjs/multer/blob/master/doc/README-zh-cn.md

 https://developer.mozilla.org/zh-CN/docs/Web/API/FormData/Using_FormData_Objects

   https://github.com/expressjs/multer/blob/master/StorageEngine.md

   https://developer.mozilla.org/zh-CN/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest

nodejs+multer+ajax文件上传的更多相关文章

  1. nodejs+express-实现文件上传下载管理的网站

    Nodejs+Express-实现文件上传下载管理的网站 项目Github地址(对你有帮助记得给星哟):https://github.com/qcer/updo 后端:基于nodejs的express ...

  2. AJAX文件上传实践与分析,带HTML5文件上传API。

    对于HTML5已经支持AJAX文件上传了,但如果需要兼容的话还是得用一点小技巧的,HTML5等等介绍,先来看看以前我们是怎么写的. 网上可能会有一些叫AJAX文件上传插件,但在AJAX2.0之前是不可 ...

  3. 兼容ie的jquery ajax文件上传

    Ajax文件上传插件很多,但兼容性各不一样,许多是对ie不兼容的,另外项目中是要求将网页内容嵌入到桌面端应用的,这样就不允许带flash的上传插件了,如:jquery uploadify...悲剧 对 ...

  4. jQuery插件AjaxFileUpload实现ajax文件上传

    转自:http://www.cnblogs.com/linjiqin/p/3530848.html jQuery插件AjaxFileUpload用来实现ajax文件上传,该插件使用非常简单,接下来写个 ...

  5. ajax 文件上传,ajax

    ajax 文件上传,ajax 啥也不说了,直接上代码! <input type="file" id="file" name="myfile&qu ...

  6. 转: 如何实现jQuery的Ajax文件上传

    [PHP文件上传] 在开始之前,我觉得是有必要把通WEB上传文件的原理简单说一下的.实际上,在这里不管是PHP,JSP,还是ASP处理上传的文件,其实都是WEB早已把文件上传到服务器了,我们只是运用上 ...

  7. [代码示例]用Fine Uploader+ASP.NET MVC实现ajax文件上传

    原文 [代码示例]用Fine Uploader+ASP.NET MVC实现ajax文件上传 Fine Uploader(http://fineuploader.com/)是一个实现 ajax 上传文件 ...

  8. php+ajax文件上传

    php+ajax文件上传 html: <input id="user_real_name" class="input_show" type="t ...

  9. springmvc+ajax文件上传

    环境:JDK6以上,这里我是用JDK8,mysql57,maven项目 框架环境:spring+springmvc+mybaits或spring+springmvc+mybatis plus 前端代码 ...

随机推荐

  1. nginx最简单的网站配置:单主机+静态文件

    1.域名绑定主机:新建一个A记录,将www的子域名绑定到主机的ip上:2.主机的nginx设置监听端口,绑定域名,修改网站根目录路径和默认首选文件:/etc/nginx/conf.d 这个目录中新建一 ...

  2. magento导入数据的方法

    导入演示数据 分两种情况处理. 如果你是用composer方式安装的 非常简单,二行命令搞定:在项目根目录下执行.我们的是在/var/www/magento2/下面. 安装演示数据 php bin/m ...

  3. Ubuntu bitnami gitlab 安装

    /************************************************************************************** * Ubuntu bit ...

  4. NOIP提高组2006-金明的预算方案

    链接 分析:依赖型0-1背包问题,对于一个主件,可以挂0个,1个,2个附件,所以最终为4种状态情况下的最大值. #include "iostream" #include " ...

  5. Transformations

    链接 分析:根据操作模拟 /* ID:wanghan PROB:transform LANG:C++ */ #include "iostream" #include "c ...

  6. 【Sdoi2008】沙拉公主的困惑

    [题目链接] 点击打开链接 [算法] gcd(a,b)=gcd(a mod b, b),又m!|n!          则有ans=(n!/m!)·ϕ(m!)          由ϕ(n)=n(1-1 ...

  7. How to study Watir?

    我在群空间,总是看到很多Watir新手,反复的问:我对元素的定位怎么又出错?我该从哪里着手啊?我给一个我认为最简单方便的学习方法.1. Ruby语法基础要入门,网上有一个不到2M的帮助文档,从头到尾仔 ...

  8. unity anim(转)

    Unity4的Mecanim动画很早以前就有体验过,迟迟没有加到项目中有两个原因,今天写这篇博客来记录我在做的过程中遇到的一些问题. 1.以前的代码代码量比较多,修改起来动的地方太多了. 2.使用Me ...

  9. 关于base64编码的原理及实现

    我们的图片大部分都是可以转换成base64编码的data:image. 这个在将canvas保存为img的时候尤其有用.虽然除ie外,大部分现代浏览器都已经支持原生的基于base64的encode和d ...

  10. JavaScript-Tool:jqgrid

    ylbtech-JavaScript-Tool:jqgrid jqGrid 是一个用来显示网格数据的jQuery插件,文档比较全面,附带中文版本. 1.返回顶部   2.返回顶部   3.返回顶部   ...