java文件上传

2022-10-28 15:31:09 浏览数 (1)

简介: java文件上传

1.Commons-FileUpload简介

(1)Commons-FileUpload组件

Commons是Apache开放源代码组织的一个Java子项目,其中的FileUpload是用来处理HTTP文件上传的子项目

(2)Commons-FileUpload组件特点    

使用简单:可以方便地嵌入到JSP文件中,编写少量代码即可完成文件的上传功能 能够全程控制上传内容 能够对上传文件的大小、类型进行控制

2.Commons-FileUpload组件应用

注意:上传文件时form标签的method属性必须设置为“post”,不能设置为“get”

(1)环境准备

在项目中引入commons-fileupload-1.2.2.jar和commons-io-2.4.jar文件

(2)设置表单的enctype属性

代码语言:javascript复制
<form enctype="multipart/form-data" method="post">

(3)在表单中使用File控件选择文件

代码语言:javascript复制
<input type="file" name="nfile" />

3.ServletFileUpload类的常用方法

方法名称

方法描述

public void setSizeMax (long  sizeMax)

设置请求信息实体内容的最大允许的字节数

public  List  parseRequest (                         HttpServletRequest  req)

解析form表单中的每个字符的数据,返回一个FileItem对象集合

public static final boolean isMultipartContent(HttpServletRequest req)

判断请求信息中的内容 是否是multipart/form-data类型

public  void  setHeaderEncoding (                                      String  encoding)

设置转换时所使用的字符集编码

4.FileItem接口的常用方法

方法名称

方法描述

public  boolean  isFormField( )

判断FileItem对象封装的数据类型(普通表单字段返回true,文件表单字段返回false)

public  String  getName( )

获得文件上传字段中的文件名(普通表单字段返回null)

public  String  getFieldName( )

返回表单字段元素的name属性值

public  void  write( )

将FileItem对象中保存的主体内容保存到指定的文件中

public  String  getString( )

将FileItem对象中保存的主体内容以一个字符串返回。其重载方法public  String  getString(String encoding)中的参数用指定的字符集编码方式

public  long  getSize( )

返回单个上传文件的字节数

5.FileItemFactory接口

实现类:DiskFileItemFactory

方法名称

方法描述

public void  setSizeThreshold(int sizeThreshold)

设置内存缓冲区的大小

public void  setRepositoryPath(String path)

设置临时文件存放的目录

6.fileupload上传示例

工具类

代码语言:javascript复制
package utils;

import java.io.File;
import java.io.PrintWriter;
import java.util.Iterator;
import java.util.List;
import java.util.UUID;

import javax.servlet.http.HttpServletRequest;

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

import entity.News;

public class FileUpload {
    public News fileUpload(HttpServletRequest request, String uploadPath) {
        News news = new News();

        // 上传的文件名
        String uploadFileName = "";
        // 表单字段元素的属性值
        String filedName = "";
        // 请求信息中的内容是否是multipart类型
        boolean isMultipart = ServletFileUpload.isMultipartContent(request);

        // 上传文件的存储路径(服务器文件系统上的绝对路径)
//      String uploadPath = request.getSession().getServletContext().getRealPath("/upload");
//      uploadPath = "D:\study\news_backstage\src\main\webapp\img\images";
        // 判断是否是带multipart类型文件上传的表单
        if (isMultipart) {
            FileItemFactory factory = new DiskFileItemFactory();
            ServletFileUpload upload = new ServletFileUpload(factory);

            try {
                // 解析form表单中所有文件对象
                List<FileItem> items = upload.parseRequest(request);

                // 迭代FileItem
                Iterator<FileItem> iter = items.iterator();

                // 循环迭代
                while (iter.hasNext()) {
                    FileItem item = iter.next();

                    // 如果是普通表单字段
                    if (item.isFormField()) {
                        filedName = item.getFieldName();
                        if ("title".equals(filedName)) {
                            // 输出姓名普通字段
                            news.setTitle(item.getString("UTF-8"));
//                          out.print(item.getString("UTF-8") "上传了文件<br/>");

                        } else if ("author".equals(filedName)) {
                            news.setAuthor(item.getString("UTF-8"));

                        } else if ("content".equals(filedName)) {
                            news.setContent(item.getString("UTF-8"));

                        } else if ("typeId".equals(filedName)) {
                            news.setTypeId(Integer.parseInt(item.getString("UTF-8")));
                        }

                        // 如果是文件表单字段
                    } else {
                        String fileNames = item.getFieldName();
                            //如果是小图片

                            if ("smImg".equals(fileNames)) {
                            String fileNameSm = item.getName();
                            if (fileNameSm != null && !"".equals(fileNameSm)) {
                                uploadFileName = UUID.randomUUID().toString().replaceAll("-", "")   fileNameSm;
                                File saveFile = new File(uploadPath, uploadFileName);
                                item.write(saveFile);
                                news.setSmImg(uploadFileName);
                            }
                        //如果大是图片                            
                        } else if ("laImg".equals(fileNames)) {
                            String fileNameLa = item.getName();
                            if (fileNameLa != null && !"".equals(fileNameLa)) {
                                uploadFileName = UUID.randomUUID().toString().replaceAll("-", "")   fileNameLa;
                                File saveFile = new File(uploadPath, uploadFileName);
                                item.write(saveFile);
                                news.setLaImg(uploadFileName);
                            }
                        }
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return news;
    }
}

0 人点赞