标头数据覆盖XMLHttpRequest中的Post数据

时间:2013-10-30 14:01:42

标签: ajax post http-headers xmlhttprequest cross-domain

我正在尝试实现文件(图片)上传API,此处给出:
Mediafire file Upload

我正在使用来自客户端的此API ,因此该文件只需上传一次,服务器带宽不用于大型文件。通过客户端上传也可以节省时间。

* 我的网络托管服务限制了执行时间和带宽。

截至目前,我已成功能够发送 GET &上述API中提供的 POST 参数,该文件已在我的mediafire帐户上传。但是,由于Same Origin Policy,无法收到回复。

Javascript代码:

var url = "http://www.mediafire.com/api/upload/upload.php?"+"session_token="+getCookie("mSession")+"&action_on_duplicate=keep";

xmlhttp = new XMLHttpRequest();

xmlhttp.onreadystatechange=function()
{
     if(xmlhttp.readyState==4)
     {
          alert("Uploaded");
     }
}

xmlhttp.open("POST", url);

var formData = new FormData();
formData.append("Filedata", document.getElementById("myFile").files[0]);
xmlhttp.send(formData);

一切都很好,但是,由于mediafire api无法提供响应,我无法再访问上传的文件了。但是,如果已知文件名,则有一种解决方法可以访问该文件。 PS:Mediafire保留与本地存储相同的名称,但如果mediafire帐户中存在同名文件,则会更改。

因此可以有 2个解决方案

  1. 在发送到上述API之前重命名文件
  2. 或发送API中显示的标头数据
  3. 我通过添加:

    尝试了第二种解决方案
    xmlhttp.setRequestHeader("x-filename", "foobar1.jpg");
    

    以上代码,但它将表单方法从 POST 更改为 OPTIONS ,并且mediafire帐户中没有操作(文件未上传)。

    我做错了什么?有没有其他方法可以控制或至少知道mediafire帐户中上传文件的名称。

1 个答案:

答案 0 :(得分:0)

对于 POST 请求,如果您提供自定义标头,则浏览器会接受预检请求(选项而不是 POST )。如果原点允许,则浏览器接受POST请求。参考(cors