Internet Explorer缓存文件上载?

时间:2015-04-01 16:57:27

标签: internet-explorer caching file-upload

我有一个非常基本的页面,其中包含<input type="file">元素。当我提交选择了文件的表单时,服务器会回复一个在Excel中打开的电子表格(“新窗口”)。这种行为的含义是初始屏幕和输入元素在IE中仍然可见。如果我更改所选文件的磁盘上的数据并重新提交表单,Internet Explorer将再次上载旧内容;发送到服务器的内容中不存在我的最新更改。如果我再次通过输入的“浏览...”按钮选择文件,则会按预期上载新文件内容。 Firefox总是从磁盘发送文件的内容,这是预期/期望的行为。似乎Internet Explorer正在对上传的文件内容进行某种缓存。

有没有办法禁用这个“功能”并让IE每次提交表单时从磁盘中提取数据?

是否有关于此行为的文档?这是我第一次遇到它并且我的搜索很大程度上是空的。

4 个答案:

答案 0 :(得分:4)

您可以使用live demos posted on MS-Connect测试猜想。

当实施FileList和Blob时,错误开始于IE10 input.files 是文件/ blob项目的html5文件列表 为了填充它,IE blob每个filepicker选择。他们有一个“快照状态”(W3C术语) 如果在提交之前更新了所选文件,它们将保持同步 问题是,IE无法检测文件是否被删除,重命名或替换 在这种情况下,filepicker快照变得陈旧。

在提交文件选择器选择之前,在filepicker中选择文件,然后重命名已编辑时会发生什么情况。尽管新文件(具有原始文件名)已替换为其位置,但原始文件(现在具有不同的 名称和修改后的文本)将在表单中发送。这怎么可能?它好像是通过ntfs ObjectID跟踪的,它与Distributed Link Tracking一起使用。请注意,在此屏幕截图中,文件 name 内容文件不一致。

所以,它根本不是“缓存”的东西。这是一个跟踪错误。

答案 1 :(得分:0)

您是否尝试使用autocomplete标记的input属性?

例如

<input type="text" autocomplete="off" />

应强制{strong>值永远不会被重用,如W3C docs中所述:

  

autocomplete = on / off / default

     
      
  • on - on状态表示该值不是特别敏感,用户可以期望能够依赖他的用户   代理人要记住他为该控件输入的值。
  •   
  • 关闭 - 关闭状态表示控件的输入数据特别敏感(例如,a的激活码)   核武器);或者它是一个永远不会被重用的值   (例如,银行登录的一次性密钥),用户将   因此每次都必须明确输入数据,而不是   能够依靠UA为他预先填补价值;或者那个   该文档提供了自己的自动完成机制,但没有   希望用户代理提供自动完成值。
  •   

答案 2 :(得分:0)

我在IE 10,11中遇到了同样的问题。我可以使用下面的代码修复它

var file = $('input[type="file"]');
file.removeAttr('value');
var cloneFile = file.clone();
file.parent().get(0).replaceChild(cloneFile.get(0), file.get(0));

如果您要获取多个文件对象,请在选择器之后使用eq(-2)

$('input[type="file"]').eq(-2);

如有任何问题,请评论我。

答案 3 :(得分:-1)

我自己没有尝试过,但您可能想尝试在表单操作中使用虚拟参数,并在每次提交操作之前更改其值。例如,如果您有<form action="foo.php">,请将其更改为<form action="foo.php?dummy=0">,然后使用javascript将操作部分更改为例如在每次提交之前action="foo.php?dummy=1"等等。