jq ajax input file,基于jq的input file文件上传

input file文件上传很多人都遇见过,就样式问题就有一大堆的问题,默认样式实在是不敢恭维,但在此今天不讨论样式的问题,只给一个大致的思路,一个div包括一个span和一个input,分别设置两个的定位,然后给input设置opacity为0,设置好宽度充满div,在设置好span的样式即可。

众所周知,ajax不能传递文件,但是html的formdata可以。

html代码1

2

3

4

5

6

7

选择本地

导入

我的代码是点击选择本地出发input file的按钮选择文件,然后点击导入出发ajax,中间还会判断是否已选择文件,没有选择的话,提示它,选择文件不对的话,也提示(我这边判断的是Execl文件,下方代码有)。其中需要注意的是必须要用form标签包裹,注意action、method和enctype属性,其中特别需要注意的是enctype属性必须为multipart/form-data,这样子才能将文件处理为一个二进制的文件,后台才能够进行接收。

PS:action这个属性其实也可以不填,它是放地址的,我们在ajax中会有提交地址的;

enctype这个属性其实也可以不在标签中添加,不过在js中的属性contentType就必须设置为multipart/form-data,

简单来讲如果你的input file标签里面使用了enctype=”multipart/form-data”,JQ中这两个属性就要这样写processData: false, contentType: false

如果如果你的input file标签里面没有使用 enctype=”multipart/form-data”,JQ就要这样写processData: false,contentType: “multipart/form-data”。

js代码1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39$(".leading-in").on("click",function(){

var name = $(".selected-txt select option:selected").val();

var flag = $(".selected-btn").val();

var hzm = flag.substr(flag.indexOf(".")+1);

if(flag == ""){

alert("请选择要上传的文件");

}else if(hzm != "xls" && hzm != "xlsx"){

alert("请选择Excel格式的文件");

}else{

var forData = new FormData();

forData.set("importfile", $("#file")[0].files[0]);

forData.set("systemName", name);

//多个文件上传的情况,需要啊后台进行字段匹配如:上方的importfile

//var i;

//for (i = 0; i < $('.select-file').files.length; i++) {

//

//forData.append('file[]', this.files[i]);

//}

$.ajax({

url: baselocation + "/system/file/import",

type: 'post',

data: forData,

cache: false,

processData: false,

contentType: false,

success:function(json){

if(json.success == "success"){

alert("上传成功");

}else{

alert("上传失败");

}

},error:function(){

}

});

}

})

js代码中我先判断获取文件的后缀名是不是我自己想要的类型文件,然后进行相应的提示,然后就新建一个FormData对象,然后把文件添加到里面,规则名一个要和后台确定好,如果还有其他的属性的,一并放到FormData的对象中就好,毕竟一个单独的属性,没有必要单独拿出来去提交,直接放到对象里面一起提交就好。

小结1、 cache:cache设为false可以禁止浏览器对该URL(以及对应的HTTP方法)的缓存。 jQuery通过为URL添加一个冗余参数来实现。

2、 contentType:jQuery中content-type默认值为application/x-www-form-urlencoded,因此传给data参数的对象会默认被转换为query string,我们不需要jQuery做这个转换,否则会破坏掉multipart/form-data的编码格式。 因此设置contentType: false来禁止jQuery的转换操作。

3、 processData:jQuery会将data对象转换为字符串来发送HTTP请求,默认情况下会用 application/x-www-form-urlencoded编码来进行转换。 我们设置contentType: false后该转换会失败,因此设置processData: false来禁止该转换过程。我们给的data就是已经用FormData编码好的数据,不需要jQuery进行字符串转换。(它与enctype的关系上方已经阐述)

如果有多文件的情况,代码中也有注释,前提是一定要和后台定好参数规则,建议比如说:file[文件索引]这样的规则,后台拿到数据之后出掉一些定义好的其他属性,根据length,一个一个去取好;

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值