简单的java图片存储方法

来源:互联网 发布:大学专业知乎 编辑:程序博客网 时间:2024/06/04 20:07
Controller中
//调用
ReceivePIC.receivePIC(request, response);

//封装的方法
package com.jwwl.fsq.util;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
//存储图片到本地相应位置
public class ReceivePIC {
public static void receivePIC(HttpServletRequest request,HttpServletResponse response) {
//获取当前时间,按照时间分成不同的文件夹
Date now=new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");//可以方便地修改日期格式
String day=dateFormat.format(now);
//获取服务器所在URL地址(相对路径,数据库中储存的地址)
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath()+"/upload/"+day;
String path = Thread.currentThread().getContextClassLoader().getResource("/").getPath(); // 服务器的绝对路径,在web-inf中的class里
path= new File(new File(path).getParent()).getParent()+"/upload/"+day;  //取得图片储存路径的绝对路径以储存图片
File file=new File(path);  // 图片储存路径地址
//如果地址文件夹不存在则创建   
if  (!file.exists() && !file.isDirectory())     
   
  System.out.println("//不存在"); 
  file.mkdirs();   
} else 
  System.out.println("//目录存在"); 
}
// 获得磁盘文件条目工厂。
DiskFileItemFactory factory = new DiskFileItemFactory();
// String path = "./WebRoot/upload"+day;
// 设置暂时存放文件的存储室,这个存储室可以和最终存储文件的文件夹不同。因为当文件很大的话会占用过多内存所以设置存储室。
factory.setRepository(new File(path));
// 设置缓存的大小,当上传文件的容量超过缓存时,就放到暂时存储室。
factory.setSizeThreshold(1024 * 1024);
// 上传处理工具类(高水平API上传处理?)
ServletFileUpload upload = new ServletFileUpload(factory);
try {
// 调用 parseRequest(request)方法 获得上传文件 FileItem 的集合list 可实现多文件上传。
List list = (List) upload
.parseRequest(request);
for (FileItem item : list) {
// 获取表单属性名字。
String name = item.getFieldName();
// 如果获取的表单信息是普通的文本信息。即通过页面表单形式传递来的字符串。
if (item.isFormField()) {
// 获取用户具体输入的字符串,
String value = item.getString();
request.setAttribute(name, value);
}
// 如果传入的是非简单字符串,而是图片,音频,视频等二进制文件。
else {
// 获取路径名
String value = item.getName();
// 取到最后一个反斜杠。
int start = value.lastIndexOf("\\");
// 截取上传文件的字符串名字。+1是去掉反斜杠。
String filename = value.substring(start + 1);
request.setAttribute(name, basePath + "/" + filename);
// 收到写到接收的文件中。
OutputStream out1 = new FileOutputStream(new File(path,
filename));
InputStream in = item.getInputStream();
int length = 0;
byte[] buf = new byte[1024];
System.out.println("获取文件总量的容量:" + item.getSize());
while ((length = in.read(buf)) != -1) {
out1.write(buf, 0, length);
}
in.close();
out1.close();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
原创粉丝点击