【问题标题】:Putting input file into FormData jquery to submit to PHP将输入文件放入 FormData jquery 以提交给 PHP
【发布时间】:2013-07-06 18:07:14
【问题描述】:

我知道已经对这个问题提出了疑问,但我仍然无法正确解决。需要一些帮助。

我需要上传一个带有附加数据的文件。

我的 input.php:

<input type="file"  id="foto_path" name="foto_path"  />
<input type="button" value="Add" onclick="javascript:sendForm()" />

我用 javascript 发送:

function sendForm() {
    var fileInput = document.querySelector('#foto_path');
    var oMyForm = new FormData();
    var nip=123223374;//it will be generated by php, for temporary i just hardcode it
    oMyForm.append("foto_path", fileInput);
    oMyForm.append("nip",nip );
    var oReq = new XMLHttpRequest();
    oReq.open("POST", "upload-file.php", true);
    oReq.onload = function(oEvent) {
        if (oReq.status == 200) {
          //oOutput.innerHTML = "Uploaded!";
          alert('success');
        } else {
          //oOutput.innerHTML = "Error " + oReq.status + " occurred uploading your file.<br \/>";
          alert('failed');
        }
      };
    oReq.send(oMyForm);
}

当我将其发送到 upload-file.php 时:

logapp("post -> ".print_r($_POST,true));//logapp is just function to log to file
logapp("files -> ".print_r($_FILES,true));

我从日志中得到了这个:

09/07/2013 02:47:06 pm :: post -> Array
(
    [foto_path] => [object HTMLImageElement]
    [nip] => 123223374
)

09/07/2013 02:47:06 pm :: files -> Array
(

)

我收到了成功警报,但我需要将 foto_path 的文件作为 $_FILES 而不是 $_POST。 我的问题是为什么输入文件检测为$_POST["foto_path"] 而不是$_FILES["foto_path"]。如何将其更改为 $_FILES["foto_path"] 以便我可以开始处理上传的文件?

【问题讨论】:

  • 检查这个问题 [Upload File With Ajax XmlHttpRequest][1] [1]: stackoverflow.com/questions/6211145/…
  • 我在$_POST 中仍然有[object HTMLImageElement] 如何将其更改为文件?
  • 请注意,formData() 在 IE

标签: php javascript jquery http-post


【解决方案1】:

更新:我终于解决了这个问题

var ft=$('#foto_path_upload')[0].files[0];
oMyForm.append("foto_path_upload", ft);

这是我从日志中得到的:

09/07/2013 04:26:53 pm :: files -> Array
(
    [foto_path_upload] => Array
        (
           [name] => noimages.jpg
           [type] => image/jpeg
           [tmp_name] => D:\xampp\tmp\php4E90.tmp
           [error] => 0
           [size] => 3642
         )

 )    

问题解决了。谢谢大家

【讨论】:

  • 为什么我们使用 [0] 来访问文件上传元素 - '$('#foto_path_upload')[0]'
  • 对不起,我忘记了为什么我使用 [0]。可能是因为我有很多 id 为“foto_path_upload”的元素,所以需要特别指出我想访问哪个元素...只要不使用它就可以了..
  • @Arjit 可能回复较晚,但他正在使用 [0] 使其成为 jquery 对象中的 dom 对象,您可以直接执行 var file = document.getElementById("foto_path_upload").files[0 ] ;)
猜你喜欢
  • 1970-01-01
  • 2015-05-16
  • 1970-01-01
  • 2013-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-04
  • 1970-01-01
相关资源
最近更新 更多