springboot单文件下载和多文件压缩zip下载的实现

网友投稿 775 2023-03-15

springboot单文件-和多文件压缩zip-的实现

springboot单文件-和多文件压缩zip-的实现

单文件-

//-单个文件

public void downloadFile(HttpServletResponse response){

String path = "D:\test\ce\1.txt"

File file = new File(path);

if(file.exists()){

String fileName = file.getName();

response.setHeader("Content-Disposition", "attachment;fileName=" + fileName);

download(response,file);

}

}

public void download(HttpServletResponse response,File file){

FileInputStream fis = null;

BufferedInputStream bis = null;

OutputStream os = null;

try {

os = response.getOutputStream();

fis = new FileInputStream(file);

bis = new BufferedInputStream(fis);

byte[] buffer = new byte[bis.available()];

int i = bis.read(buffer);

while(i != -1){

os.write(buffer, 0, i);

i = bis.read(buffer);

}

} catch (Exception e) {

e.printStackTrace();

}

try {

bis.close();

fis.close();

os.close();

} catch (IOException e) {

e.printStackTrace();

}

}

多文件压缩-

//多个文件,压缩成zip后-

public void downloadMoreFile(HttpServletResponse response) {

String test1= "D:\test\ce\1.http://txt";

String test2= "D:\test\ce\2.txt";

File tfile= new File(test1);

File cfile= new File(test2);

List files = new ArrayList<>();

files.add(tfile);

files.add(cfile);

if (tfile.exists() && cfile.exists()) {

String zipTmp = "D:\test\ce\1.zip";

zipd(zipTmp,files,response);

}

}

public void zipd(String zipTmp,List files,HttpServletResponse response){

File zipTmpFile = new File(zipTmp);

try {

if (zipTmpFile.exists()) {

zipTmpFile.delete();

}

zipTmpFile.createNewFile();

response.reset();

// 创建文件输出

FileOutputStream fous = new FileOutputStream(zipTmpFile);

ZipOutputStream zipOut = new ZipOutputStream(fous);

zhttp://ipFile(files, zipOut);

zipOut.close();

fous.close();

downloadZip(zipTmpFile, response);

} catch (IOException e) {

e.printStackTrace();

}

}

//files打成压缩包

public void zipFile(List files, ZipOutputStream outputStream) {

int size = files.size();

for (int i = 0; i < size; i++) {

File file = (File) files.get(i);

zipFile(file, outputStream);

}

}

public void zipFile(File inputFile, ZipOutputStream ouputStream) {

try {

if (inputFile.exists()) {

if (inputFile.isFile()) {

FileInputStream IN = new FileInputStream(inputFile);

BufferedInputStream bins = new BufferedInputStream(IN, 512);

ZipEntry entry = new ZipEntry(inputFile.getName());

ouputStream.putNextEntry(entry);

int nNumber;

byte[] buffer = new byte[512];

while ((nNumber = bins.read(buffer)) != -1) {

ouputStream.write(buffer, 0, nNumber);

}

bins.close();

IN.close();

} else {

try {

File[] files = inputFile.listFiles();

for (int i = 0; i < files.length; i++) {

zipFile(files[i], ouputStream);

}

} catch (Exception e) {

e.printStackTrace();

}

}

}

} catch (Exception e) {

e.printStackTrace();

}

}

public static HttpServletResponse downloadZip(File file, HttpServletResponse response) {

if (file.exists() == false) {

System.out.println("待压缩的文件目录:" + file + "不存在.");

} else {

try {

// 以流的形式-文件。

InputStream fis = new BufferedInputStream(new FileInputStream(file.getPath()));

byte[] buffer = new byte[fis.available()];

fis.read(buffer);

fis.close();

// 清空response

response.reset();

OutputStream toClient = new BufferedOutputStream(response.getOutputStream());

response.setContentType("application/octet-stream");

// 如果输出的是中文名的文件,在此处就要用URLEncoder.encode方法进行处理

response.setHeader("Content-Disposition",

"attachment;filename=" + new String(file.getName().getBytes("GB2312"), "ISO8859-1"));

toClient.write(buffer);

toClient.flush();

toClient.close();

} catch (Exception ex) {

ex.printStackTrace();

} finally {

try {

File f = new File(file.getPath());

f.delete();

} catch (Exception e) {

e.printStackTrace();

}

}

}

return response;

}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:支付宝小程序uniapp(支付宝小程序商家入驻)
下一篇:微信小程序插件(webstorm微信小程序插件)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~