import cn.hutool.core.io.FileUtil;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.util.URLUtil;
import lombok.SneakyThrows;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.FileInputStream;
import java.net.URLEncoder;
import java.util.Map;
public class DownloadUtil {
@SneakyThrows
public static void base(HttpServletResponse response, Map<Object, Object> param) {
String type = (String) param.get("type");
String filePath = (String) param.get("filePath");
String originalName = (String) param.get("originalName");
if (!FileUtil.exist(filePath)) {
return;
}
response.reset();
if (StrUtil.isBlank(type)) {
type = "octet-stream";
}
response.setContentType("application/" + type);
response.addHeader("Content-Disposition", "attachment; filename=" + URLUtil.encode(originalName));
try (
FileInputStream inputStream = new FileInputStream(filePath);
ServletOutputStream outputStream = response.getOutputStream()
) {
byte[] cache = new byte[1024];
int len;
while ((len = inputStream.read(cache)) > 0) {
outputStream.write(cache, 0, len);
outputStream.flush();
}
}
}
public static void down(HttpServletResponse response, String filePath, String originalName) {
Map<Object, Object> param = MapUtil.of(new String[][]{
{
"filePath", filePath},
{
"originalName", originalName}
});
base(response, param);
}
public static void zip(HttpServletResponse response, String filePath, String originalName) {
Map<Object, Object> param = MapUtil.of(new String[][]{
{
"type", "zip"},
{
"filePath", filePath},
{
"originalName", originalName}
});
base(response, param);
}
}