上传文件功能:
如果用上传文件功能:JSP页面的写法
1,必须有一个form表单
2,必须有一个input框 type="file"
3,必须修改form表单的提交方式为post
4,必须修改form表单的enctype类型改为:
5,原有的request.getParameter()方法全部失效
1,创建磁盘工厂
2,使用文件工厂创建输入流 文件上传转换对象
3,使用文件上传对象的parse方法解析请求中的数据流
4,在解析出来之后 返回一个list集合 集合中装有解析好的 fileItem
5,遍历fileItem集合,
fileItem提供了一些方法
//提供了API获取参数的名字
//获取当前文件项是否是普通输入框类型
//获取当前文件项值
1,文件同名覆盖的问题
随机生成文件名
2,一个文件夹下 小文件太多的问题
分割文件夹
3,不同浏览器对于文件名路径保留问题
如果用上传文件功能: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);
}
}