使用Servlet实现java 文件上传

本篇主要讲述通过java servlet来实现文件的上传功能。
1.工程需要有commons-fileupload.jar以及commons-io.jar的支持。

2.文件上传页面以及上传成功的消息提示页面
uploadfile.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>文件上传下载</title>
</head>
<body>
    <form id="upanddownfile" action="UpandDownFileServlet"
        enctype="multipart/form-data" method="post">
        <input type="text" name="username" /> <br /> <input type="file"
            name="file1"> <input type="file" name="file2"> <input
            type="submit" value="提交">
    </form>

</body>
</html>

success.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>上传成功</title>
</head>
<body>
${message}
</body>
</html>

uploadFileServlet.java

“`
package com.upanddown.servlet;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
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 UpandDownFileServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

public UpandDownFileServlet() {
    super();
}

public void doGet(HttpServletRequest request,
        HttpServletResponse response) throws ServletException, IOException {
    //得到上传文件的保存目录,如果不存在,则新建目录。
    String savePath = this.getServletContext().getRealPath(
            "/WEB-INF/upload");
    File file = new File(savePath);
    // 判断目录文件是否存在,如果不存在,则创建目录
    if (!file.exists() && !file.isDirectory()) {
        file.mkdir();
    }
    // 消息提示
    String message = "";
    //通过Apache提供的文件上传组件实现文件上传
    //1.创建一个DiskFileItemFactory类
    DiskFileItemFactory factory = new DiskFileItemFactory();
    //2.创建上传文件解析器
    ServletFileUpload upload = new ServletFileUpload(factory);
    //解决上传文件名中文乱码问题
    upload.setHeaderEncoding("utf-8");
    //3.判断上传的数据是否是表单提交数据
    if (!upload.isMultipartContent(request)) {
        return;
    }
    try {
        //使用servlet文件解析器解析上传文件,返回一个List<FileItem>
        List<FileItem> list = upload.parseRequest(request);
        for (FileItem item : list) {
            //如果fileitem封装的是普通数据
            if (item.isFormField()) {
                String name = item.getFieldName();
                //解决普通输入项中文件乱码问题
                String value = item.getString("UTF-8");
            } else {
                //如果上传的是文件类型
                //得到上传的文件名
                String filename = item.getName();
                if (filename == null || filename.trim().equals("")) {
                    continue;
                }
                //处理获取到的上传文件的名称的路径部分,只保留文件名部分
                filename = filename.substring(filename
                        .lastIndexOf("\\")+1);
                //获取item文件的输入流
                InputStream in = item.getInputStream();
                //创建一个文件输出流
                FileOutputStream out = new FileOutputStream(savePath + "\\"
                        + filename);
                //创建缓冲区
                byte buffer[] = new byte[1024];
                //判断输入流中的数据是否已经读完的标识
                int len = 0;
                //循环将输入流中的信息读取到缓冲区内
                while ((len = in.read(buffer)) > 0) {
                    //使用FileOutputStream输出流将缓冲区内的写到指定的目录中
                    out.write(buffer, 0, len);
                }
                //关闭输入流
                in.close();
                //关闭输出流
                out.close();
                //删除临时文件
                item.delete();
                message = "文件上传成功";
            }
        }
    } catch (FileUploadException e) {
        message = "文件上传失败";
        e.printStackTrace();
    }
    request.setAttribute("message", message);
    request.getRequestDispatcher("/NewFile.jsp").forward(request, response);
}

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

}
“`亲测有效

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值