jQuery upload files asynchronously

 

I want to upload files asynchronously via jQuery, here is my HTML:

 

1
2
3
<span>File</span>
<input type= "file" id= "file" name= "file" size= "10" />
<input id= "uploadbutton" type= "button" value= "Upload" />

Here is my javascript:

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$(document).ready(function () {
   $( "#uploadbutton" ).click(function () {
     var filename = $( "#file" ).val();
 
     $.ajax({
       type: "POST" ,
       url: "addFile.do" ,
       enctype: 'multipart/form-data' ,
       data: {
         file: filename
       },
       success: function () {
         alert( "Data Uploaded: " );
       }
     });
   });
});

I only get the uploaded filename, what should I do?

 

I now use the jQuery Form plugin to solve this problem: http://malsup.com/jquery/form/#code-samples

Is there any way to do it without this plugin?

 

Solution:

You can use HTML5, use jQuery, Ajax to achieve file upload, not only that, you can do file validation (name, size, MIME type) or use HTML5 progress tag (or div) to handle progress events.

 

I'm also doing file uploads recently and I don't want to use flash, iframes or other plugins, after some research I came up with a solution.

HTML:

 

1
2
3
4
5
<form enctype= "multipart/form-data" >
<input name= "file" type= "file" />
<input type= "button" value= "Upload" />
</form>
<progress></progress>

First, you can do some validation, such as the onChange event of the file:

 

1
2
3
4
5
6
7
$( ':file' ).change(function(){
     var file = this .files[0];
     name = file.name;
     size = file.size;
     type = file.type;
     //your validation
});

Button click triggers Ajax:

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$( ':button' ).click(function(){
     var formData = new FormData($( 'form' )[0]);
     $.ajax({
         url: 'upload.php' //server script to process data
         type: 'POST' ,
         xhr: function() {  // custom xhr
             myXhr = $.ajaxSettings.xhr();
             if (myXhr.upload){ // check if upload property exists
                 myXhr.upload.addEventListener( 'progress' ,progressHandlingFunction, false ); // for handling the progress of the upload
             }
             return myXhr;
         },
         //Ajax事件
         beforeSend: beforeSendHandler,
         success: completeHandler,
         error: errorHandler,
         // Form数据
         data: formData,
         //Options to tell JQuery not to process data or worry about content-type
         cache: false ,
         contentType: false ,
         processData: false
     });
});

处理进度:

 

1
2
3
4
5
function progressHandlingFunction(e){
     if (e.lengthComputable){
         $( 'progress' ).attr({value:e.loaded,max:e.total});
     }
}

 

 

HTML5的文件上传非常简单,但必须在支持HTML5的浏览器中运行。

 


评论列表
wuchangliang
var formData = new FormData($('form')[0]);
请问,在ie上有没有好的方法代替呢?
s
ewe
[email protected]
请问为什么我进入了error区间,输出TypeError:Cannot read property 'open' of underfined
[email protected]
请问为什么我进入了error区间,输出TypeError:Cannot read property 'open' of underfined
12
fgsdf
大向
我想用异步请求实现与数据库的交换,但是用不好,每次都是死循环。请高人指点!
大向
我有个建议,不知道好不好。左边的文字颜色容易使人看不太清楚,易花眼。建议换成深颜色的。
momo
The current request is not a multipart request 为什么报这个错呢
仍然有
热有人要
你好
可以上传视频和png格式的图片吗
你好
可以上传视频和png格式的图片吗,急等着用。谢谢!
只能帮到你这里了
var filename = $("#file").val(); 这个写法本来就得不到文件吧
文件是$("#file").prop("files")[0]
aa
  beforeSend: beforeSendHandler,
            success: completeHandler,
            error: errorHandler,

未定义。怎么改呢
bjiang
我最常用的方法是,让form submit到页面中的一个隐藏的iframe中,然后通过页面间通讯的方式来告知原来的主页面已经上传完成.但这个解决不了进度条的问题.

发表评论
切换编辑模式

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=324948383&siteId=291194637