java文件上传

简介: 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属性

<form enctype="multipart/form-data" method="post">

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

<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上传示例

工具类

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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

over℡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值