摘要:前端上传文件,图片,后端接收文件学习了,就想实现一下有进度条的文件上传,在做这个功能的时候遇到的问题用普通的无法实现文件上传,只能,,一些,字符串想要上传文件或者图片,可以添加上传注意需要在上添加标示缺点,这样会倒置页面的刷新很糟糕有没有
前端ajax上传文件,图片,后端nodejs接收文件;
学习了nodejs,就想实现一下有进度条的文件上传,
在做这个功能的时候遇到的问题
用普通的ajax无法实现文件上传,只能post,get,一些json,string字符串;
想要上传文件或者图片,可以添加form上传;注意需要在form上添加 标示 enctype="multipart/form-data"
缺点,这样会倒置页面的刷新;很糟糕有没有
还可以在页面中添加一个ifame,将表单提交到ifame中,不过,一听说有iframe就有点糟心有没有;
于是就有了下面的东西;
请自动忽略没有样式(只是为了实现功能)这个梗,啊哈哈;
好了废话少说直接上代码
前端部分代码用到了 FormData 类;Document
使用方法
通过new FormData 创建一个form提交实例对象;此对象会有append方法,
用法 oMyform.append(name,value) name是一个字段,value是对应的值(可以是字符串,数字,file文件(通过dom.files[0]获得))
var oMyForm = new FormData(); oMyForm.append("username", "Groucho"); oMyForm.append("accountnum", 123456); oMyForm.append("userfile", fileInputElement.files[0]);用到了XMLHttpRequest 的 onprogress 和 onloadend
注意 onprogress、onloadend、需要通过xhr.upload 调用如下;
oReq.upload.onprogress=function(e){ console.log(e.loaded) console.log(e.total) }; oReq.upload.onloadend=function(e){};nodejs 后端的处理
主要代码逻辑主要用到了formidable模块
/** * [导出一个中间件,formupload,用于处理文件上传;] */ exports.formupload = function(req,res,next){ //console.log(req); var form = new formidable.IncomingForm(); var uploadDir = path.normalize(__dirname+"/"+"../avatar"); form.uploadDir = uploadDir; console.log(uploadDir); form.parse(req, function(err, fields, files) { for(item in files){ (function(){ var oldname = files[item].path; var newname = files[item].name === "blob" ? oldname+".xml" : oldname+"."+files[item].name.split(".")[1]; fs.rename(oldname,newname,function(err){ if(err) console.log(err); console.log("修改成功"); }) })(item); } console.log(util.inspect({fields: fields, files: files})); res.send("2"); });遇到的问题
for 循环中有异步逻辑,导致异步逻辑出现问题;
formidable 的上传文件路径用相对路径会找不到所指定的路径
解决办法可以用闭包实现,每次传进到闭包的变量不会受到外界的影响;
用牛逼的__dirname 变量;指向当前文件的绝对路径;
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/80369.html
摘要:把文件上传路径指定到然后用当前日期和文件名命名上传过来的文件。后端利用建立服务器,利用中间件指定文件路径。利用这个前端和后端技术,我们基本上就可以做出一个图片上传存储的基本网站核心。 前几天看了腾讯云社区的一个文件上传的文章文件上传那些事儿,大体上讲了以下h5中图片上传的几个核心原理,但是没有后端接受的服务器代码,没法做测试。也没有具体的一个实例都是一些基本的原理片段,并且ui界面也不...
摘要:默认地,表单数据会编码为。就是说,在发送到服务器之前,所有字符都会进行编码空格转换为加号,特殊符号转换为值。提交说明文件上传。图片选择图片地址上传上传。用表单直接构造对象就不需要下面的方法来为表单进行赋值了。 nodejs图片上传 nodejs一般开发网站基本都用express框架,本文也主要以express为例,讲解如何上传图片;express本身没有上传图片功能;一般都是集成相应的...
摘要:我相信很多使用的朋友,都有采用上传图片的需求,因为前后端分离后,我们希望都能用来解决数据问题,传统的表单提交会导致提交成功后页面跳转,而使用能够无刷新上传图片等文件。 我相信很多使用vuejs的朋友,都有采用ajax上传图片的需求,因为前后端分离后,我们希望都能用ajax来解决数据问题,传统的表单提交会导致提交成功后页面跳转,而使用ajax能够无刷新上传图片等文件。其实已经有朋友封装了...
阅读 1405·2021-11-22 09:34
阅读 3252·2021-09-29 09:35
阅读 510·2021-09-04 16:40
阅读 2887·2019-08-30 15:53
阅读 2549·2019-08-30 15:44
阅读 2553·2019-08-30 14:10
阅读 1293·2019-08-29 18:43
阅读 2175·2019-08-29 13:26