通过ajax从input type = file发送原始文件数据

时间:2012-02-22 12:59:15

标签: php jquery ajax file-upload

我有一个简单的表格:

<form enctype="multipart/form-data" id="imageupload">
   <input name="files" type="file" />
   <input type="button" value="Upload" />
</form>

现在我想用ajax请求发送所有文件。

此示例有效,但它有一个错误。在我保存的文件中,还有其他信息:

-----------------------------169443243924626
Content-Disposition: form-data; name="files"; filename="shelby.png"
Content-Type: image/png


       $.ajax({
       url: 'imageupload.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 events
       //beforeSend: beforeSendHandler,
       //success: completeHandler,
       //error: errorHandler,
       // Form data
       data: new FormData($('#imageupload')[0]),
       //Options to tell JQuery not to process data or worry about content-type
       cache: false,
       contentType: 'multipart/form-data',
       processData: false
   });

现在我开始说:

$('#imageupload')[0].files.files[0]

我可以。我得到这个名字。但是如何获取原始文件数据?

3 个答案:

答案 0 :(得分:2)

try this

 $filename =  $_FILES['ur_image']['name'] ;
 $filesize =  $_FILES['ur_image']['size']; 
 $erro     =  $_FILES['ur_image']['error']; //checks UPLOAD_ERR_OK
 $tmpname  = $_FILES['ur_image']['tmp_name'];              
 $dest     = ROOT_DIR.'/upload/logo/';

答案 1 :(得分:1)

原始文件数据不可用,在HTML 5之前,javascript API阻止访问文件系统上的文件。

现在,在现代浏览器中,您可以使用javascript file API

答案 2 :(得分:0)

可以通过HTML 5的文件apis(如上所述)来完成,但它仍然非常困难。这是作为非官方标准完成的方式是将表单的结果发布到隐藏的iframe中,并通过javascript提交表单。当post在iframe中加载时,你包含调用父窗口上定义的回调函数的标记,例如window.parent.doSomething();

How do you post to an iframe?

是的,这是非常愚蠢的,但这实际上是如何完成的。