Commit b58e6b93 by Jony.L

发票预览

parent 3a0a1c0e
...@@ -31,6 +31,9 @@ import java.io.FileInputStream; ...@@ -31,6 +31,9 @@ import java.io.FileInputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.OutputStream; import java.io.OutputStream;
import java.net.URL;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.List; import java.util.List;
import static com.luhu.computility.framework.common.pojo.CommonResult.success; import static com.luhu.computility.framework.common.pojo.CommonResult.success;
...@@ -129,20 +132,20 @@ public class FileController { ...@@ -129,20 +132,20 @@ public class FileController {
@Operation(summary = "PDF 文件预览") @Operation(summary = "PDF 文件预览")
@PermitAll @PermitAll
public void previewPdf(HttpServletResponse response, String url) throws IOException { public void previewPdf(HttpServletResponse response, String url) throws IOException {
File file = new File(url); if (url == null || url.isEmpty()) {
if (!file.exists()) { response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
response.setStatus(HttpServletResponse.SC_NOT_FOUND);
return; return;
} }
// 设置响应头(浏览器内嵌预览)
response.setContentType("application/pdf"); response.setContentType("application/pdf");
// inline 表示浏览器内嵌预览,attachment 表示下载 response.setHeader("Content-Disposition", "inline; filename=\"" + URLEncoder.encode("preview.pdf", StandardCharsets.UTF_8.name()) + "\"");
response.setHeader("Content-Disposition", "inline; filename=\"" + file.getName() + "\""); response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // 避免缓存
response.setHeader("Pragma", "no-cache"); response.setHeader("Pragma", "no-cache");
response.setHeader("Expires", "0"); response.setHeader("Expires", "0");
try (InputStream inputStream = new FileInputStream(file); // 用 HttpURLConnection 读取远程 PDF 流
try (InputStream inputStream = new URL(url).openStream();
OutputStream os = response.getOutputStream()) { OutputStream os = response.getOutputStream()) {
byte[] buffer = new byte[8192]; byte[] buffer = new byte[8192];
int bytesRead; int bytesRead;
...@@ -150,6 +153,8 @@ public class FileController { ...@@ -150,6 +153,8 @@ public class FileController {
os.write(buffer, 0, bytesRead); os.write(buffer, 0, bytesRead);
} }
os.flush(); os.flush();
} catch (IOException e) {
response.setStatus(HttpServletResponse.SC_BAD_GATEWAY); // 502,云端文件无法访问
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment