java 讀取某路徑下的文件直接相應到前端頁面!
前端請求方式為get請求,只需要寫個個按標簽點擊即可下載
import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.harry.dandelion.framework.common.utils.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import com.sinosoft.ssi.base.entity.ReportEntity; import com.sinosoft.ssi.base.mappers.ReportMapper; import lombok.extern.slf4j.Slf4j; @Slf4j @RestController public class ReportOutWord { @Autowired private ReportMapper RrportMapper; @GetMapping("/exp/outWord/1") public void download(HttpServletRequest request, HttpServletResponse response) { String path= " "; // 開始下載文件 try { // path是指欲下載的文件的路徑。 File file = new File(path); // 取得文件名。 String filename = file.getName(); // 取得文件的后綴名。 String ext = filename.substring(filename.lastIndexOf(".") + 1).toUpperCase(); log.debug("下載文件類型為:" + ext); // 以流的形式下載文件。 InputStream fis = new BufferedInputStream( new FileInputStream(path)); byte[] buffer = new byte[fis.available()]; fis.read(buffer); fis.close(); // 清空response response.reset(); // 設置response的Header //ISO-8859-1可以顯示中文的文件名 response.addHeader("Content-Disposition", "attachment;filename=" + new String(filename.getBytes(),"ISO-8859-1")); response.addHeader("Content-Length", "" + file.length()); OutputStream toClient = new BufferedOutputStream(response.getOutputStream()); response.setContentType("application/octet-stream"); toClient.write(buffer); toClient.flush(); toClient.close(); // 刪除臨時文件 //FileUtils.delFile(rootPath + File.separator + filename); // TODO Auto-generated catch block } catch (IOException ex) { ex.printStackTrace(); } } }
方式二:
// 開始下載文件 InputStream in = null; try { // 1.設置文件ContentType類型,這樣設置,會自動判斷下載文件類型 response.setContentType("multipart/form-data"); // 2.設置文件頭:最后一個參數是設置下載文件名 response.addHeader("Content-Disposition", "attachment;filename=" + new String("*******.docx".getBytes(), "ISO-8859-1")); in = new FileInputStream(new File(文件路徑)); // 3.通過response獲取ServletOutputStream對象(out) int b = 0; byte[] buffer = new byte[512]; while (b != -1) { b = in.read(buffer); if (b != -1) { response.getOutputStream().write(buffer, 0, b);// 4.寫到輸出流(out)中 } } } catch (Exception e) { } finally { try { if (in != null) { in.close(); } response.getOutputStream().flush(); } catch (IOException e) { e.printStackTrace(); } }