JSP+SERVLET实现“上传”

来源:互联网 发布:linux创建文件夹 权限 编辑:程序博客网 时间:2024/05/16 11:26

环境:

需要导入:commons-fileupload-1.2.jar和commons-io-1.3.1.jar两个jar文件

页面-------------------------------------------------------------------------------------

<body>
 
  <center>
  <h3>测试,不注册账号,也可以上传文件,并返回一个路径</h3>
    <form action="uploadServlet" method="post" enctype="multipart/form-data">
 上传文件:<input name="uploadFile" id="uploadFile" type="file" size="10">
 <input type="submit" value="上传">
    </form>
  </center>
  <hr color="blue">
  <h3>${msg }</h3>

 

</body>

 

servlet---------------------------------------------------------------------------------------

package ??;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;

 

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

 

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

 

public class UploadServlet extends HttpServlet {

 /**
  *
  */
 private static final long serialVersionUID = 1L;


 public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
doPost(request,response);
 }

 
 public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {

  //创建一个基于磁盘文件项的工厂
  DiskFileItemFactory factory=new DiskFileItemFactory();
  
  //设置工厂约束
  //1.指定文件上传后,的存放url
  File file=new File(this.getServletContext().getRealPath("/")+"download");
  factory.setRepository(file);
  //2.设置最大内存大小
  factory.setSizeThreshold(1024);
  
  //创建一个文件上传处理对象
  ServletFileUpload upload=new ServletFileUpload(factory);
  //设置最大上传文件大小
  upload.setFileSizeMax(1024*1024*100);
  
  try {
   List items=upload.parseRequest(request);
   
   Iterator ite=items.iterator();
   FileItem item=(FileItem) ite.next();
   
   if(item.isFormField()){//判断是不是表单数据
//    if("username".equals(item.getFieldName())){
//     System.out.println(item.getString("utf-8"));
//    }
   }else{
    //获取的上传的文件的路径
    File itemFile=new File(item.getName());
//System.out.println("itemFile.getPath()="+itemFile.getPath());
    //获取的的是服务器上存放文件的路径
    File target=new File(factory.getRepository(),itemFile.getName());
    
    //判断服务器上是否存在该文件
    if(target.exists()){
     //如果存在,就返回
     String msg="您上传的文件的名称,在服务器上已经存在,请您更改文件名后在上传";
     request.setAttribute("msg",msg);
     request.getRequestDispatcher("index.jsp").forward(request, response);
     //在这里就结束程序,以免继续往下执行,因为在这里response已经提交了
     return;
    }
//System.out.println("target="+target.getPath());

    try {
     item.write(target);
    } catch (Exception e) {
     String msg="没有选择上传的文件";
     request.setAttribute("msg",msg);
     request.getRequestDispatcher("index.jsp").forward(request, response);
     //在这里就结束程序,以免继续往下执行,因为在这里response已经提交了
     return;
    }
   }
   String msg="上传文件成功";
   request.setAttribute("msg",msg);
   request.getRequestDispatcher("index.jsp").forward(request, response);
  } catch (FileUploadException e) {
   String msg="@_#,上传失败,您上传的文件大于1kb";
   request.setAttribute("msg",msg);
   request.getRequestDispatcher("index.jsp").forward(request, response);
  }  
  
 }

}

 

下载------------------------------------------------------------------------------------------------

 

String filename=request.getParameter("filename");
  File file=new File(this.getServletContext().getRealPath("/")+"download");//获取服务器上的文件夹
  
  response.setContentType("application/*");//设置下载的文件类型是应用程序
  
  response.setHeader("Content-disposition",
    "attachment; filename="+URLEncoder.encode(filename,"UTF-8"));//解决下载中文名文件的乱码问题
  
  BufferedInputStream bis=new BufferedInputStream(new FileInputStream(file+"/"+filename));
  BufferedOutputStream bos=new BufferedOutputStream(response.getOutputStream());
  byte[] b=new byte[1024];
  while(bis.read(b) !=-1){
   bos.write(b);
  }
  bis.close();
  bos.flush();
  bos.close();