【问题标题】:Saving FileList to $.cookies将文件列表保存到 $.cookies
【发布时间】:2015-02-07 21:40:58
【问题描述】:

我有一个这样的文件列表:

FileList {0: File, 1: File, 2: File, File…}

我需要在页面刷新后记住这些文件。如何将它们保存到 cookie 中? (或者有更好的方法吗?)现在我正在这样做$.cookie("result", files); files = $.cookie("result");,但这让我无法解析 [object FileList]。将files 转换为 JSON 也不起作用。

任何想法如何保存 FileList 以便在页面刷新后循环它?

编辑:也许我应该注意我从用户输入中获取 FileList,例如“选择文件”。

分配文件:

HTML 部分:

<input type="file" id="files" name="file" multiple />

JS部分:

$('#files').on('change', readFiles);
function readFiles(event) {
     var files = event.target.files; //has FileList {0: File, 1: File, 2: File, File…}
     $.cookie.json = true; //converts FileList to json (is correct).
     $.cookie("result", files); //cookie registering also works (atleas with strings) 
     files = $.cookie("result"); //get undefined as a result
     for (var i = 0, f; f = files[i]; i++) {
       var reader = new FileReader();
       reader.readAsText(f, 'utf-8');
     }
}

【问题讨论】:

  • 请显示一些实际代码。您的 FileList 示例不是 javascript。
  • @JonathanM:是的。这就是 DOM FileList 对象在控制台中的显示方式。
  • @Slaks,啊,我把它当作代码,而不是控制台输出。
  • @user3960875,当你说你不能“解析”对象 FileList 时,你不应该解析它。相反,您应该只是引用它,例如 myFileName=files[2];
  • @JonathanM 当以myFileName=files[2]; 访问它时,我得到它的格式错误(作为单个字符),例如myFileName=files[0];[ 不是第一个文件。

标签: javascript jquery cookies jquery-plugins


【解决方案1】:

在您的原始代码中,代替:

reader.readAsText(f, 'utf-8');

你想要的:

reader.readAsText(f.name, 'utf-8');

如果您还没有打开它,您可能需要 JSON 选项,该选项在存储时将对象自动转换为 JSON 字符串,然后在检索时返回对象。它看起来像:

$.cookie.json=true;

这是文档:https://github.com/carhartl/jquery-cookie/tree/v1.4.1#json

注意:虽然根据spec,每个 cookie 的最大大小是无限的,但实际上它因浏览器而异。如果您的列表中有 150 个文件,您可能会达到限制,而 $.cookie 对象正在拒绝该值。有关最大尺寸的更多信息,请参见此处:What is the maximum size of a web browser's cookie's key?

为避免此限制,请划分您的列表,或使用webstorage

更好的解决方案是通过 GET 或 POST 将文件列表存储在服务器上,并让服务器提供允许检索的会话 cookie。如果使用 PHP,请参阅PHP Sessions

【讨论】:

  • 上次执行files = event.target.files; $.cookie.json=true; $.cookie("result", files); files = $.cookie("result"); 时,我从cookie 中分配files,它的评估结果为未定义...但是当我执行$.cookie("res", "hello"); str = $.cookie("res"); 时,它评估正确,例如打印你好。所以 FileList 存在某种问题......是否有限制可能是多长时间?
  • 您评论中的 JSON 是否是您的 FileList 的确切表示?也就是说,您的列表是否只包含一个文件?如果是这样,我将使用{"0":{"webkitRelativePath":"","lastModified":1411305080000,"lastModifiedDate":"‌​2014-09-21T13:11:20.000Z","name":"file2.html","type":"text/html","size":32966}} 作为对象运行一些测试。
  • 这是准确的表示,但我有接近 150 个文件(所有轻量级 html 文件 var json =JSON.stringify(files);console.log(json); 时我会得到这个我希望 $.cookie.json=true 做同样的事情。跨度>
  • 是的,cookie 做同样的事情。这个stringify产生的json字符串的长度是多少?根据这个答案,整个 cookie 的最大长度约为 4Kb。 stackoverflow.com/questions/640938/…
  • 更正它对于 cookie 来说太大了 (32KB)。刷新后如何记住 32KB JSON 的任何其他想法:D?
猜你喜欢
  • 1970-01-01
  • 2020-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多