来自文本字符串的JavaScript PUT文件

时间:2014-09-17 18:19:51

标签: javascript post google-chrome-extension

如果我有文本字符串,如何使用PUT方法发送文件? 例如:

var new_data = 'hello world';
var formData = new FormData();
formData.append("thefile", new_data);

var new_req = new XMLHttpRequest();
new_req.open("PUT", p.href, false);
new_req.setRequestHeader("Content-Type", "multipart/form-data");
new_req.send(formData);

我回复了HTML错误500的空响应。我做错了什么?上传网址是对的,我查了一下。

1 个答案:

答案 0 :(得分:1)

尝试添加manifest.json

  "permissions": [
    "http://*.disk.yandex.net/"
  ]

阅读:https://developer.chrome.com/extensions/xhr

Yandex API

中阅读此内容
  

唯一的例外是针对基于Chromium的浏览器扩展程序:Origin headers   以模式chrome-extension://开头的内容将被忽略。

所以唯一缺少的就是在manifest.json中设置权限。


  

注意:PUT只是HTTP“动词”中指令的一部分   协议,它一个人没有。这就是设置SERVER-SIDE的原因   语言。

PUTPOST相似。 POST需要时间(取决于您将如何发送文件,例如。RAW):

.overrideMimeType("multipart/form-data");
.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

换句话说,试试这个:

xmlhttp.open("PUT", p.href, false);
if (xmlhttp && xmlhttp.overrideMimeType) {
    xmlhttp.overrideMimeType("multipart/form-data");
}
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.send(formData);

注意:首选使用Async,如下所示:

xmlhttp.open("PUT", p.href, true);//Async requires "true"
xmlhttp.onreadystatechange = function () {
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
        console.log("OK", xmlhttp.responseText);
    } else if (xmlhttp.readyState == 4) {
        console.log("ERROR", xmlhttp.status);
    }
};
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.send(formData);
  • 注意:异步xmlhttp.open("PUT", p.href, true);

  • 注意:同步xmlhttp.open("PUT", p.href, false);

  • 错误500可能是htaccess(如果是apache)或服务器中的其他配置的问题。