Ajax文件上传在Chrome中运行,但在Firefox中无法运行

时间:2013-01-01 18:30:16

标签: php javascript jquery xmlhttprequest-level2

使用XMLHttpRequest Level 2我想上传一个文件。 我正在使用jQuery,所以我想优先使用jQuery。

所以我编写了以下代码(coffescript,但任何熟悉javascript的人都应该可以轻松阅读)

fileToUpload = event.currentTarget.files[0]

data = new FormData()
data.append("uploadedfile", fileToUpload) 

$.ajax({
    type: 'POST',
    url: url,
    data: data,
    contentType: false,
    processData: false,
    mimeType: 'multipart/form-data',
})

使用该代码,在服务器端使用PHP我做了一个`

使用Firefox 17.0.1我什么都没得到。 $ _FILES为空,使用Chromium 22.0我得到上传的文件(格式很奇怪,但至少有些东西)

Array
(
    [uploadedfile] => Array
        (
            [name] => filename.txt
            [type] => application/octet-stream
            [tmp_name] => /tmp/phpWwenhc
            [error] => 0
            [size] => 189
        )

)

有谁知道它是否是Firefox错误?有解决方法吗?难道我做错了什么? 我搜索了一个类似的问题,但我找到的所有建议的答案都不适用于我(不适用于Firefox,不使用xhr级别2等)

提前致谢。

请: 我不关心IE或旧版本。既不是iframes解决方案也不是插件。只是XmlHttpRequest Level 2.对于那些没有听说过的人,请看一下:https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest/FormData/Using_FormData_Objects

3 个答案:

答案 0 :(得分:2)

删除mimeType参数,浏览器将生成具有所需边界的正确mime类型。

答案 1 :(得分:0)

我刚刚做到了。实际上没有办法通过AJAX上传文件。最好直接参考.php文件。

答案 2 :(得分:0)

您可能需要将文件视为数组,以使Firefox和PHP能够理解。尝试更改上传字段的名称:

data.append("uploadedfiles[]", fileToUpload);