我正在尝试使用 PlayCanvas OAuth 和 CORS 通过 HTML 请求从服务请求图像。据我了解,响应返回一个包含数据的 JSON,在这个问题中,我只想将 JSON 中的路径保存到位于 PlayCanvas 资产中的 .txt 文件中。
我不是 100% 确定我的代码。我还没有找到如何将 .txt 抓取到 JS 脚本中(它不能附加到对象上)
将不胜感激两者的帮助
网址是 https://s3-us-west-2.amazonaws.com/ticomsoft-image-repo/1.png
我尝试使用异步请求,例如 在“createCORSRequest”中出现的示例https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Synchronous_and_Asynchronous_Requests :
if ("withCredentials" in xhr) {
// Check if the XMLHttpRequest object has a "withCredentials" property.
// "withCredentials" only exists on XMLHTTPRequest2 objects.
xhr.open(method, url, true);
xhr.onload = function (e) {
if (xhr.readyState === 46) {
if (xhr.status === 200) {
console.log(xhr.responseText);
} else {
console.error(xhr.statusText);
}
}
};
xhr.onerror = function (e) {
console.error(xhr.statusText);
};
我试图将'stringify'和'download'命令放在初始化中(然后移动到回调中
最后得到了这里出现的东西
var Https = pc.createScript('https');
var token = 'That's the PlayCanvas Token';
var request = 'curl -H "Authorization: Bearer '+token+'" ';
var ts_URL ='https://s3-us-west-2.amazonaws.com/ticomsoft-image-repo/1.png';
// initialize code called once per entity
Https.prototype.initialize = function() {
var url = request+ts_URL;
// ref: curl -H "Authorization: Bearer nesgdxhiqe7hylfilr6ss1rds0gq1uj8" https://playcanvas.com/api/...
var xhr = createCORSRequest('GET', url);
if (!xhr) {
throw new Error('CORS not supported');
}
};
function createCORSRequest(method, url) {
var xhr = new XMLHttpRequest();
if ("withCredentials" in xhr) {
// Check if the XMLHttpRequest object has a "withCredentials" property.
// "withCredentials" only exists on XMLHTTPRequest2 objects.
if(method=="GET")
{
loadFile(url, DownloadToText(xhr));
}
// else... all the other cases
return xhr;
}
function loadFile(url, callback /*, opt_arg1, opt_arg2, ... */) {
var xhr = new XMLHttpRequest();
xhr.callback = callback;
xhr.arguments = Array.prototype.slice.call(arguments, 2);
xhr.onload = xhrSuccess;
xhr.onerror = xhrError;
xhr.open("GET", url, true);
xhr.send(null);
}
function DownloadToText (ans)
{
JSON.stringify(ans);
download(ans, 'json.txt', 'text/plain');
}
function download(content, fileName, contentType) {
var a = document.createElement("a");
var file = new Blob([content], {type: contentType});
a.href = URL.createObjectURL(file);
a.download = fileName;
a.click();
}
function xhrSuccess() {
this.callback.apply(this, this.arguments);
}
function xhrError() {
console.error(this.statusText);
}
预期结果:我希望下载一个带有图片 URL 的 json.txt 文件。
实际结果:当我启动程序并进入控制台时,看到图像 1.png 出现 404 Not Found 错误。
json.txt 是使用“[object XMLHttpRequest]”下载的。
同样在 F12 中,我得到导致错误的链接是 https://launch.playcanvas.com/curl%20-H%20%22Authorization:%20Bearer%---theToken---%22%20https:/ /s3-us-west-2.amazonaws.com/ticomsoft-image-repo/1.png
而只是 https://s3-us-west-2.amazonaws.com/ticomsoft-image-repo/1.png导致图像。
但是如果我想通过 OAuth,我就无法摆脱前缀。这就是为什么我不明白我做错了什么。