我需要从浏览器中的客户端将文件上传到第三方,我需要在标头中发送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
basename并不重要。
我相信我只限于javascript可以让我在这里做什么。我无法访问服务器。
可以这样做吗?
感谢。
答案 0 :(得分: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);
}
有关详细信息,请参阅this Mozilla blog post。
答案 1 :(得分:0)
对于带有CORS的CSS,您需要从选项预检请求中返回一个标题,该标题会包含要发送的已接受标题列表,可以是任意标题,但浏览器只会发送该列表中包含的自定义标题。 浏览器只会遵循返回标头中指示的OPTIONS。 检查CORS OPTIONS响应标准。