我正在尝试实现一个文件(图像)上传API,如下所示:
媒体火文件上传
我从客户端使用此API,因此文件只需要上传一次,并且服务器带宽不用于大文件。通过客户端上传也可以节省时间。
*我的虚拟主机服务对执行时间和带宽有限制。
截至目前,我成功地发送了上述API中给出的GET和POST参数,并且该文件正在上传到我的mediafire帐户中。但是,由于同源策略,无法收到响应。
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个解决方案:
- 在发送到上述 API 之前重命名文件
- 或发送标头数据,如 API 所示
我尝试了第二个解决方案,方法是添加:
xmlhttp.setRequestHeader("x-filename", "foobar1.jpg");
到上面的代码,但它将表单方法从 POST 更改为选项,并且 mediafire 帐户中没有操作(文件未上传)。
我做错了什么?还有其他方法可以控制或至少知道mediafire帐户中上传文件的名称吗?
如果您提供自定义标头,浏览器将采用预检请求(选项而不是 POST)。如果源允许,则浏览器接受 POST 请求。参考 (CORS)