如何在jsp上将文件上传到服务器上的文件夹?

时间:2012-11-16 06:53:23

标签: eclipse jsp servlets file-upload

我正在做项目在线图片库,我必须上传图片。我是用jsp / servlet做的,IDE是Eclipse。 我的Jsp文件如下

<form action="ActionPage" >
    <input type="file" name="myFile">

    <br>
    <input type="submit">
</form>

这里的Actionpage是servlet。在单击“提交”按钮时,我希望所选文件存储在服务器上的WebContent和数据库表上的路径中名为“IMAGE”的文件夹中。 如果有人知道简单的解决方案,请分享。

提前谢谢。

2 个答案:

答案 0 :(得分:0)

你可以在这里阅读这是怎么做的

How to upload files to server using JSP/Servlet?

PS:将上传的文件存储在应用程序目录中是BAD BAD BAD的想法。想想如果你的应用程序运行一段时间会发生什么,并且你想要重新部署,因为文件缺少一些html标记。您的容器将删除上传的目录! 尝试使用应用程序目录之外的文件夹,或使用数据库。

答案 1 :(得分:0)

如果您使用jsp开发网站,这是最简单的解决方案 首先,从用户那里获取输入,创建一个html或jsp页面,并在你的jsp / html页面中包含tis代码

首先下载

  • 公地文件上传-1.2.2.jar

  • org.apache.commons.io.jar

并通过右键单击项目然后选择构建路径然后添加jar文件

将此jar添加到库中
    `<form role="form" action="Upload.jsp" method="post"enctype="multipart/form-data">
    <div class="btn btn-success btn-file">
    <i class="fa fa-cloud-upload"></i>
             Browse
    <input type="file" name="file" />
    </div>
    <button type="submit" value="submit" name='submit'>submit</button>`
    </form>
  

ENCTYPE = “多部分/格式数据”   这是必要的

现在创建一个名为upload.jsp的jsp(您可以使用目标jsp将我们的图像保存到任何名称的服务器,但记得将该名称放在上面的代码中

    <%@ page import="java.io.*,java.util.*, javax.servlet.*" %>
    <%@ page import="javax.servlet.http.*" %>
    <%@ page import="org.apache.commons.fileupload.*" %>
    <%@ page import="org.apache.commons.fileupload.disk.*" %>
    <%@ page import="org.apache.commons.fileupload.servlet.*" %>
    <%@ page import="org.apache.commons.io.output.*" %>

    <%
       String userName = (String) session.getAttribute("User");
      File file ;
      int maxFileSize = 5000000 * 1024;
      int maxMemSize = 5000000 * 1024;
      ServletContext context = pageContext.getServletContext();
      String filePath = context.getInitParameter("file-upload");

      // Verify the content type
      String contentType = request.getContentType();
      if ((contentType.indexOf("multipart/form-data") >= 0)) {

         DiskFileItemFactory factory = new DiskFileItemFactory();
         // maximum size that will be stored in memory
         factory.setSizeThreshold(maxMemSize);
         // Location to save data that is larger than maxMemSize.
         factory.setRepository(new File("C:\\Users\\"));

  // Create a new file upload handler
  ServletFileUpload upload = new ServletFileUpload(factory);
  // maximum file size to be uploaded.
  upload.setSizeMax( maxFileSize );
  try{ 
     // Parse the request to get file items.
     List<FileItem> fileItems = upload.parseRequest(request);

     // Process the uploaded file items
     Iterator i = fileItems.iterator();

     while ( i.hasNext () ) 
     {
        FileItem fi = (FileItem)i.next();
        if ( !fi.isFormField () )   
        {
        // Get the uploaded file parameters
        String fieldName = fi.getFieldName();
        String fileName = fi.getName();
        boolean isInMemory = fi.isInMemory();
        long sizeInBytes = fi.getSize();
        // Write the file
        if( fileName.lastIndexOf("\\") >= 0 ){
        file = new File( filePath + 
        fileName.substring( fileName.lastIndexOf("\\"))) ;
        }else{
        file = new File( filePath + 
        fileName.substring(fileName.lastIndexOf("\\")+1)) ;
        }
        fi.write( file ) ;

        request.setAttribute("Success", "Successfully Uploaded");
        RequestDispatcher rd = request.getRequestDispatcher("/UploadFiles.jsp");
        rd.forward(request, response);
        }
     }

  }catch(Exception ex) {
     System.out.println(ex);
  }
      }else{
         request.setAttribute("Error", "Error!!");
        RequestDispatcher rd =request.getRequestDispatcher("/UploadFiles.jsp");
        rd.forward(request, response);
      }
   %>

请不要混淆只需复制此代码,一旦您完成此操作,我相信您将了解代码

现在你需要做的最后一件事就是在没有这个文件的情况下向web.xml添加一些内容然后创建它......

 <context-param>
    <description>Location to store uploaded file</description>
    <param-name>file-upload</param-name>
    <param-value>
             C:\\Users\\
    </param-value>
</context-param>

只需将上面的代码添加到web.xml,您就可以根据需要更改上传图片的地址(更改参数值)

如果您遇到任何问题,请告诉我