package com.zjxnjz.mall.modular.download.controller;
import java.io.BufferedInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import com.aliyun.oss.OSSClient;
import com.zjxnjz.mall.core.util.OssClientFactory;
/**
*
* @author ljj 文件下载
*
*/
@Controller
@RequestMapping("/download")
public class DownLoadController {
/**
* 模板下载
*
* @param name
*/
@GetMapping(value = "/filedownload")
public void fileDownLoad(@RequestParam(value = "ossUrl", required = true) String ossUrl,
HttpServletResponse response, HttpServletRequest request) {
try {
String fileName = ossUrl.substring(ossUrl.lastIndexOf("/")+1);
OSSClient client = OssClientFactory.getOssClient();
InputStream inputStream = client
.getObject(OssClientFactory.bucketName, OssClientFactory.getOssUrlKey(ossUrl)).getObjectContent();
String userAgent = request.getHeader("USER-AGENT");
if (StringUtils.contains(userAgent, "MSIE")) {// IE浏览器
fileName = URLEncoder.encode(fileName, "UTF-8");
} else if (StringUtils.contains(userAgent, "Mozilla")) {// google,火狐浏览器
fileName = new String(fileName.getBytes(), "ISO8859-1");
} else {
fileName = URLEncoder.encode(fileName, "UTF-8");// 其他浏览器
}
// 以流的形式下载文件。
InputStream fis = new BufferedInputStream(inputStream);
// 清空response
response.reset();
// 设置response的Header
response.setCharacterEncoding("UTF-8");
response.addHeader("Content-Disposition", "attachment;filename=" + fileName);
//以下代码图片下载时 必须注掉 否则会导致图片失真
/* response.addHeader("Content-Length", "" + fis.available()); */
response.setContentType("application/octet-stream");
int len = 0;
byte[] buffer = new byte[1024];
OutputStream out = response.getOutputStream();
while ((len = fis.read(buffer)) > 0) {
// 将缓冲区的数据输出到客户端浏览器
out.write(buffer, 0, len);
}
fis.close();
out.flush();
out.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
图片从oss下载
最新推荐文章于 2024-05-27 17:14:33 发布