文件下载
/**
* 文件上传
*/
@RequestMapping("registerEmployee")
public String registerEmployee(String ename,String hiredate,MultipartFile photo,HttpServletRequest req) throws IllegalStateException, IOException{
//获取文件名
String file_name=photo.getOriginalFilename();
//获取文件后缀名
String pre_file=FilenameUtils.getExtension(file_name);
//随机生成名字
String base_name=UUID.randomUUID().toString();
file_name=base_name+"."+pre_file;
if(!photo.isEmpty()){
photo.transferTo(new File("d:\\pingbao\\"+file_name));
}
}
/**
* 生成下载文件
* filename为要下载的文件名
*/
public static void generateDownloadFile(String filename,HttpServletRequest request,HttpServletResponse response){
File file = new File(filename);
try {
InputStream ins = new FileInputStream(file);
BufferedInputStream bins = new BufferedInputStream(ins);
OutputStream outs = response.getOutputStream();
BufferedOutputStream bouts = new BufferedOutputStream(outs);
response.setContentType("application/x-download");
response.setHeader("Content-disposition","attachment;filename="+URLEncoder.encode(file.getName(), "UTF-8"));
int bytesRead = 0;
byte[] buffer = new byte[8192]; // 开始向网络传输文件流
while ((bytesRead =bins.read(buffer, 0, 8192)) != -1) {
bouts.write(buffer, 0, bytesRead);
}
bouts.flush();
ins.close();
bins.close();
bouts.close();
}catch (IOException e) {
e.printStackTrace();
}
}
多个文件打包
public static String multipleFilesToZip(String[] filename,String path){
// 随机生成名字
String base_name = UUID.randomUUID().toString();
String fileZip = base_name + ".zip"; // 拼接zip文件
String filepath = path+"\\" + fileZip;
File files[] = new File[filename.length];
for (int i = 0; i < filename.length; i++) {
files[i] = new File(filename[i]);
}
// 创建压缩文件
try {
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(filepath));
ZipOutputStream zos = new ZipOutputStream(bos);
ZipEntry ze = null;
for (int i = 0; i < files.length; i++) {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(files[i]));
ze = new ZipEntry(files[i].getName());
zos.putNextEntry(ze);
int s = -1;
while ((s = bis.read()) != -1) {
zos.write(s);
}
bis.close();
}
zos.flush();
zos.close();
} catch (IOException e) {
e.printStackTrace();
}
return filepath;
}
文件删除(多文件)
/**
* 递归删除目录下的所有文件及子目录下所有文件
* @param dir 将要删除的文件目录
*/
public static boolean deleteDir(File dir) {
if (dir.isDirectory()) {
String[] children = dir.list();
//递归删除目录中的子目录下
for (int i=0; i<children.length; i++) {
boolean success = deleteDir(new File(dir, children[i]));
if (!success) {
return false;
}
}
}
// 目录此时为空,可以删除
return dir.delete();
}
/**
* 生成下载文件
* filename为要下载的文件名
*/
第二种下载方式FileUtils
@RequestMapping("/download")
public void excuteDownload(String path,HttpServletResponse res){
// 文件名
String fileName = path.substring(path.lastIndexOf("/")+1);
res.setCharacterEncoding("UTF-8");
OutputStream os = null;
try {
os= res.getOutputStream();
res.reset();
res.setHeader("Content-Disposition", "attachment; filename="+new String(fileName.getBytes("gb2312"), "ISO8859-1") );
res.setContentType("application/octet-stream; charset=GBK");
File file = new File(path);
os.write(FileUtils.readFileToByteArray(file));
os.flush();
}catch(Exception e){
e.printStackTrace();
}
finally {
if (os != null) {
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}