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属性

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

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

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

工具类

packageutils;
importjava.io.File;
importjava.io.PrintWriter;
importjava.util.Iterator;
importjava.util.List;
importjava.util.UUID;
importjavax.servlet.http.HttpServletRequest;
importorg.apache.commons.fileupload.FileItem;
importorg.apache.commons.fileupload.FileItemFactory;
importorg.apache.commons.fileupload.disk.DiskFileItemFactory;
importorg.apache.commons.fileupload.servlet.ServletFileUpload;
importentity.News;
publicclassFileUpload {
publicNewsfileUpload(HttpServletRequestrequest, StringuploadPath) {
Newsnews=newNews();
// 上传的文件名StringuploadFileName="";
// 表单字段元素的属性值StringfiledName="";
// 请求信息中的内容是否是multipart类型booleanisMultipart=ServletFileUpload.isMultipartContent(request);
// 上传文件的存储路径(服务器文件系统上的绝对路径)//      String uploadPath = request.getSession().getServletContext().getRealPath("/upload");//      uploadPath = "D:\\study\\news_backstage\\src\\main\\webapp\\img\\images";// 判断是否是带multipart类型文件上传的表单if (isMultipart) {
FileItemFactoryfactory=newDiskFileItemFactory();
ServletFileUploadupload=newServletFileUpload(factory);
try {
// 解析form表单中所有文件对象List<FileItem>items=upload.parseRequest(request);
// 迭代FileItemIterator<FileItem>iter=items.iterator();
// 循环迭代while (iter.hasNext()) {
FileItemitem=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/>");                        } elseif ("author".equals(filedName)) {
news.setAuthor(item.getString("UTF-8"));
                        } elseif ("content".equals(filedName)) {
news.setContent(item.getString("UTF-8"));
                        } elseif ("typeId".equals(filedName)) {
news.setTypeId(Integer.parseInt(item.getString("UTF-8")));
                        }
// 如果是文件表单字段                    } else {
StringfileNames=item.getFieldName();
//如果是小图片if ("smImg".equals(fileNames)) {
StringfileNameSm=item.getName();
if (fileNameSm!=null&&!"".equals(fileNameSm)) {
uploadFileName=UUID.randomUUID().toString().replaceAll("-", "") +fileNameSm;
FilesaveFile=newFile(uploadPath, uploadFileName);
item.write(saveFile);
news.setSmImg(uploadFileName);
                            }
//如果大是图片                                                    } elseif ("laImg".equals(fileNames)) {
StringfileNameLa=item.getName();
if (fileNameLa!=null&&!"".equals(fileNameLa)) {
uploadFileName=UUID.randomUUID().toString().replaceAll("-", "") +fileNameLa;
FilesaveFile=newFile(uploadPath, uploadFileName);
item.write(saveFile);
news.setLaImg(uploadFileName);
                            }
                        }
                    }
                }
            } catch (Exceptione) {
e.printStackTrace();
            }
        }
returnnews;
    }
}
相关文章
|
6月前
|
存储 Java 文件存储
|
1月前
|
存储 前端开发 Java
Java后端如何进行文件上传和下载 —— 本地版(文末配绝对能用的源码,超详细,超好用,一看就懂,博主在线解答) 文件如何预览和下载?(超简单教程)
本文详细介绍了在Java后端进行文件上传和下载的实现方法,包括文件上传保存到本地的完整流程、文件下载的代码实现,以及如何处理文件预览、下载大小限制和运行失败的问题,并提供了完整的代码示例。
493 1
|
1月前
|
Java
java 文件上传和下载
java 文件上传和下载
21 0
|
4月前
|
Java
java 文件上传 :MultipartFile 类型转换为file类型
java 文件上传 :MultipartFile 类型转换为file类型
178 9
|
4月前
|
缓存 前端开发 Java
在Java项目中实现高性能的文件上传下载
在Java项目中实现高性能的文件上传下载
|
4月前
|
前端开发 安全 Java
如何在Java中实现高效率的文件上传和下载
如何在Java中实现高效率的文件上传和下载
|
4月前
|
缓存 安全 Java
使用Java实现高性能的文件上传下载服务
使用Java实现高性能的文件上传下载服务
|
4月前
|
Java Apache UED
如何在Java中实现文件上传?
如何在Java中实现文件上传?
|
5月前
|
前端开发 Java 数据安全/隐私保护
如何在Java中实现文件上传和下载?
如何在Java中实现文件上传和下载?
|
5月前
|
Java
java使用多线程编写服务端与客户端文件上传程序
java使用多线程编写服务端与客户端文件上传程序
下一篇
无影云桌面