• 关于文件上传的ajax交互


    首先我们来了解一下上传文件

    <input type="file">
    

    input的file常用上传类型

    后缀名       MIME名称
    *.3gpp    audio/3gpp, video/3gpp
    *.ac3    audio/ac3
    *.asf       allpication/vnd.ms-asf
    *.au           audio/basic
    *.css           text/css
    *.csv           text/csv
    *.doc    application/msword    
    *.dot    application/msword    
    *.dtd    application/xml-dtd    
    *.dwg    image/vnd.dwg    
    *.dxf      image/vnd.dxf
    *.gif            image/gif    
    *.htm    text/html    
    *.html    text/html    
    *.jp2            image/jp2    
    *.jpe       image/jpeg
    *.jpeg    image/jpeg
    *.jpg          image/jpeg    
    *.js       text/javascript, application/javascript    
    *.json    application/json    
    *.mp2    audio/mpeg, video/mpeg    
    *.mp3    audio/mpeg    
    *.mp4    audio/mp4, video/mp4    
    *.mpeg    video/mpeg    
    *.mpg    video/mpeg    
    *.mpp    application/vnd.ms-project    
    *.ogg    application/ogg, audio/ogg    
    *.pdf    application/pdf    
    *.png    image/png    
    *.pot    application/vnd.ms-powerpoint    
    *.pps    application/vnd.ms-powerpoint    
    *.ppt    application/vnd.ms-powerpoint    
    *.rtf            application/rtf, text/rtf    
    *.svf           image/vnd.svf    
    *.tif         image/tiff    
    *.tiff       image/tiff    
    *.txt           text/plain    
    *.wdb    application/vnd.ms-works    
    *.wps    application/vnd.ms-works    
    *.xhtml    application/xhtml+xml    
    *.xlc      application/vnd.ms-excel    
    *.xlm    application/vnd.ms-excel    
    *.xls           application/vnd.ms-excel    
    *.xlt      application/vnd.ms-excel    
    *.xlw      application/vnd.ms-excel    
    *.xml    text/xml, application/xml    
    *.zip            aplication/zip    
    *.xlsx     application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
    
    

    accept属性

    只能选择png和gif图片

    <input id="fileId1" type="file" accept="image/png,image/gif" name="file" />
    

    multiple属性

    多文件上传

    <input id="fileId2" type="file" multiple="multiple" name="file" />
    

    获取file的内容

    这里要用到change()函数,当元素的值发生改变时,会发生 change 事件。

    $('input[type="file"]').change(function() {
    	file = this.files[0];
    });
    

    file获取出来的内容

    File {name: "DSC03891.JPG", lastModified: 1451217306000, lastModifiedDate: Sun Dec 27 2015 19:55:06 GMT+0800 (中国标准时间), webkitRelativePath: "", size: 3866624…}lastModified: 1451217306000lastModifiedDate: Sun Dec 27 2015 19:55:06 GMT+0800 (中国标准时间)name: "DSC03891.JPG"size: 3866624type: "image/jpeg"webkitRelativePath: ""__proto__: File
    

    我们需要将图片文件转换成二进制流的方式传给后台,这里我介绍两种方式

    FileReader

    这一篇博客对FileReader的使用介绍得很详尽,请参看
    http://blog.csdn.net/zk437092645/article/details/8745647/

    FormData

    FormData有两种用法

    • 提交表单数据

    提交表单还有一个方法是serialize(),但这个方法不能上传文件

    使用方法

    1. 在html的form标签里添加 enctype ="multipart/form-data",这个很重要,没有这个后面所有都没效果
    <form class="form-horizontal" id="productform" enctype ="multipart/form-data">
    
    1. 在html表单的input中添加name属性,name对应数据库中的字段名
    <input type="text" name="productName">
    <input type="text" name="productContent">
    
    1. ajax交互
    $('#submit').click(function(){
    	var data = new FormData($('#productform')[0]);//[0]必须要
    	$.ajax({
    		type:"POST",
    		url:"http://localhost/blog/management/insertProduct",
    		data:data,
                    async:false,
                    cache:false,
                    contentType:false,
                    processData:false,
    		success:function() {
    				alert("保存成功!");
    		},
    		error:function() {
    				alert("保存失败!");
    				console.log(productType);
    		}
    
    	})
    		
    		
    });
    
    • 直接使用FormData

    FormData也可以直接使用而不是提交整个表单

    <input type="file" name="picture" accept=".jpg,.png"
    <input type="button" name="" value="提交" class="submit">
    
    $('.submit').click(function() {
    			var bannerIdText = $(this).closest('div').find(".bannerId").text();
    			console.log($(".bannerId").html());
    			var data = new FormData();
    			data.append("picture",file);
    			console.log(bannerIdText);
    			data.append("bannerId",bannerIdText);
    			console.log(data);
    			$.ajax({
    				type:"POST",
    				url:" http://localhost/blog/management/updateBanner",
    				data:data,
    	                        async:false,
    	                        cache:false,
    	                        contentType:false,
    	                        processData:false,
    	                        enctype: 'multipart/form-data',//没有了在form声明处理方式,就必须在这里声明
    				success:function(data) {
    					alert("保存成功!");
    					console.log(data);
    				},
    				error:function() {
    					alert("保存失败!");
    				}
    		   })
    		});	
    

    FormData的append参数说明

    data.append(数据库字段名,你添加的东西名字)
    

    最后如果前端成功的将数据发给后台了,你可以在network中看到这样的信息。
    image.png

  • 相关阅读:
    ubuntu 16.04 tmux
    ubuntu 16.04 samba 文件共享
    ubuntu 16.04 有道词典
    ubuntu bless 16字节每行
    Win7任务栏图标大小调整为等宽
    ubuntu 16.04 vnc server
    ubuntu 16.04 U盘多媒体不自动弹出
    Linux录屏软件
    通过apt-get安装nvidia驱动
    调试X Server
  • 原文地址:https://www.cnblogs.com/huyuzhu/p/7256512.html
Copyright © 2020-2023  润新知