springboot路徑下載檔案
阿新 • • 發佈:2019-01-10
package com.impact.websiteapi.controller; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import com.impact.websiteapi.data.CasesData; import com.impact.websiteapi.services.CaseService; import com.impact.websiteapi.util.Jsonoutput; import java.io.*; import java.net.URLEncoder; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class File_Download { //實現Spring Boot 的檔案下載功能,對映網址為/download @RequestMapping("/download") public String downloadFile(HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException { // 獲取指定目錄下的第一個檔案 File scFileDir = new File("E://mubu"); File TrxFiles[] = scFileDir.listFiles(); System.out.println(TrxFiles[0]); String fileName = TrxFiles[0].getName(); //下載的檔名 // 如果檔名不為空,則進行下載 if (fileName != null) { //設定檔案路徑 String realPath = "E://mubu/"; File file = new File(realPath, fileName); // 如果檔名存在,則進行下載 if (file.exists()) { // 配置檔案下載 response.setHeader("content-type", "application/octet-stream"); response.setContentType("application/octet-stream"); // 下載檔案能正常顯示中文 response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8")); // 實現檔案下載 byte[] buffer = new byte[1024]; FileInputStream fis = null; BufferedInputStream bis = null; try { fis = new FileInputStream(file); bis = new BufferedInputStream(fis); OutputStream os = response.getOutputStream(); int i = bis.read(buffer); while (i != -1) { os.write(buffer, 0, i); i = bis.read(buffer); } System.out.println("Download the song successfully!"); } catch (Exception e) { System.out.println("Download the song failed!"); } finally { if (bis != null) { try { bis.close(); } catch (IOException e) { e.printStackTrace(); } } if (fis != null) { try { fis.close(); } catch (IOException e) { e.printStackTrace(); } } } } } return null; } }