Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
HTML文件输入:加载已存在的文件名_Html_Sql Server_Jsp_Spring Mvc - Fatal编程技术网

HTML文件输入:加载已存在的文件名

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

我正在开发一个简单的SpringWeb应用程序来管理PDF格式的文档,它应该能够执行通常的操作:列出文档、添加新文档、删除和更新文档。这些操作转到MS SQL Server数据库(documents表有一个VARBINARY(MAX)字段来存储文档的字节)。更新(先前添加的)文件时出现问题。 添加文件很容易。JSP中的简化表单如下所示:

<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表单做一点修改,这样它就可以在不同的文本字段中获得文件名。如果用户想要更新文件,他将被迫再次选择该文件。然后,控制器需要检查是否正在传递新文件。尽管没有我想要的那么简单和整洁,但它确实起到了作用。