【发布时间】:2013-10-07 18:45:12
【问题描述】:
我有一个使用
的 HTML5/javscript 应用程序<input type="file" accept="image/*;capture=camera" onchange="gotPhoto(this)">
捕捉相机图像。因为我的应用想要离线运行,我如何将 File (https://developer.mozilla.org/en-US/docs/Web/API/File) 对象保存在本地存储中,以便以后可以检索它以进行 ajax 上传?
我正在从 using ... 中获取文件对象
function gotPhoto(element) {
var file = element.files[0];
//I want to save 'file' to local storage here :-(
}
我可以Stringify对象并保存它,但是当我恢复它时,它不再被识别为File对象,因此不能用于抓取文件内容。
我感觉无法完成,但愿意接受建议。
FWIW 我的解决方法是在存储时读取文件内容并将全部内容保存到本地存储。这可行,但会很快消耗本地存储,因为每个文件都是 1MB 以上的照片。
【问题讨论】:
-
由于本地存储只支持字符串,您必须将文件转换为base 64(或某种形式的字符串)
-
我的建议是将 dataURL 添加到您的文件对象并在之后对其进行字符串化。所以你有完整的文件对象,你可以加载存储了 dataURL 的图像。 jsfiddle.net/bR8Nt/1
-
@pinoyyid 因为实际上没有办法在 JavaScript 中实例化
File对象,所以你很不走运。最接近的替代方法是,当从本地存储恢复字符串编码文件时,创建一个Blob,File继承自该文件。您可以将Blob用于大多数您本来可以使用File的事情。如果您认为这样的示例有用,我会写下来。但它并不能真正解决您的问题,只是让您更接近您真正想要的对象。 -
@dandavis,谢谢,但与所有答案一样,这需要我保存图像内容的副本。我试图将 File 对象简单地存储为指向手机图库中 .jpg 文件的指针。
标签: javascript html local-storage