0

我正在尝试为我现有的 java 项目创建一个 Web 服务。在我的 java 项目中,当输入文件路径位置并将其插入 Postgresql 数据库时,它能够处理文档。我制作了一个动态 Web 项目(使用 Tomcat 6、RESTful Web 服务和球衣)。到目前为止,在 Web 项目中,它在 localhost 浏览器上有一个“选择文件”按钮,允许我选择一个文件。之后,我可以“提交”文件;但是现在它只是将文档上传到我计算机上的不同位置。我是否可以“选择文件”,然后将文件路径位置传递给我的 java 项目,该项目将处理它并将其插入我的数据库中?如果是这样,我将如何做到这一点?

任何想法都非常感谢,感谢您的宝贵时间!

伊丽莎白

4

3 回答 3

1

您需要使用 java servlet 并查看以下库: http://commons.apache.org/fileupload/ 从那里应该很简单。

于 2012-07-31T19:20:53.263 回答
1

在 Java servlet 中,您需要实现 doPost 方法。在该方法中,使用来自 Apache http://commons.apache.org/fileupload/的 FileUpload API 从客户端访问任何上传的文件。

这里有一些让你开始的东西:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
     DiskFileItemFactory disk = new DiskFileItemFactory();
     disk.setRespository(new File(TEMP_STORAGE));

     ServletFileUpload upload = new ServletFileUpload(disk);
     upload.setFileSizeMax(MAX_FILE_SIZE);
     List<FileItem> files = upload.parseRequest(request);

     //...get actual file with files.get(index).getInputStream() and process them....
     .....
}

但是在实施任何东西之前阅读他们的文档

在客户端,有一个带有这种标记的表单:

<form enctype="multipart/form-data" ...
于 2012-07-31T19:22:49.550 回答
0

没有可靠的方法可以简单地将文件名从客户端发送到服务器,然后让服务器获取文件。相反,如果您希望您的软件比现有的 Postgres 命令行客户端更有用,您需要上传整个文件(即使客户端和服务器在同一台机器上)。

如果您希望接受大文件,我强烈建议您使用流式方法将文件内容直接从请求推送到数据库中。否则,您将面临对堆空间施加很大压力的风险(例如,如果您尝试将整个文件加载到内存中)或在写入磁盘以缓冲文件时遇到性能和同步问题。由于 JDBC API 能够将数据流式传输到数据库,因此最好的办法是将请求的 InputStream 直接连接到数据库。

请注意,包括 Apache commons-upload 和 Servlet 3.0 文件上传功能在内的大多数“文件上传”API 都被操纵将文件上传到磁盘上的临时文件,然后在处理请求后将其删除。我不相信任何提供的流媒体功能,因此您可能必须自己编写。

于 2012-08-01T00:57:32.923 回答