当前位置: 首页 > 后端技术 > Node.js

node.js实现formdata上传文件

时间:2023-04-03 23:31:58 Node.js

node.js实现formdata上传文件1.关于formdataXMLHttpRequestLevel2增加了一个新的接口——FormData。使用FormData对象,我们可以通过JavaScript模拟一系列具有一些键值对的表单控件,也可以使用XMLHttpRequest的send()方法异步提交表单。与普通的Ajax相比,使用FormData最大的优势就是我们可以异步上传二进制文件。FormDataAPI方法1:创建一个空的FormData对象:varformData=newFormData()使用FormData.append添加键/值对:formData.append('username','Chris');方法二:使用form表单传递Giveformdata

Entername:
输入帐号:
上传文件:
varmyForm=document.getElementById('myForm');formData=newFormData(myForm);2.formdata上传文件目录结构.├──index.js├──node_modules├──package.json└──public├──index.html└──上传客户端代码点击上传服务器代码//index.jsvarexpress=require("express");varapp=express();/*1.文件夹中保存的文件是二进制文件,所以如果想在本地打开预览,取消下面fs模块引用的注释2.并在命令行输入npminstallfs--save*///varfs=require("fs");varmulter=require("multer");//这里dest对应的值就是你要保存上传文件的文件夹varupload=multer({dest:'./public/uploads'});app.use(express.static('./public'));app.post("/upload",upload.single('file'),(req,res)=>{//req.file是'file'文件的信息(前端传过来的文件类型是在req.file中获取的)//req.body会有文本字段数据,如果有的话(上面前端代码中传入的日期字段在req.body中获取)console.log(req.body)//{date:'2018/1/205:25:56pm'}//----------因为保存的文件是二进制文件,所以取消注释下面的代码块以在本地文件夹中预览保存的图像文件------/*varfile_type;如果(req.file.mimetype.split('/')[0]=='image')file_type='.'+req.file.mimetype.split('/')[1];if(file_type){fs.rename(req.file.path,req.file.path+file_type,function(err,doc){if(err){console.error(err);返回;}console.log('55');res.send('./uploads/'+req.file.filename+file_type)})返回;}*///------------------res.send('./uploads/'+req.file.filename)})app.listen(9999);接下来解释一下上面的代码。上面的例子是上传图片,服务器返回图片路径显示。上传其他文件也是如此!Index.js依赖express和multer,可以通过npminstallexpressmulter--save安装。当然你也可以不用express。接下来我们重点介绍multer:1.安装:npminstall--savemulter2.使用:multer(opts)Multer接受一个options对象,其中最基本的就是dest属性,它会告诉Multer把multer保存到哪里上传的文件。如果省略选项对象,文件将保存在内存中,永远不会写入磁盘。通常,你只需要这样设置dest属性:varupload=multer({dest:'uploads/'})//dest对应的值就是你想要存放文件的文件夹。single(fieldname)接受以fieldname命名的文件。有关此文件的信息存储在req.file中。(这里的fieldname是指formdata.append("file",file)中的'file'字段。其他方法参见multer文档。Multer会在expressrequest对象中添加一个body对象和一个或多个files对象。body对象包含表单的文本字段信息,file或files对象包含对象form上传的文件信息app.post("/upload",upload.single('file'),(req,res)=>{//req.file是'file'文件的信息(前端传过来的文件类型是在req.file中获取的)//req.body如果有的话,会有text字段数据。(上面前端代码中传入的日期字段在req.body中获取)console.log(req.body)//{date:'2018/1/205:25:56pm'}res.send('./uploads/'+req.file.filename)})注意事项:1、控制台打印的formdata为空,可通过以下方法获取:varformData=newFormData();formData.append('username','Chris');formData.append('username','Bob');//get()函数只会返回附加到用户名的第一个值formData.get('username');//Returns"Chris"//getAll()函数会返回用户名数组中的两个值:formData.getAll('username');//returns["Chris","Bob"]更多formdata方法2.如果添加formdata文件成功,上传还是失败,可以看header是不是multipart/form-data。文章是对学习过程的总结。如果发现错误请留言指出

最新推荐
猜你喜欢