FormData和multer使用的一个小坑
来源:互联网 发布:java 时间戳 时区 编辑:程序博客网 时间:2024/06/08 14:21
先上正确的代码
HTML5的FormData配合node.js中间件multer实现图片上传遇到的问题:直接将页面的form对象传入FormData的构造方法中传到后端,multer无法获取文件对象。
multer地址
服务端代码
const router = require('express').Router();const multer=require('multer');const storage = multer.diskStorage({ destination: function (req, file, cb) { cb(null, '../likeread/uploads') }, filename: function (req, file, cb) { cb(null, file.fieldname + '-' + Date.now()) }})router.post('/fileUpload',upload.any(),(req,res)=>{ var file=req.files[0]; res.send(file.path);});
客户端代码
var target=event.target; var NFileInput=transparentDiv.querySelector('[id="nurl"]'); var LRFileInput=transparentDiv.querySelector('[id="lrurl"]'); var FileInput=document.querySelector('input[id="displayFileInput"]'); var formData; if(window.FormData){ formData=new FormData(); }else{ alert('your browser not supported FormData'); } if(NFileInput.style.display==='none'){ formData.appned('lrFileURL',LRFileInput); }else{ formData.append('nFileName',NFileInput); var file=FileInput.files[0]; formData.append(file.name,file); } //URL为传入的参数 httpRquest(self,'POST',self.URL,true,formData,'multipart/form-data');
var xhr; function httpRquest(self,Method,URL,ASYN,Data){ //创建xhr对象 if(window.XMLHttpRequest){ xhr=new XMLHttpRequest(); } else if(window.ObjectActive){ try{ xhr=new ObjectActive('Microsoft.XMLHTTP'); }catch(e){ try{ xhr=new ObjectActive('Ms2.XHLHTTP'); }catch(e){ alert('你的浏览器不支持AJAX,请升级浏览器!'); } } } xhr.open(Method,URL,ASYN); xhr.send(Data); //接受返回的数据 xhr.onreadystatechange=function(){ if(xhr.readyState===XMLHttpRequest.DONE&&xhr.status===200){ self.imageURL=xhr.responseText; } } }
Object.defineProperty(this,'imageURL',{ enumerable:true, configurable:true, get:function(){ return this.imageURL; }, set:function(newVal){ this.value=newVal; oldClickEvent.url=newVal; document.body.removeChild(transparentDiv);//移除BombBox var event=new Event('click',{"bubbles":true,"cancelable":true});//oldClick为simplemde中方法,需要event对象 oldClickEvent(event); } });
遇到的问题
<input type="file">formData.append('filename',document.querySelector('input[type=file]'));xhr.send(formData);
如果前端代码向上面这样写,后端multer不能获取文件,原因是file包含在HTMLInputElement对象中,multer不会递归的去便利input对象内部
解决
<input type="file">formData.append('filename',document.querySelector('input[type=file]').files[0]);xhr.send(formData);
通过input的files属性取出file对象,通过append方法FormData中,传到后端
阅读全文
0 0
- FormData和multer使用的一个小坑
- 使用multer搭建一个图片接收服务器
- 使用multer搭建一个图片接收服务器
- multer模块的使用 +文件上传+ 评论
- FormData 对象的使用
- FormData 对象的使用
- FormData 对象的使用
- FormData的使用
- formData的使用
- FormData的使用
- FormData 对象的使用
- multer使用示例
- body-parser和multer
- jq的ajax 使用formdata
- ssh ajax、FormData的使用
- FormData和RestEasy的实例
- 使用FormData
- nodejs使用multer上传附件
- Android Input Method Sample Code Analysis
- 由Sophix引发的安卓热更新底层原理探索
- 内容解析者获取手机通讯录信息
- SpringMvc的@RequestBody注解
- Android音频系统之AudioFlinger(二)
- FormData和multer使用的一个小坑
- OpenResty(Nginx+Lua)
- hdu2037——今年暑假不AC
- Django搭建微信后端(1)---回复消息和自定义菜单
- 【SQL】JDBC之与数据库MySQL的连接以及增删改查等操作
- coursera Algorithms week1 练习测验2:Union-find with specific canonical element
- PostgreSQL
- MySql存储过程与函数详解
- 牛客网编程题:获取url中的参数