0
点赞
收藏
分享

微信扫一扫

关于图片,文件上传的总结

在文件上传中,一般都会用到一个formData对象,

通过formData对象可以组装一组用XMLHttpRequest发送请求的键值对。这个效果和 form表单提交时,将编码类型设置为multipart/form-data的方式一样,会直接取name为键值对名,value为值,传送给服务器。

$('input).change(function(e){
var formData = new FormData();
formData.append('name','GT');
       formData.append('fileName',this.files[0])//取文件的时候 注意是 this $(this)
fileUpload(formData,this)

})
//利用ajax上传
function fileUpload(data,obj){
$.ajax({
type:'post',
url:basePath+'/fileUpload',
data:data,
async : false,
cache : false,//上传文件无需缓存
contentType : false,//传输的数据类型,必须为这个 或者是mutipart/form-data 当表单已经设置好 这里必须为false
processData : false,//用于对data参数进行序列化处理 这里必须false
success:function(data){
myimg=data.result;//线上图片地址 这个地址 后台要做映射
$(obj).parents('tr').addClass('on').find('.img_').html(data.result)
$('.mask').show();
}
,error:function (data) {
alert('服务器走丢了')
}
})
}

  formData是通过append('名',‘值’)来进行添加的

另一种上传的方式

var xhr = new XMLHttpRequest();
xhr.open("POST", "stash.php", true);
xhr.onload = function(oEvent) {
if (oReq.status == 200) {
//上传成功
} else {
//上传失败
}
};

oReq.send(formData);

  也可以直接用表单

<form action="/url.do" enctype="multipart/form-data" method="post">
<input type="file" name="name"/>
<input type="hidden" name="pwd"/> //额外参数 可以不显示出来
<input type="hidden" name="mytype"/>
<input type="submit" value="提交">
</form>

 最近一些框架也有自己的方式,eg layui上传文件

upload.render({
elem: '#id'
,url: '/api/upload/'
,before: function(obj){ //obj参数包含的信息,跟 choose回调完全一致,可参见上文。
layer.load(); //上传loading
}
,done: function(res, index, upload){
layer.closeAll('loading'); //关闭loading
}
,error: function(index, upload){
layer.closeAll('loading'); //关闭loading
}
});

(但是注意的是 这里的xhr 是取不到的 所以不能利用 xhr.setRequestHeader("appId", "xxx")附带请求头参数 ) 跨域的话只能服务端进行Access-Control-Allow-Origin  这里有​​完整文档介绍​​

 

这里主要说一下 添加参数的问题

写一个添加额外参数的函数:

function addData(input,data){
var item=[];
$.each(data,function(k,v){
item.push('<input type="hidden" name="'+k+'" value="'+v+'">');
})
$(input).after(item.join(''));
}

然后在上传的 before中调用  这样就可以在文件上传时候 添加额外字段了

before:function (input) {
var data={
"appId":"xxxx",
"name":"GT"
}
addData(input,data)
}

input 的三个属性accept、capture、multiple

1. accept 可接受的文件类型  accept 属性只能与 <input type="file"> 配合使用。它规定能够通过文件上传进行提交的文件类型。

  属性值:*代表所有 audio的类型  还可以加具体类型(​image/gif, image/jpeg,....)

      audio/*     

      video/*

      image/*    

有个博客 总结了 关于 accrpt的类型 对谷歌和ff有效的一些特殊写法  ​​戳这里​​

2、capture属性 
  捕获到系统默认的设备,camera–照相机,camcorder–摄像机,microphone–录音  (我试验了一下 无法掉起 移动端的相机 但可以吊起 pc端的摄像头)

3.multiple属性  如果使用该属性,则允许一个以上的值   是html5的新属性

  multiple="multiple"  则字段可接受多个值



举报

相关推荐

0 条评论