import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.multipart.commons.CommonsMultipartFile;
public class UploadUtil {
/**
* 上传附件
*/
public static String uploadFile(CommonsMultipartFile cFile,
String newAddress) {
if (cFile == null) {
return "";
}
String baseDir = ReadProUtil.getValue(newAddress);
// baseDir.substring(baseDir.lastIndexOf("\\")+1);
String pathName = "";
String tid_str = "";
String tid = String.valueOf(System.currentTimeMillis());
Date dt = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy");
tid_str = sdf.format(dt);
String base = baseDir + "\\" + tid_str + "\\" + tid;
File file = new File(base);
if (!file.exists()) {
file.mkdirs();
}
if (cFile != null) {
String upload = cFile.getFileItem().getName();// 取的上传文件的完整路径
if ("".equals(upload) || upload == null) {
return "";
}
String filepath = base + "\\"
+ upload.substring(upload.lastIndexOf('\\') + 1);
pathName = "\\" + tid_str + "\\" + tid + "\\"
+ upload.substring(upload.lastIndexOf('\\') + 1);
File uploadedFile = new File(filepath);
try {
FileCopyUtils.copy(cFile.getBytes(), uploadedFile);
System.out.println(filepath);
} catch (IOException e) {
e.printStackTrace();
}
}
return pathName;
}
/**
* 资料下载
*
* @param name
* @param resp
* @param base
* @throws Exception
*/
public static void readdocument(String fjdz, HttpServletResponse resp,
String base) throws Exception {
String suffix = fjdz.substring(fjdz.lastIndexOf('.') + 1); // 取得上传文件后缀名
// 设置文件输出流
File file = new File(base + fjdz);
if (file.exists()) {
String filename = URLEncoder.encode(
fjdz.substring(fjdz.lastIndexOf('\\') + 1), "utf-8");
resp.reset();
// resp.setHeader("Cache-Control", "no-cache");//不设置缓存
// resp.setHeader("Expires", "0");//应该认为什么时候过期不在缓存它
// resp.setContentType("application/smil");// 设置响应头部的文件信息
resp.setContentType(getContentType(suffix));
resp.addHeader("Content-Disposition", "attachment; filename=\""
+ filename + "\"");// 下载文件保存的名称
int fileLength = (int) file.length();
resp.setHeader("Content-Length", String.valueOf(fileLength));
// response.setContentLength(fileLength);//作用同res.setHeader("Content-Length",
// String.valueOf(fileLength));
/* 如果文件长度大于0 */
if (fileLength != 0) {
/* 创建输入流 */
InputStream in = new FileInputStream(file);
byte[] buf = new byte[4096];
/* 创建输出流 */
ServletOutputStream out = resp.getOutputStream();
int readLength;
while (((readLength = in.read(buf)) != -1)) {
out.write(buf, 0, readLength);
}
in.close();
out.flush();
out.close();
}
}
}
public static String getContentType(String key) {
HashMap<String, String> mimeTypes = new HashMap<String, String>();
// Image
mimeTypes.put("gif", "image/gif");
mimeTypes.put("jpg", "image/jpeg");
mimeTypes.put("jpeg", "image/jpeg");
mimeTypes.put("jpe", "image/jpeg");
mimeTypes.put("tif", "image/tiff");
mimeTypes.put("png", "image/png");
mimeTypes.put("ief", "image/ief");
mimeTypes.put("bmp", "image/bmp");
mimeTypes.put("ras", "image/x-cmu-raster");
mimeTypes.put("pnm", "image/x-portable-anymap");
mimeTypes.put("pbm", "image/x-portable-bitmap");
mimeTypes.put("pgm", "image/x-portable-graymap");
mimeTypes.put("ppm", "image/x-portable-pixmap");
mimeTypes.put("rgb", "image/x-rgb");
mimeTypes.put("xbm", "image/x-xbitmap");
mimeTypes.put("xpm", "image/x-xpixmap");
mimeTypes.put("xwd", "image/x-xwindowdump");
// Publish Docuement Format
mimeTypes.put("pdf", "application/pdf");
mimeTypes.put("doc", "application/msword");
mimeTypes.put("xls", "application/vnd.ms-excel");
mimeTypes.put("ppt", "application/vnd.ms-powerpoint");
mimeTypes.put("txt", "text/plain");
mimeTypes.put("djvu", "application/djvu");
return mimeTypes.get(key.toLowerCase());
}
其中cFile是通过控制器中MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
CommonsMultipartFile cFile = (CommonsMultipartFile) multipartRequest
.getFile("filename");传过去的参数。newAddress是资源文件中的名字,用户获取目录。返回附件地址用于存到数据库。