0

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

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

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

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

提前致谢。

4

2 回答 2

0

你可以在这里阅读这是如何完成的

如何使用 JSP/Servlet 将文件上传到服务器?

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

于 2012-11-16T07:00:01.780 回答
0

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

首先下载

  • commons-fileupload-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="multipart/form-data" 是必须的

现在创建一个名为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,您就可以根据需要更改上传图片的地址(为此更改参数值)

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

于 2015-06-24T06:27:07.573 回答