在play框架中,是否有可能拒绝一个字段

filledForm.reject("myField", "You are missing files");
return badRequest(myform.render(filledForm));

没有重新加载页面?

我有一个文件输入字段,允许用户选择文件。在拒绝和重新加载时,将清除文件并显示错误。我希望他们选择的文件在那里

当前行为:递交表格前:

Before

提交后(有错误:文件都不见了)

Before

有帮助吗?

解决方案

文件选择输入字段(即 <input type="file" ... />)与其他输入字段不同-您不能从服务器端预先填充值。如果你能(想想),这将是一个巨大的安全漏洞 <input type="file" value="/etc/passwd" .. />).在服务器上,当您获得提交的表单时,您不会获得上传文件的完整路径,只是文件的名称和内容。

如果你真的需要保留你的文件输入字段的值,你将需要走不同的路线:通过Ajax提交表单(谷歌为"ajax文件上传"的一些技术和库来帮助这一点),并使用Ajax响应来指示文件是否有效。


进一步澄清:使用正常的HTML/HTTP post方法(Play表单帮助程序使用的方法),原始页面消失了,服务器响应是一个与前一页没有连接的新页面。Play forms帮助程序将使用前面的值预先填充此页面上的输入字段,但如上所述,这对于文件输入字段是不可能的。

这就是为什么有特殊用途的javascript库用于上传文件。如果您的表单主要与文件上传有关,您应该查看这些。(例如 http://fineuploader.com).在服务器端,Ajax查询的目标将是一个新操作,它只处理上传的文件并返回成功/失败消息,然后将其显示给用户。

其他提示

如果服务器能够操纵文件字段的值,那将是一个主要的安全风险,因为我们可以从用户硬盘中获取任何文件。如果我们查看所需的两个要求,

  • 在服务器上获取文件内容
  • 请勿打扰客户端UI状态

    唯一的选项是使用Ajax文件上传器。所以你的流现在变成了:

    • 通过ajax上传提交文件
    • 验证内容
    • 保存文件以稍后检索
    • 发送状态(确定或错误)
    • 显示错误的错误 提交了整个表单后,查找以前保存的文件

      如果您不介意负载,您可能会欺骗一下 - 只需使用Ajax进行验证来显示错误消息,并让文件在正常提交时再次上传。

      它是关于我们的限制。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top