| package com.doumee.api.common; | 
|   | 
| import com.doumee.api.BaseController; | 
| import com.doumee.core.annotation.trace.Trace; | 
| import com.doumee.core.constants.ResponseStatus; | 
| import com.doumee.core.exception.BusinessException; | 
| import io.swagger.annotations.Api; | 
| import org.apache.commons.lang3.StringUtils; | 
| import org.springframework.beans.factory.annotation.Value; | 
| import org.springframework.web.bind.annotation.*; | 
|   | 
| import javax.servlet.http.HttpServletResponse; | 
| import java.io.*; | 
| import java.net.URLEncoder; | 
| import java.nio.charset.StandardCharsets; | 
|   | 
| @Api(tags = "本地文件接口") | 
| @Trace(exclude = true) | 
| @RestController | 
| @RequestMapping("/resource/local") | 
| public class LocalFileAccessController extends BaseController { | 
|   | 
|     @Value("${resources.import-template:~/files}") | 
|     private String resourcesPath; | 
|   | 
|     /** | 
|      * 下载本地文件 | 
|      */ | 
|     @GetMapping("/download") | 
|     public void download (@RequestParam String path, @RequestParam(required = false) String name, HttpServletResponse response) throws IOException { | 
|         File file = new File(resourcesPath.replace("~", new File("").getCanonicalPath()) + path); | 
|         if (!file.exists() || !file.isFile()) { | 
|             throw new BusinessException(ResponseStatus.LOCAL_FILE_NOT_EXISTS); | 
|         } | 
|         ByteArrayOutputStream os = this.getOutputStream(new FileInputStream(file)); | 
|         String encodeFileName = URLEncoder.encode(StringUtils.isBlank(name) ? file.getName() : name, StandardCharsets.UTF_8.toString()); | 
|         response.setHeader("Content-Disposition","attachment;filename=" + encodeFileName); | 
|         response.setContentType("application/octet-stream"); | 
|         response.setHeader("doumee-opera-type", "download"); | 
|         response.setHeader("doumee-download-filename", encodeFileName); | 
|         response.getOutputStream().write(os.toByteArray()); | 
|     } | 
| } |