视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
基于Ajax的formData图片和数据上传rue实现
2020-11-27 19:57:15 责编:小采
文档


这次给大家带来基于Ajax的formData图片和数据上传rue实现,基于Ajax的formData图片和数据上传注意事项有哪些,下面就是实战案例,一起来看一下。

最近做一个项目,关于用户数据和表单上传的项目,碰到了不少坑,这里总结的分享给大家,希望能够帮助大家。(小白,欢迎大家多交流)

多的就不说了,直接来代码吧!!

1、上传组件 说明一下,项目是基于vue框架的

<template>
 <p class="newproduct"> 
 <p class="topbox">
 <p class="shopbox"> 
 <img class="shopicon" src="../../assets/head.jpg">
 <p class="shopname">开心就好的小店</p>
 </p>
 </p>
 <p class="goodsbox">
 <p class="startleft namebox">
 <label class="title">商品名称:</label><input class="noborder" v-model="goodsname" placeholder="请输入商品名称">
 </p>
 <p class="startleft goodstypebox">
 <label class="title">商品类型:</label>
 <select v-model="goodstype">
 <option value="请选择">请选择</option>
 <option value="图书">图书</option>
 <option value="卡券">卡券</option>
 <option value="服装">服装</option>
 <option value="礼品">礼品</option>
 <option value="运动装备">运动装备</option>
 <option value="电子设备">电子设备</option>
 <option value="日用百货">日用百货</option>
 <option value="其他">其他</option>
 </select>
 </p> 
 <p class="startleft describebox">
 <label class="title">商品描述</label> 
 </p class="startleft">
 <textarea class="describeinfo" v-model="goodsinfo"></textarea>
 <p class="startleft">
 <label class="title">单价:</label>
 <input class="noborder" placeholder="请输入单价" v-model="price">
 </p>
 <p class="startleft">
 <label class="title">数量:</label>
 <input class="noborder" placeholder="请输入数量" v-model="number">
 </p>
 <p class="startleft">
 <label class="title">联系电话:</label>
 <input class="noborder" placeholder="请输入手机号" v-model="phone">
 </p>
 <p class="startleft">
 <label class="title">地址:</label>
 <input class="noborder" placeholder="请输入地址" v-model="address">
 </p>
 <p class="startleft">
 <label class="title">图片</label>
 <img src="">
 <img src=""> 
 </p> 
 <p class="addimg">
 <p class="imgbox">
 <img class="goodsimg" src="../../assets/addimg.png">
 <input id="file" type="file" class="fileupload" accept="image/*" multiple capture="camera" @change="viewimg()"/>
 </p>
 <p class="imgbox">
 <img class="goodsimg" src="../../assets/addimg.png">
 <input type="file" class="fileupload" accept="image/*" capture="camera" @change="viewimg()"/>
 </p> 
 </p>
 </p>
 <p class="bottombox" :style="{'top':(height-12) + 'px'}">
 <ul class="bottommenu">
 <li class="item" @click="backHome()">首页</li>
 <li class="item" @click="backShop()">返回货架</li>
 <li class="item border">放弃编辑</li>
 <li class="item" @click="uploadtest()">上架</li>
 </ul>
 </p>
 <p class="fillbottom"></p>
 </p>
</template>

说明,包含两个上传图片的组件,前面一个有multiple为多文件模式,即一次可选择多张图片,后面的是单文件模式。

2、接下来是图片的预览

viewimg($event) {
 //获取当前的input标签
 var currentObj = event.currentTarget; 
 //找到要预览的图片img标签,亦可动态生成
 var img = currentObj.parentNode.children[0]; 
 setImagePreview(currentObj, img);
 function setImagePreview(docObj, imgObjPreview) {
 if (docObj.files && docObj.files[0]) {
 imgObjPreview.style.display = 'block';
 imgObjPreview.src = window.URL.createObjectURL(docObj.files[0]);
 }
 }
}

这一部分的主要功能是将选中的图片进行展示,当然啦,这里并没有出来多张图片的情况

3、核心部分,图片上传

/*采用formData形式上传图片和表单数据*/
upload: function() {
 var _self = this;
 var formData = new FormData();
 var inputs = $("input.fileupload");
 for (var i = 0; i < inputs.length; i++) {
 var file = inputs[i];
 if (inputs[i].files[0]) {
 formData.append("file", file.files[0], file.files[0].name);
 }
 }
 formData.append('barterCommodityname', _self.goodsname);
 formData.append('barterSellingprice', _self.price);
 formData.append('barterContactinformation', _self.phone);
 formData.append('barterCommodityquantity', _self.number);
 formData.append('barterCommodityaddress', _self.address);
 formData.append('barterDescriptioninform', _self.goodsinfo);
 formData.append('barterCategoryid', _self.goodstype);
 var _self = this;
 $.ajax({
 type: 'POST',
 url: 'http://10.145.0.05/goods/addGoods',
 dataType: "json",
 data: formData,
 processData: false,
 contentType: false,
 success: function(data) {
 console.log(data);
 if (data.code == 200) {
 console.log("success");
 // _self.$router.push('/');
 } else {
 alert(data.message);
 }
 }
 });
}

说明:

类似于formData.append(‘barterCategoryid', _self.goodstype); 是一种键值对的形式保存数据,而formData.append(“file”, file.files[0], file.files[0].name); 第一个参数为服务端接收的参数名,第二个为文件对象,第三参数为文件名称,这样可以将多个文件添加为数组的形式给服务器。

后端接收该类型的文件时类型指定为:MultipartFile类型

特别说明:

processData: false,
contentType: false,

这两句一定要加上,否则数据会被序列化,而导致后端不能识别

相信看了本文案例你已经掌握了方法,更多精彩请关注Gxl网其它相关文章!

推荐阅读:

怎么配置谷歌浏览器支持file协议的AJAX请求

如何用php接收ajax提交到后台的数据

下载本文
显示全文
专题