我将大文本文件保存为Parse中的对象。它们太大而无法直接保存为普通String列中的文本。
稍后,我想检索这些文件并用JavaScript处理文本。
这是我用来将文本存储在Parse文件中的代码:
// Inputs
var long_text_string = '...'; // A long string
var description = '...'; // Description of this string
// Convert string to array of bytes
var long_text_string_bytes = [];
for (var i = 0; i < long_text_string.length; i++) {
long_text_string_bytes.push(long_text_string.charCodeAt(i));
}
// Create Parse file
var parsefile = new Parse.File("long_text_string.txt", long_text_string_bytes);
parsefile.save({
success: function() {
// Associate file with a new object...
var textFileObject = new Parse.Object("TextFile");
textFileObject.set('description', description);
textFileObject.set('file', parsefile);
textFileObject.save();
}
});
如何检索数据文件的内容,将其从字节转换回字符串,最后将其存储在JavaScript中的普通字符串变量中?
我尝试了三种不同的方法,但都无济于事......
使用Parse命令处理文件
使用Parse JS API检索我的TextFile
对象很简单,并使用parseFile = object.get('file');
来获取Parse文件本身。然后,文件的网址为parseFile.url()
。
但那又怎么样?由于跨域限制,我无法对JS中的URL做任何事情。
如何使用JS API访问文件中包含的字节数据,没有documentation。似乎有一个Android命令getDataInBackground
,记录为here,所以我希望有一个JS等价....
使用Parse REST API触发XMLHTTP请求
不幸的是,似乎Parse没有为其文件URL启用CORS。我尝试了以下代码,改编自Parse.com博客文章(blog.parse.com/learn/engineering/javascript-and-user-authentication-for-the-rest-api /):
var fileURL = textFileObject.get('file').url();
var xhr = new XMLHttpRequest();
xhr.open("GET", fileURL, true);
xhr.setRequestHeader("X-Parse-Application-Id", appId);
xhr.setRequestHeader("X-Parse-REST-API-Key", restKey);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
alert(xhr.responseText);
}
};
var data = JSON.stringify({ message: "" });
xhr.send(data);
但是我收到以下错误:
Response to preflight request doesn't pass access control check:
No 'Access-Control-Allow-Origin' header is present on the requested resource.
Origin '<my host>' is therefore not allowed access.
The response had HTTP status code 403
Google的一些建议表明文件网址未启用CORS(parse.com/questions/access-control-allow-origin--2)。
(请注意,上述代码适用于普通对象请求,只有当您使用fileURL时才会出错)。
使用浏览器规避跨域限制
我可以创建一个包含空iframe的网页,并将iframe.src
设置为parseFile.url()
。该文件的内容显示在网页上。但是当我尝试访问iframe的DOM内容时,我仍然会遇到跨源问题!更不用说将每个文件逐个加载到网页上是一个令人难以置信的不合标准的解决方案。