-
通用下载

1 package com.stig.business.web.contoller; 2 3 import com.stig.business.web.mobel.po.EbssFileInfo; 4 import com.stig.common.constant.Constants; 5 import com.stig.common.properties.BusStopSignProperties; 6 import com.stig.common.utils.RedisUtils; 7 import com.stig.common.utils.StringUtils; 8 import com.stig.common.utils.file.FileUtils; 9 import lombok.extern.slf4j.Slf4j; 10 import org.springframework.http.HttpStatus; 11 import org.springframework.http.MediaType; 12 import org.springframework.web.bind.annotation.*; 13 14 import javax.annotation.Resource; 15 import javax.servlet.http.HttpServletRequest; 16 import javax.servlet.http.HttpServletResponse; 17 import java.net.URLEncoder; 18 import java.nio.charset.StandardCharsets; 19 20 @Slf4j 21 @CrossOrigin 22 @RestController 23 @RequestMapping("/common") 24 public class CommonController { 25 26 @Resource 27 private RedisUtils redisUtils; 28 29 30 /** 31 * 通用下载请求(文件id方式) 32 * 33 */ 34 @GetMapping("download/{fileId}") 35 public void fileDownload(@PathVariable("fileId") String fileId, HttpServletResponse response, 36 HttpServletRequest request) { 37 EbssFileInfo ebssFileInfo = redisUtils.getCacheMapValue(Constants.REDIS_ADVERT_RESOURCE_KEY,fileId); 38 if(ebssFileInfo == null || StringUtils.isBlank(ebssFileInfo.getFilePath())){ 39 response.setStatus(HttpStatus.NOT_FOUND.value()); 40 return; 41 } 42 String realFilePath = BusStopSignProperties.getProfile() + StringUtils.substring(ebssFileInfo.getFilePath(),Constants.RESOURCE_PREFIX.length()); 43 try { 44 response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE); 45 String encode = URLEncoder.encode(ebssFileInfo.getOriginalFilename(), StandardCharsets.UTF_8.toString()); 46 String percentEncodedFileName = encode.replaceAll("\\+", "%20"); 47 StringBuilder contentDispositionValue = new StringBuilder(); 48 contentDispositionValue.append("attachment; filename=") 49 .append(percentEncodedFileName) 50 .append(";") 51 .append("filename*=") 52 .append("utf-8''") 53 .append(percentEncodedFileName); 54 response.addHeader("Access-Control-Expose-Headers", "Content-Disposition,download-filename"); 55 response.setHeader("Content-disposition", contentDispositionValue.toString()); 56 response.setHeader("download-filename", percentEncodedFileName); 57 FileUtils.writeBytes(realFilePath, response.getOutputStream()); 58 } catch (Exception e) { 59 log.error("下载文件失败", e); 60 } 61 } 62 63 }