我已经在一个MVC应用程序中创建了一个简单的表单。它包含一个文件字段,以便用户可以上传图像。一切都很好

问题是,如果表单提交失败验证文件字段的内容丢失(其他字段保持填充,thx HtmlHelpers!)。验证失败后,如何填写文件字段?

TIA!

分享
 

浏览器是由于安全风险而设计的。在HTML源代码或Javascript中设置文件输入框的值是不可能的。否则恶意脚本可能会窃取一些私人文件,无需用户注意。

一个有趣的信息有关的主题。

分享
 
   
嗯,我明白安全原则。只是希望我描述的场景是可能的,因为我受到了用户体验的影响。; / -  Chaddeus 6月9日在'09 5时28分
6 
要修复用户必须重新选择文件的UX问题:当首次提交具有设置文件的表单时,可以将该文件存储在服务器端的临时缓存中。然后,如果验证失败,您可以简单的显示文件名(或缩略图)来指示该字段被设置。验证成功后,您可以从缓存中获取文件数据。 -  tsauerwein Oct 3 '14 at 9:15
2 
@tsauerwen,那就是打败MVC无国籍模式的目的。 -  Triynko Nov 18 '15 at 19:11

据我所知,您无法设置HTML文件输入框的值。我建议将文件输入框与标签或文本框进行连接。

然后,您可以使用文件输入框中的值填充它,以便稍后重新提交。

分享
 
   
有趣的...你知道一个以这种方式实现的网站吗?寻找例子...谢谢你 -  Chaddeus 6月9日09时48分
   
Gmail使用与附件类似的东西。上传文件后,会转动文字。但是,这是使用AJAX异步完成的。 评论时间70年01月01日原作者:  Michael

有基于闪存的文件上传器。尝试其中之一。如果不支持flash和java脚本,其中有些甚至会退回到常规文件输入框。我建议寻找jQuery插件。

分享
 

如果文件不是太大,你可以base64它,并将其用作隐藏字段的值。

分享
 

您不能设置HTML文件输入框的值。作为解决方法,在验证后输出表单时,将文件上传框替换为隐藏的输入字段。

提交时,您将使用文件输入框中的值填充隐藏字段(稍后重新提交)。请记住,任何一个时间(不是两个)都有文件上传或隐藏的字段名称:

注意:以下代码仅供说明/解释之用。将其替换为与您使用的语言相适应的代码。

<?php /* You may need to sanitize the value of $_POST['file_upload']; 
* this is just a start */
if(isset($_POST['file_upload']) && !empty($_POST['file_upload'])){ ?>
<input type="hidden" name="file_upload" value="<?php print($_POST['file_upload']); ?>" />
<?php } else { ?>
<input type="file" name="file_upload" />
<?php } ?>
分享
 
   
“记住要将文件上传或隐藏的字段名称存在于任何一个时间(而不是两者)。” 那么如果在验证之后,用户改变主意并想要选择不同的文件呢? -  


来自  http://stackoverflow.com/questions/967916/how-to-keep-input-type-file-field-value-after-failed-valid...