javaWeb实战教程5-fileupload文件上传

javaWeb实战教程


2.8 commons-fileupload文件上传

Servlet 可以与 HTML form 标签一起使用,来允许用户上传文件到服务器。上传的文件可以是文本文件或图像文件或任何文档。需要引入的 jar 文件:commons-fileupload-1.3.2commons-io-2.4.jar

在网站根目录WebContent下新建html:lesson8_fileupload.html,写入一个文件上传的表单:

<form action="Lesson8FileUpload" method="post" enctype="multipart/form-data">
    文件1:<input type="file" name="uploadFile1" /><br/>
    文件2:<input type="file" name="uploadFile2" /><br/>
    姓名:<input type="text" name="username" /><br/>
    年龄:<input type="text" name="age" /><br/>
    <input type="submit" value="上传" /><br/>
</form>

在cn.funsoftware.Lesson.servlet新建一个类Lesson8FileUpload.java:

@WebServlet("/Lesson8FileUpload")
public class Lesson8FileUpload extends HttpServlet {

    @Override
    protected void doPost
    (HttpServletRequest request, HttpServletResponse response) throws ServletException,
            IOException {
    }
}

先判断提交的表单是不是文件上传类型:

ServletFileUpload.isMultipartContent(request)//判断表单是否是文件上传

配置上传参数:

DiskFileItemFactory factory = new DiskFileItemFactory();// 配置上传参数

新建ServletFileUpload

ServletFileUpload fileUpload = new ServletFileUpload(factory);
fileUpload.setHeaderEncoding("utf-8");// 设置编码

request交给ServletFileUpload处理,获得表单数据:

List<FileItem> fileItems = fileUpload.parseRequest(request);

循环遍历fileItems里的元素,通过fileItem.isFormField()方法判断参数是文本还是文件,文本的话可以通过getFieldName()来获得文本名称,getString()获得文本内容;如果是文件的话,可以使用write()方法写入文件中。

完整的文件上传代码写在doPost方法内:

if (!ServletFileUpload.isMultipartContent(request)) {
    response.getOutputStream().write("不是文件上传表单".getBytes());
    return;
}
// 配置上传参数
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload fileUpload = new ServletFileUpload(factory);
fileUpload.setHeaderEncoding("utf-8");// 设置编码
try {
    List<FileItem> fileItems = fileUpload.parseRequest(request);
    if (fileItems == null) {
        response.getOutputStream().write("表单里没有上传任何文件".getBytes());
        return;
    }
    for (FileItem fileItem : fileItems) {
        if (fileItem.isFormField()) {// 是文本
            System.out.println(fileItem.getFieldName() + ":" + fileItem.getString());
        } else {// 是文件
            String uploadPath = request.getServletContext().getRealPath("./") + File.separator
                + "upload";
             // 如果目录不存在则创建
               File uploadDir = new File(uploadPath);
               if (!uploadDir.exists()) {
                   uploadDir.mkdir();
               }
            String fileName = new File(fileItem.getName()).getName();
            String filePath = uploadPath + File.separator + fileName;
            File storeFile = new File(filePath);
            // 在控制台输出文件的上传路径
            System.out.println(filePath);
            // 保存文件到硬盘
            fileItem.write(storeFile);
            System.out.println("文件"+fileItem.getFieldName()+"上传成功");
        }
    }
} catch (Exception e) {
    e.printStackTrace();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值