【问题标题】:Uploading images using Servlet 3.0使用 Servlet 3.0 上传图片
【发布时间】:2014-02-24 09:25:45
【问题描述】:

我有一个 enctype "multipart" 的简单表格;我正在使用它将图像上传到我的服务器。我有两种可能的解决方案,但都不完整。

第一个解决方案:

FileItemIterator iterator = upload.getItemIterator( request );

while( iterator.hasNext() ){
    FileItemStream item = iterator.next();

    if( item.isFormField() ){
          // store IMG
    }

} // ~while( iter.hasNext() )

在这个解决方案中,我无法获取上传文件的尺寸,但我可以获取它是否为表单字段(使用item.isFormField()

我的第二个解决方案使用 Servlet 3.0 API:

for( Part part: request.getParts() ){
    System.out.println( part.getSize() );
}

这里可以获取上传图片的大小,但是不知道是不是简单的表单域。

我错过了什么?

您需要什么帮助我?

【问题讨论】:

  • 请告诉我您所说的尺寸是什么意思?

标签: java image tomcat servlets upload


【解决方案1】:

正如FileItemStream的文档中提到的那样

isFormField() 方法告诉如果这是一个简单的表单字段是否返回 true ,否则返回 false 。

所以上传图片会返回 false

所以你应该做以下事情:

  if(! item.isFormField() ){
              // store IMG
        }else {

//simple form field.
       }

并参考此答案here 以了解如何将 InputStream 转换为 byte[] 以了解您上传的文件中有多少字节。

如果您使用的是 servlet 3,请执行以下操作:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String username= request.getParameter("username"); // Retrieves <input type="text" name="username">
    Part filePart = request.getPart("file"); // Retrieves <input type="file" name="file">
    String filename = filePart.getName();
    InputStream filecontent = filePart.getInputStream();
    // ... (do your job here)
}

并给我一些反馈。

希望有所帮助。

【讨论】:

  • 哦,很好,感谢您的回复,我会尝试!...有什么方法可以通过“Part”类(servlet 3.0)获得“isFormField”?
  • 我无法理解你的问题?
  • 我想知道,我怎么知道它是否是使用第二种解决方案的表单字段? (api servlet 3.0)
  • 第二个解决方案是什么意思?
猜你喜欢
  • 2013-12-27
  • 1970-01-01
  • 1970-01-01
  • 2023-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-01
相关资源
最近更新 更多