文件上传转存的工具类uploadUtil工具类写法

上传文件功能:
如果用上传文件功能:JSP页面的写法
1,必须有一个form表单
2,必须有一个input框 type="file"
3,必须修改form表单的提交方式为post
4,必须修改form表单的enctype类型改为:
5,原有的request.getParameter()方法全部失效
<form action="/testdemo/upload" method="post" enctype="multipart/form-data">
		姓名:<input type="text" name="username"><br><br>
		头像:<input type="file" name="avatar" ><br><br>
		<input type="submit" value="提交按钮">
	</form>
使用apache提供fileupload的工具包
1,创建磁盘工厂
2,使用文件工厂创建输入流 文件上传转换对象
3,使用文件上传对象的parse方法解析请求中的数据流
4,在解析出来之后 返回一个list集合 集合中装有解析好的 fileItem
5,遍历fileItem集合,
fileItem提供了一些方法
//提供了API获取参数的名字
//获取当前文件项是否是普通输入框类型
//获取当前文件项值

//获取当前文件项如果是文件项 获取文件流

request.setCharacterEncoding("utf8");
		//新建一个磁盘工厂
		DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
		//使用文件磁盘工厂创建上传文件对象
		FileUpload fileUpload=new FileUpload((FileItemFactory) diskFileItemFactory);
		//使用文件上传对象的parse方法去解析请求数据流
		try {
			List<FileItem> list = fileUpload.parseRequest(request);
			for (FileItem fileItem : list) {
				if (fileItem.isFormField()) {
					//如果输入的流是普通输入流
					String fileName = fileItem.getFieldName();
					String value = fileItem.getString("UTF-8");
					System.out.println("输入的参数名是:"+fileName+"=====参数的值为:"+value);
				}else {
					//是文件上传类型
					String name =fileItem.getName();
					InputStream input = fileItem.getInputStream();
					FileOutputStream output = new FileOutputStream("E:/ccc/"+UUIDUtil.getId()+name.substring(name.indexOf(".")));
					//使用IOUtils复制文件
					IOUtils.copy(input, output);
					output.close();
					input.close();	
				}
			}	
		} catch (FileUploadException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			System.out.println("系统错误");
		}
上传文件的问题:
1,文件同名覆盖的问题
随机生成文件名
2,一个文件夹下 小文件太多的问题
分割文件夹
3,不同浏览器对于文件名路径保留问题

截取字符串 不要前面的磁盘路径

为了长久解决以上问题,就创建了一个工具类来完成以上问题的封装


import java.util.Random;
import java.util.UUID;

public class UploadUtils {
	/**
	 * 获取文件真实名称
	 * 由于浏览器的不同获取的名称可能为:c:/upload/1.jpg或者1.jpg ---123aas.jpg
	 * 最终获取的为  1.jpg
	 * @param name 上传上来的文件名称
	 * @return	真实名称
	 */
	public static String getRealName(String name){
		//获取最后一个"/"
		int index = name.lastIndexOf("\\");
		return name.substring(index+1);
	}
	/**
	 * 获取随机名称
	 * @param realName 真实名称
	 * @return uuid 随机名称
	 */
	public static String getUUIDName(String realName){
		//realname  可能是  1.jpg   也可能是  1
		//获取后缀名
		int index = realName.lastIndexOf(".");
		if(index==-1){
			return UUID.randomUUID().toString().replace("-", "").toUpperCase();
		}else{
			return UUID.randomUUID().toString().replace("-", "").toUpperCase()+realName.substring(index);
		}
	}
	/**
	 * 获取文件目录,可以获取256个随机目录
	 * @return 随机目录
	 */
	public static String getDir(){
		String s="0123456789ABCDEF";
		Random r = new Random();
		return "/"+s.charAt(r.nextInt(16))+"/"+s.charAt(r.nextInt(16));
	}
	
	public static void main(String[] args) {
		//String s="G:\\day17-基础加强\\resource\\1.jpg";
		/*String s="1.jgp";
		String realName = getRealName(s);
		System.out.println(realName);
		
		String uuidName = getUUIDName(realName);
		System.out.println(uuidName);*/
		
		String dir = getDir();
		System.out.println(dir);
	}
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值