您实际上正在尝试做的是一种流式传输。我的意思是 FileAPI 不适合这项任务。相反,我可以建议两个选项:
首先,使用 XHR 工具,即 ajax,通过将您的数据分成几个块,这些块将按顺序发送到服务器,每个块在其自己的请求中连同一个 id(用于标识流)和一个位置索引(用于标识块位置)。我不建议这样做,因为它增加了分解和重新组合数据的工作,而且还有更好的解决方案。
实现此目的的第二种方法是使用 Websocket API。它允许您在生成数据时按顺序将数据发送到服务器。遵循通常的流 API。我想你肯定需要这个。
这个页面可能是一个很好的起点:http ://binaryjs.com/
这就是所有的人!
编辑考虑您的评论:
不过,我不确定是否完全理解您的观点,但是 HTML5 的 FileSystem API 呢?
这里有几个示例:http: //www.html5rocks.com/en/tutorials/file/filesystem/其中允许您将数据附加到现有文件的示例。您还可以创建一个新文件等:
function onInitFs(fs) {
fs.root.getFile('log.txt', {create: false}, function(fileEntry) {
// Create a FileWriter object for our FileEntry (log.txt).
fileEntry.createWriter(function(fileWriter) {
fileWriter.seek(fileWriter.length); // Start write position at EOF.
// Create a new Blob and write it to log.txt.
var blob = new Blob(['Hello World'], {type: 'text/plain'});
fileWriter.write(blob);
}, errorHandler);
}, errorHandler);
}
编辑 2:
如 SO here上所说,您尝试使用 javascript 是不可能的。尽管如此,作者还是建议使用 Java Applet 来实现所需的行为。
简而言之,HTML5 Filesystem API 只提供了一个沙盒文件系统,即位于浏览器的某个隐藏目录中。因此,如果您想访问真正的文件系统,考虑到您的用例,使用 java 就可以了。我猜这里有 java 和 javascript 之间的接口。但是,如果您想让您的数据仅可从浏览器访问(受同源策略约束),请使用 FileSystem API。