【问题标题】:Storing image using htm input type=file使用 html 输入类型 = 文件存储图像
【发布时间】:2010-11-04 22:21:12
【问题描述】:

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

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

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

谢谢!

【问题讨论】:

标签: java html jsp file-upload input


【解决方案1】:

在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);

还有更多选项可供您尝试。

【讨论】:

  • 顺便说一下,一旦你有了文件,你就可以执行 writeTo(File) 并将它保存在任何地方。
  • 这并不难。它只是在 3.0 版之前没有内置在标准 Servlet API 中。在 Java 中使用 3rd 方库就像在类路径中删除 JAR 文件一样简单。
  • 是的。如果您使用的是 maven,那么它会更容易。我是说没有第三者很难做到。
【解决方案2】:

input type=file 是如何工作的?

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

另见:

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

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

另见:

【讨论】:

    【解决方案3】:

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

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

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

    如果您使用像Fiddler 这样的程序,您可以在上传文件时准确看到发生了什么。

    【讨论】:

      猜你喜欢
      • 2010-11-24
      • 2017-10-13
      • 1970-01-01
      • 1970-01-01
      • 2011-02-20
      • 2020-04-17
      • 2022-07-22
      • 1970-01-01
      相关资源
      最近更新 更多