2016-12-16 32 views
4

我有一个表单,我同时发送几个(比方说10)文件到后端,以及一些其他常规输入字段。验证错误后保留表单文件

当我在后端发现验证问题时,我再次显示表单并填充常规输入(下拉菜单,文本输入等),但是我无法填充文件字段,强制用户从中选择文件文件目录。

我想到的解决方案是发送文件的base64编码表示形式,并将它们放回表单中以防出现验证错误,但我想知道是否有更简单的方法。

+0

需要更多的信息。这个问题目前的格式 – Liam

+0

是不负责任的,你开始使用什么技术后端?显示一些代码或什么? – Liam

+0

答案是:上传与提交无关....将批号附加到文件...然后当验证失败时,他们不需要重新选择文件,因为它们已经上传......唯一需要的部分待定是验证。将超时附加到流氓文件...从未通过验证的x时间后从服务器删除。出于浏览器安全的原因..你将无法实现你想要的......这是下一个最好的事情。希望你遵循我的意思。 – Seabizkit

回答

1

不管你做什么,你都不能跳过服务器端验证。出于安全原因(例如发送原始请求的人)。至于显示错误的文件(或简单的重新加载),我会发送它为Base64,但通过AJAX如果文件很大。

  1. 客户端验证:大多数验证(如果不是全部)可以使用纯JS来完成。无论是文件大小,内容类型...和更具体的验证根据文件类型(图像,文档...)
  2. 服务器端验证:一旦发送,完全验证文件和内容。
  3. 发回文件:如果发生错误,请发送带有请求的文件(如果很小)。如果大的通过AJAX发送,以避免阻止并保持页面加载时间快。

希望它有帮助!

0

做的是最简单的事情:

1)验证在客户端(JavaScript/jQuery的)

2)一旦所有其它输入验证所有字段,那么你在发送文件。

注意:如果您需要验证服务器端的某些值,请对步骤(1)和(2)使用ajax。另外,试着给出更多的细节来获得高质量的答案

+0

在两个不同的HTTP调用空隙中执行验证和提交验证,因为在第二个请求中发送的参数可能与在第一个请求中发送的参数不同。 – Bustikiller

0

我会为上传的文件创建一个临时存储,并且只会发送从商店获取的唯一难猜的ID而不是整个文件。

单个文件上传的表单部分将包含一个带有唯一文件ID的隐藏输入。

处理请求时:如果请求中有文件获取文件(如果表单无效则存储)否则如果有文件ID从存储中获取文件。