【问题标题】:how to get and use its contents of a uploaded file in a java program in jsp?如何在jsp的java程序中获取和使用上传文件的内容?
【发布时间】:2011-09-07 11:53:30
【问题描述】:

我编写了一个 HTML 代码来在 jsp 中上传文件。现在我必须使用 jsp 中的 java 程序来获取这些数据并使用它。请你提供一个示例代码来说明如何实现这一点。

谢谢

【问题讨论】:

  • 先生,我尝试了第一个上传文件的 jsp 代码,我得到了输出,尝试了第二个 jsp 代码。我得到一个空页面,如果我添加这些行 DiskFileItemFactory factory = new DiskFileItemFactory() ;factory.setRepository(dir);我得到错误。我应该为它导入任何 jar 文件吗?
  • 下载 apache-upload 并在 WEB-INF/lib 文件夹下添加 .jar 文件。 commons.apache.org/fileupload

标签: jakarta-ee


【解决方案1】:

我很确定您的代码。请按照以下步骤操作

  1. 下载 apache commons-fileupload 和 apache commons-io 的二进制分发包(FileUpload 依赖于 Commons IO,因此在继续之前,请确保您的类路径中的依赖项页面中提到了该版本。)

  2. 提取这两个发行版并将commons-fileupload-1.2.2.jarcommons-io-2.0.1.jar 复制到WEB-INF/lib 文件夹下。

  3. 在Servlet中需要导入javax.servlet,javax.servlet.http,import java.io,java.util,org.apache.commons.fileupload,org.apache.commons.fileupload.servletorg.apache.commons.fileupload.disk packages

演示:

在WEB-INF/classes文件夹下创建一个servlet文件

package com.me;

import javax.servlet.ServletException;
import javax.servlet.http.*;
import java.io.IOException;
import java.io.File;
import java.util.List;
import java.util.Iterator;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;


public class FileUploadServlet extends HttpServlet
{
  public void doPost(HttpServletRequest request,
                     HttpServletResponse response) 
                         throws ServletException, IOException
   {
        boolean isMultipart = ServletFileUpload.isMultipartContent(request);
        java.io.PrintWriter pw=response.getWriter();
        final String SUCCESS="/success.jsp";
        final String FAIL="/fail.jsp";
        if(isMultipart) 
         {
          try
           {

             FileItemFactory factory = new DiskFileItemFactory();
             ServletFileUpload upload = new ServletFileUpload(factory);
             List items = upload.parseRequest(request);
             pw.print("total : " + items.size());
             Iterator iter = items.iterator();
             while (iter.hasNext()) 
             {
                FileItem item = (FileItem) iter.next();
             pw.print("total : " + item);
                if(!item.isFormField()) 
                  {
                     String fileName = item.getName();
                     String destFilePath=getServletContext().getRealPath("/upload/" + fileName);
                     File uploadedFile = new File(destFilePath);
                     item.write(uploadedFile);
                   }
              }
             request.setAttribute("message","file has been uploaded successfully!");
           }catch(Exception ex)
           {

              ex.printStackTrace();
              request.setAttribute("message","Cannot upload : " + ex.getMessage());
              getServletContext().getRequestDispatcher(FAIL).forward(request,response);
           }
           getServletContext().getRequestDispatcher(SUCCESS).forward(request,response);
        }
   }
}

在WEB-INF/web.xml中配置/注册servlet

<web-app>
 <servlet>
    <servlet-name>fileupload</servlet-name>
    <servlet-class>com.me.FileUploadServlet</servlet-class>
 </servlet>
 <servlet-mapping>
    <servlet-name>fileupload</servlet-name>
    <url-pattern>/fileupload</url-pattern>
 </servlet-mapping>
</web-app>

视图的内容 (upload.jsp)。

注意:使用“multipart/form-data”设置 enctype 属性

<form method="post" enctype="multipart/form-data" action="fileupload">
  <input type="file" name="file"/>
  <input type="submit"/>
</form>

success.jsp 和 fail.jsp 的内容

${message}

context 的根目录下创建一个名为upload 的文件夹。

JSP 版本(不推荐这种方式)

上传1.jsp

<form method="post" enctype="multipart/form-data" 

action="showfile.jsp">
  <input type="file" name="file"/>
  <input type="submit"/>
</form>

showfile.jsp

<%@ page import="java.io.*" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.Iterator" %>
<%@ page import="org.apache.commons.fileupload.FileItemFactory" %>
<%@ page import="org.apache.commons.fileupload.FileItem" %>
<%@ page import="org.apache.commons.fileupload.servlet.ServletFileUpload" %>
<%@ page import="org.apache.commons.fileupload.disk.DiskFileItemFactory" %>


<%

 boolean isMultipart = ServletFileUpload.isMultipartContent(request);
 String content="";

 if(isMultipart) 
     {
        FileItemFactory factory = new DiskFileItemFactory();
        ServletFileUpload upload = new ServletFileUpload(factory);
        List items = upload.parseRequest(request);

        Iterator iter = items.iterator();
        while (iter.hasNext()) 
         {
            FileItem item = (FileItem) iter.next();
            if(!item.isFormField()) 
              {
                 BufferedInputStream buff=new BufferedInputStream(item.getInputStream());
                 byte []bytes=new byte[buff.available()];
                 buff.read(bytes,0,bytes.length);
                 content=new String(bytes);
              }
          }
     }
%>

Content of File:
<pre>
 <%=content%>
</pre>

【讨论】:

  • 先生,我已经尝试了这里发布的代码stackoverflow.com/questions/1233639/… 这里的第一个代码我得到了上传文件的输出。我在第二个程序中添加了 jars 和提到的导入但是当这个程序运行它显示异常,说明 org.apache.jasper.JasperException:PWC6033:无法为 JSP PWC6199 编译类:生成的 servlet 错误:字符串:///index2_jsp.java:11:找不到符号符号:类 servlet 位置:包javax等。这是什么意思?我必须做什么才能得到内容
  • 先生,我是 jsp 的初学者,我无法掌握这些概念。我编写了一个 jsp 程序来使用 request.getParameter() 显示文件的内容,如下所示 但它向我显示了一个异常。先生这里有什么问题?
  • @sheba :你不能使用 request.getParameter()。发布您的代码工作,以便我可以帮助您。
  • 我的项目中没有类文件夹,我应该如上所述更改 web.xml 的内容吗?
  • 先生,我使用了一个 jsp 程序,使用户能够上传文件。我不知道如何使用另一个 jsp 程序获取上传文件的内容。请告诉我步骤是什么我必须这样做才能上传文件的内容。
猜你喜欢
  • 2011-06-14
  • 1970-01-01
  • 1970-01-01
  • 2019-04-25
  • 1970-01-01
  • 1970-01-01
  • 2011-08-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多