将 dataURL(base64) 保存到 PhoneGap (android) 上的文件
我正在将画布转换为 dataURL(base64) 类型,我想使用 PhoneGap 的编写器将其保存到手机文件系统,但没有成功(我得到了无法打开的损坏文件) - 这是我的一些代码:
I'm converting canvas to dataURL(base64) type and I wanted to save it to phone filesystem using PhoneGap's writer but without success (I get broken file which I cannot open) - here's some of my code:
var dataURL = document.getElementById("gen").toDataURL('image/png'); //substr() .replace('datadata:image/png;base64,', '');
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fail);
function gotFS(fileSystem) {
fileSystem.root.getFile("screenshot.png", {create: true, exclusive: false}, gotFileEntry, fail);
}
function gotFileEntry(fileEntry) {
fileEntry.createWriter(gotFileWriter, fail);
}
function gotFileWriter(writer) {
console.log("open and write");
writer.seek(0);
writer.write(dataURL);
console.log("close and save");
}
function fail(error) {
console.log(error.code);
}
var fileTransfer = new FileTransfer();
fileTransfer.download("/", screenshot.png,
function(entry) {
alert("download complete");
},
function(error) {
alert("download error source " + error.source);
alert("download error target " + error.target);
alert("upload error code" + error.code);
}
);
我还尝试了 stackoverflow 的其他解决方案,它基于附加的 java 插件,但它对我不起作用.是否有纯 JS(带有额外的 js 库)解决方案?
I've tried also other solution from stackoverflow, which was based on addtional java plugin but it hasn't work for me. Is there pure JS(with additional js libs) solution for it?
推荐答案
您可能需要为大到足以容纳图像的文件系统请求更大的文件配额.默认值通常为 5 mb,但由于未标准化,因此在不同的浏览器中可能会有所不同.
You may need to request larger file quota for the file system that is big enough to hold the image. Default is typically 5 mb but may vary in the different browsers as it's not standarized.
如果 data-uri 的长度超过此长度(这可能是因为它是一个 PNG 文件,其中 33% 增加了 33% 作为 base64 的开销)该文件将无法正确保存.
If the length of the data-uri exceeds this (which is likely considering it's a PNG file with 33% added 33% overhead as base64) the file won't save properly.
您可以使用配额 API 请求配额:
You can request quota using the quota API:
webkitStorageInfo.requestQuota(
webkitStorageInfo.PERSISTENT
newQuotaInBytes,
quotaCallback,
errorCallback);
更多详情请见 这里.
相关文章