HTML文件输入:加载已存在的文件名
我正在开发一个简单的SpringWeb应用程序来管理PDF格式的文档,它应该能够执行通常的操作:列出文档、添加新文档、删除和更新文档。这些操作转到MS SQL Server数据库(documents表有一个VARBINARY(MAX)字段来存储文档的字节)。更新(先前添加的)文件时出现问题。 添加文件很容易。JSP中的简化表单如下所示:HTML文件输入:加载已存在的文件名,html,sql-server,jsp,spring-mvc,Html,Sql Server,Jsp,Spring Mvc,我正在开发一个简单的SpringWeb应用程序来管理PDF格式的文档,它应该能够执行通常的操作:列出文档、添加新文档、删除和更新文档。这些操作转到MS SQL Server数据库(documents表有一个VARBINARY(MAX)字段来存储文档的字节)。更新(先前添加的)文件时出现问题。 添加文件很容易。JSP中的简化表单如下所示: <form:form method="post" action="AddDoc" commandName="document" enctype="mult
<form:form method="post" action="AddDoc" commandName="document" enctype="multipart/form-data">
<table id="documentTable">
<tr>
<td>
<p>Choose file:</p>
</td>
<td>
<p><input type="file" name="file" path="file" size="40" value="${document.file}"></p>
<p><sf:errors path="file" class="error"/></p>
</td>
</tr>
<tr>
<td colspan="2">
<p class="submit"><input id="submitForm" type="submit" name="commit" value="Go"></p>
</td>
</tr>
</table>
</form:form>
选择文件:
如您所见,表单在提交时发送一个文档对象,该对象由控制器验证并插入到数据库中。此文档对象在插入之前将文档的字节存储到多部分文件中。
现在我想更新这个Document对象,因此JSP页面与adding页面相同,不同之处在于必须在显示页面之前从DB加载已经存在的文档。表单现在填充了文档信息,除了输入文件字段,我不知道为什么没有填充该字段(您可以看到value=“${Document.file}”
)。问题是,用户可能不需要更新文件本身,只需更新表单上显示的其他关联属性,但在提交时,所有字段都正确封装在文档对象中,但文件为空并导致验证失败的除外。
我希望能够在加载更新文档JSP页面时填充文件输入字段,这样,如果用户提交表单而不更改此字段,则可以再次发送信息
我考虑过其他解决方案,比如修改验证器以接受一个空文件字段,然后从DB或会话中再次获取信息,但这看起来并不整洁
您认为哪种方法比较好?出于安全考虑,文件上载字段为用户提供了一个浏览按钮,而不是让您设置文件。否则,恶意的开发人员总是会将预选文件以各种形式放置在文件上传框中,并使用CSS使它们不可见以窃取您的文件。我读过一些关于这方面的内容,但我希望有另一种简单的方法来实现这一点。我希望避免在验证器中使用代码“补丁”,或使用会话再次获取文件。有谁能告诉我,你采用哪种方法来解决这个问题而不费吹灰之力吗?如果是内部网,我会将文件存储在网络共享上,这样用户就可以通过windows文件系统对其进行编辑,并且在数据库中只作为对它的引用。如果这是在网上,祝你好运。谢谢你的想法,但文件本身必须在数据库中。指向它的路径无效(如果路径或文档名更改,则容易出错)。无论如何,我最终决定对updateDoc表单做一点修改,这样它就可以在不同的文本字段中获得文件名。如果用户想要更新文件,他将被迫再次选择该文件。然后,控制器需要检查是否正在传递新文件。尽管没有我想要的那么简单和整洁,但它确实起到了作用。