使用html输入type = file存储图像

时间:2010-11-04 22:21:12

标签: java html jsp file-upload input

您好我正在构建一个管理员可以上传新产品的Web应用程序(在线商店)。 其中一个输入类型是文件(产品图片) 我希望将产品的图像存储在一个文件夹中,每个产品都会在数据库表中关联一个图像。

我的问题是,输入类型=文件是如何工作的?我仍然不明白当我提交表单时,servlet会将图像粘贴到网页文件夹中,以及如何获取的值(图像名称)存储在数据库表中?

对于其他输入,我使用“value”来获取信息。

谢谢!

3 个答案:

答案 0 :(得分:2)

在java中,很难处理文件上传。但是有许多库可以做到这一点。最受欢迎的是apache commons file uploads这是一个关于如何在java中执行此操作的示例:

DiskFileItemFactory factory = new DiskFileItemFactory();

// Set factory constraints
factory.setSizeThreshold(yourMaxMemorySize);
factory.setRepository(yourTempDirectory);

// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);

// Set overall request size constraint
upload.setSizeMax(yourMaxRequestSize);

// Parse the request
List /* FileItem */ items = upload.parseRequest(request);

您应该使用更多选项。

答案 1 :(得分:1)

  

输入类型=文件如何工作?

这将用于<form> multipart/form-data编码。选择文件并提交表单后,文件内容将成为HTTP请求正文的一部分。在servlet中,它由request.getInputStream()作为“原始”数据提供。在仅支持servlet 2.5或更早版本的servletcontainers中,没有API提供的工具来解析数据。 Apache Commons FileUpload是事实上的标准。从servlet 3.0开始,您可以使用API​​提供的request.getParts()来使用Commons FileUpload的许可副本。

另见:

  

我仍然不明白当我提交表单时,servlet会将图像粘贴到网页文件夹中,以及如何获取要存储在数据库表中的值(图像名称) ?

您不仅应该对文件名感兴趣。您还应该对文件内容感兴趣。无论您选择何种方式将上传的文件解析出请求正文,您最终都应该使用InputStreambyte[]的文件内容。您可以使用FileOutputStream将其写入本地磁盘文件系统,并以通常的JDBC方式将唯一文件名存储在DB中。

另见:

答案 2 :(得分:0)

将文件上传到Web服务器时,通常包含以下信息(或类似信息):

Content-Disposition: form-data; name="fileInput"; filename="myFile.txt"
Content-Type: application/octet-stream

filename包含文件名或完整路径,具体取决于浏览器。

如果您使用Fiddler之类的程序,则可以准确了解上传文件时发生的情况。