首页 > 开发 > Java > 正文

java实现文件上传下载

2024-07-14 08:42:12
字体:
来源:转载
供稿:网友

本文实例为大家分享了java实现文件上传下载的具体代码,供大家参考,具体内容如下

一.上传

1.前端:

<form method="post" action="FileUpload" enctype="multipart/form-data">  <input type="file" name="uploadFile" />  <br/>  <input type="submit" value="上传" /></form>

2.后台:

import java.io.File;import java.io.IOException;import java.io.PrintWriter;import java.util.List;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;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.disk.DiskFileItemFactory;import org.apache.commons.fileupload.servlet.ServletFileUpload;import dao.FileDao;@WebServlet("/FileUpload")public class FileUpload extends HttpServlet {  private static final long serialVersionUID = 1L;     // 上传配置  private static final int MEMORY_THRESHOLD  = 1024 * 1024 * 3; // 3MB  private static final int MAX_FILE_SIZE   = 1024 * 1024 * 40; // 40MB  private static final int MAX_REQUEST_SIZE  = 1024 * 1024 * 50; // 50MB    public FileUpload() {    super();  }    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        request.setCharacterEncoding("UTF-8");    response.setCharacterEncoding("UTF-8");    response.setContentType("text/html;charset=UTF-8");    PrintWriter out = response.getWriter();          if (!ServletFileUpload.isMultipartContent(request)) {      // 如果不是则停止      out.println("Error: 表单必须包含 enctype=multipart/form-data");      out.flush();      return;    }        // 配置上传参数    DiskFileItemFactory factory = new DiskFileItemFactory();    // 设置内存临界值 - 超过后将产生临时文件并存储于临时目录中    factory.setSizeThreshold(MEMORY_THRESHOLD);    // 设置临时存储目录    factory.setRepository(new File(System.getProperty("java.io.tmpdir")));     ServletFileUpload upload = new ServletFileUpload(factory);         // 设置最大文件上传值    upload.setFileSizeMax(MAX_FILE_SIZE);         // 设置最大请求值 (包含文件和表单数据)    upload.setSizeMax(MAX_REQUEST_SIZE);        // 中文处理    upload.setHeaderEncoding("UTF-8");             String uploadPath = request.getServletContext().getRealPath("/files");    File uploadDir = new File(uploadPath);    if (!uploadDir.exists()) {      uploadDir.mkdir();    }        try {      // 解析请求的内容提取文件数据      List<FileItem> formItems = upload.parseRequest(request);      if (formItems != null && formItems.size() > 0) {        // 迭代表单数据        for (FileItem item : formItems) {          // 处理不在表单中的字段          if (!item.isFormField()) {            String fileName = new File(item.getName()).getName();            String filePath = uploadPath + File.separator + fileName;            File storeFile = new File(filePath);            // 在控制台输出文件的上传路径//            System.out.println(filePath);            // 保存文件到硬盘            if(storeFile.exists()) {              out.println("上传失败,文件已存在!");            }else {              item.write(storeFile);              out.println("文件上传成功!");            }            }        }      }    } catch (Exception ex) {      response.getWriter().println("文件上传成功!");    }  }    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {    doGet(request, response);  }} 

二.下载

1.下载链接:

FileDownload?filename="+URLEncoder.encode(filename,"utf-8") --------- 需要对URL中的中文参数进行编码,否则会出现乱码

2.后台:

import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.PrintWriter;import java.net.URLEncoder;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;@WebServlet("/FileDownload")public class FileDownload extends HttpServlet {  private static final long serialVersionUID = 1L;      public FileDownload() {    super();  }  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        request.setCharacterEncoding("UTF-8");    response.setCharacterEncoding("UTF-8");    PrintWriter out = response.getWriter();        String dirPath = request.getServletContext().getRealPath("/files");    String filename = URLEncoder.encode(request.getParameter("filename"),"utf-8");  //需要对URL中的中文参数进行编码,否则出现乱码    response.getWriter().println(filename);    String filepath = dirPath + File.separator + filename;    response.setContentType("APPLICATION/OCTET-STREAM");    response.setHeader("Content-Disposition", "attachment; filename=/"" + filename + "/"");    FileInputStream fileInputStream = new FileInputStream(filepath);    int i = 0;    while ((i = fileInputStream.read()) != -1) {      out.write(i);    }    fileInputStream.close();    out.close();  }    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {    doGet(request, response);  }}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持VeVb武林网。


注:相关教程知识阅读请移步到JAVA教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表