• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

使用Ajax异步上传图片的方法(html,java_php

php 搞代码 7年前 (2018-06-21) 207次浏览 已收录 0个评论

前两天项目中需要用到异步上传图片和显示上传进度的功能,于是找了很多外国的文章,翻山越岭地去遇上各种坑,这里写篇文章记录一下。

html

 

HTML代码没什么好说,一个form表单,还有文件类型的input。我们来看js部分。

JavaScript

     //绑定了`submit`事件。         $('#fileupload-form').on('submit',(function(e) {         e.preventDefault();         //序列化表单           var serializeData = $(this).serialize();         // var formData = new FormData(this);        $(this).ajaxSubmit({             type:'POST',             url: *yoururl*,             dataType: 'json',              data: serializeData,                         // data: formData,              //attention!!!                contentType: false,                   cache: false,                          processData:false,                    beforeSubmit: function() {                     //上传图片之前的处理                },             uploadProgress: function (event, position, total, percentComplete){                  //在这里控制进度条                },             success:function(){              },             error:function(data){                 alert('上传图片出错');             }         });     }));      //绑定文件选择事件,一选择了图片,就让`form`提交。         $(#fileupload).on(change, function() {         $(this).parent().submit();     });

php

 

遇到的坑:

序列化表单,因为是文件,不能通过val()text()等方法获取到它的值,只能通过序列化表单提交。代码里面使用.serialize(),有另外一种做法是使用.FormData()来提交,但是实验过程中,一开始正常,后来报错了。在stackoverflow.com上有人看到有人遇到同样地问题,没有解决,于是就放弃了。 普通的ajax是没办法或者说很难拿到上传进度的。这里使用了一个插件jquery Form Plugin,使用方法很简单,原本ajax的配置都能用,而且有很多实用功能和详尽的使用文档。推荐~ ajax上传图片这三个参数必须配置contentType: false, cache: false, processData:false,。 获取本地预览图,这种方法可能会有浏览器兼容性问题。

 $(#fileupload).change(function(){     if (this.files && this.files[0]) {        var reader = new FileReader();                    reader.onload = function (e) {             $('#theImg').attr('src', e.target.result);         }        reader.readAsDataURL(this.files[0]);    } }

php部分注意虽然Ajax那里使用的是POST方法,但是后台接受的时候只要是文件都是用$_FILES。你可以通过$_FILES['file']['type']去判断文件格式来做安全处理,我们这里只是演示。还有其他参数,比如tmp_name是文件路径,name是文件名。后台接收以后,你可以使用move_uploaded_file()来将文件保存到服务器上。这里就不多说。

其他补充

另外@_w同学补充,不刷新页面还可以通过设置formtarget属性指向一个当前页面隐藏的iframe来实现。让那个iframe去刷新跳转页面。上面提到的jQuery Form Plugin也支持你这么做。
另外再推荐一个插件jquery-iframe-transport

阅读“>推荐阅读

uploading-files-with-ajax image-upload-example jquery-progress-bar-for-php-ajax-file-upload

javascript方面我是新手,希望这篇文章能帮到更多遇到相同问题的人。如果哪里写的不好或者不对,还希望各位同行能够善意指出。

 

欢迎大家阅读《使用Ajax异步上传图片的方法(html,java_php》,跪求各位点评,若觉得好的话请收藏本文,by 搞代码


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:使用Ajax异步上传图片的方法(html,java_php

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址