第二十九节上传下载

上传文件
要配置enctype=”multipart/form-data”
(maxFileSize=1024*1024*500,maxRequestSize=1024*1024*1000,fileSizeThreshold=1024*1024)
1 上传文件配置
@MultipartConfig(maxFileSize=1024*1024*500,maxRequestSize=1024*1024*1000,fileSizeThreshold=1024*1024,location=”d:\temp”)
maxFileSize :控制单个文件的大小 如果为-1 没有限制
maxRequestSize: 控制整个表单的大小 ,如果-1 没有限制
fileSizeThreshold :控制缓存的初始大小 ,如果文件没有超过缓存大小,不使用缓存目录 默认 0 不使用缓存目录
location:缓存目录位置
2 控制文件的存放位置 (防止一个文件夹中的文件太多)
2.1 根据日期
2.2 根据用户名
2.3 随机存放
3 如果没有上传文件 要判断文件是否为空
4 随机生成文件名
5 控制上传的文件类型
文件的上传下载
文件上传
方式一:使用servlet3.0上传
方式二:使用commons-fileupload(未介绍)
文件下载
要下载的文件可以是各种类型的文件,所以要将文件传送给客户端,其相应的内容应该被当做二进制来处理,所以应该调用response.getOutputStream()方法返回SevletOutputStream对象来向客户端
写入文件内容
上传核心代码
public String makeDir(String path,String filename){
int hashcode=filename.hashCode();//获取文件文件名的哈希码
String hex=Integer.toHexString(hashcode);将哈希码转换位16进制的字符串
int k=hex.length(); 字符串的长度,固定为8
for(int i=0;i<8-k;i++){ 位数不足8补0
hex=”0”+hex;
}
String realpath=path+”\”+hex.charAt(0)+”\”+hex.charAt(1);创建2级目录
File dir=new File(realpath); 创建文件
if(!dir.exists()){判断是否存在
dir.mkdirs();不存在 创建多级目录
}
return realpath;返回 文件目录
}
public String makeFileName(String filename){
return UUID.randomUUID().toString()+”_”+filename;为了防止上传文件名重名
Servlet文件中核心代码
request.setCharacterEncoding(“utf-8”);
response.setContentType(“text/html;charset=utf-8”);
String filepath=request.getServletContext().getRealPath(“WEB-INF/upload”);获取根目录
Collection parts=request.getParts();获取所有部分
if(parts!=null){ 判断parts不为空
for (Part part : parts) { 遍历parts
if(part.getSubmittedFileName()!=null){
String filename=part.getSubmittedFileName();
System.out.println(filename);
if(filename==null||filename.trim().equals(“”)){
continue;
}
String realpath=makeDir(filepath, filename);
String realFileName=makeFileName(filename);
part.write(realpath+”/”+realFileName);
}else{
System.out.println(part.getName());
System.out.println(request.getParameter(part.getName()));
}
}
}

文件下载核心代码
文件列表
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String filepath = this.getServletContext().getRealPath(“/WEB-INF/upload”);
Map map = new HashMap();
listfile(new File(filepath),map);
request.setAttribute(“map”, map);
request.getRequestDispatcher(“/listfile.jsp”).forward(request, response);
}
public void listfile(File file,Map map){
if(!file.isFile()){
File files[] = file.listFiles();
for(File f : files){
listfile(f,map);
}
}else{
String realname = file.getName().substring(file.getName().indexOf(“_”)+1); //fawegwefwaega_xxx_wfwe.avi
map.put(file.getName(), realname);
}
}
下载servlet代码
String filename = request.getParameter(“filename”);
System.out.println(filename);
String realname = filename.substring(filename.indexOf(“_”)+1);截取获得
resp.setHeader(“content-disposition”, “attachment;filename=”+URLEncoder.encode(realname));
String path = makePath(realname,this.getServletContext().getRealPath(“/WEB-INF/upload”));
System.out.println(path + “\” + filename);
File file = new File(path + “\” + filename);
if(!file.exists()){
request.setAttribute(“message”, “下载的文件不存在”);
request.getRequestDispatcher(“/message.jsp”).forward(request, response);
return;
}
response.setHeader(“content-disposition”, “attachment;filename=” + URLEncoder.encode(realname, “UTF-8”));
FileInputStream in = new FileInputStream(path + “\” + filename);
OutputStream out = response.getOutputStream();
byte buffer[] = new byte[1024];
int len = 0;
while((len=in.read(buffer))>0){
out.write(buffer, 0, len);
}
in.close();
out.close();

类加载器负责将 .class 文件加载到内存中, 并为之生成对应的 java.lang.Class 对象
}当 JVM 启动时,会形成由三个类加载器组成的初始类加载器层次结构:

}

你可能感兴趣的:(Java基础,java学习之路)