2

我需要从浏览器中的客户端将文件上传到第三方,并且需要在标头中发送 api 令牌。我需要一个适用于新旧浏览器的通用解决方案。

这就是卷曲的样子

curl -v -H "X-LLNW-Authorization: $TOKEN" \
-F uploadFile=@/tmp/wobble.txt \
-F directory=/testpost \
-F basename=wobble-004.txt https://api.lama.lldns.net/post/file

基本名称并不重要。

我相信我仅限于 javascript 可以让我在这里做的事情。我无权访问服务器。

这可以做到吗?

谢谢。

4

2 回答 2

2

编辑:如果您有自定义标头,跨域请求将不起作用。如果您有自定义标头,则会自动发送一个 OPTIONS 请求,服务器必须回复 200 OK,然后发送实际的 POST。由于您必须使用自定义标头进行身份验证,因此您必须更改服务器端以接受 OPTIONS 请求。我怀疑你运气不好。

下面是没有自定义标头的情况下的代码,其中跨域请求工作:使用与此类似的 HTML:

<form >
  <input type="file" name="file" id="fileToUpload" onchange="uploadFile()">
</form>

使用此代码

function uploadFile() {
  var fd = new FormData();
  fd.append("fileToUpload", document.getElementById('fileToUpload').files[0]);
  fd.append("directory","/testpost");
  fd.append("basename","wobble-004.txt");

  var oReq = new XMLHttpRequest();
  oReq.open("POST", "https://api.lama.lldns.net/post/file", true);
  oReq.onreadystatechange = alert(status);
  oReq.send(fd);
}

有关更多信息,请参阅此 Mozilla 博客文章

于 2012-11-02T17:46:52.900 回答
0

对于带有 CORS 的 CSS,您需要从选项预检请求中返回一个标头,该标头枚举要发送的已接受标头列表,可以是任何标头,但浏览器只会发送包含在该列表中的自定义标头。浏览器将仅遵循返回的标头中指示的 OPTIONS。检查 CORS OPTIONS 响应标准。

于 2017-08-25T23:34:31.490 回答