Forráskód Böngészése

修复上传到demo中的压缩文件及pdf预览异常

陈精华 4 éve
szülő
commit
fc73deb3fd

+ 23 - 16
jodconverter-web/src/main/java/cn/keking/utils/DownloadUtils.java

@@ -56,9 +56,10 @@ public class DownloadUtils {
         }
         try {
             URL url = new URL(urlStr);
-            OutputStream os = new FileOutputStream(new File(realPath));
             if (url.getProtocol() != null && url.getProtocol().toLowerCase().startsWith("http")) {
-                saveToOutputStreamFromUrl(urlStr, os);
+                byte[] bytes = getBytesFromUrl(urlStr);
+                OutputStream os = new FileOutputStream(new File(realPath));
+                saveBytesToOutStream(bytes, os);
             } else if (url.getProtocol() != null && "ftp".equals(url.getProtocol().toLowerCase())) {
                 String ftpUsername = fileUtils.getUrlParameterReg(fileAttribute.getUrl(), URL_PARAM_FTP_USERNAME);
                 String ftpPassword = fileUtils.getUrlParameterReg(fileAttribute.getUrl(), URL_PARAM_FTP_PASSWORD);
@@ -88,21 +89,24 @@ public class DownloadUtils {
         }
     }
 
-    public boolean saveToOutputStreamFromUrl(String urlStr, OutputStream os) throws IOException {
+    public byte[] getBytesFromUrl(String urlStr) throws IOException {
         InputStream is = getInputStreamFromUrl(urlStr);
         if (is != null) {
-            copyStream(is, os);
+            return getBytesFromStream(is);
         } else {
             urlStr = URLUtil.normalize(urlStr, true, true);
             is = getInputStreamFromUrl(urlStr);
-            if (is != null) {
-                copyStream(is, os);
-            } else {
-                os.close();
-                return false;
+            if (is == null) {
+                logger.error("文件下载异常:url:{}", urlStr);
+                throw new IOException("文件下载异常:url:" + urlStr);
             }
+            return getBytesFromStream(is);
         }
-        return true;
+    }
+
+    public void saveBytesToOutStream(byte[] b, OutputStream os) throws IOException {
+        os.write(b);
+        os.close();
     }
 
     private InputStream getInputStreamFromUrl(String urlStr) {
@@ -119,14 +123,17 @@ public class DownloadUtils {
         }
     }
 
-    private void copyStream(InputStream is, OutputStream os) throws IOException {
-        byte[] bs = new byte[1024];
-        int len;
-        while (-1 != (len = is.read(bs))) {
-            os.write(bs, 0, len);
+    private byte[] getBytesFromStream(InputStream is) throws IOException {
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        byte[] buffer = new byte[1024];
+        int len = 0;
+        while ((len = is.read(buffer)) != -1) {
+            baos.write(buffer, 0, len);
         }
+        byte[] b = baos.toByteArray();
         is.close();
-        os.close();
+        baos.close();
+        return b;
     }
 
   /**

+ 2 - 1
jodconverter-web/src/main/java/cn/keking/web/controller/OnlinePreviewController.java

@@ -88,7 +88,8 @@ public class OnlinePreviewController {
     public void getCorsFile(String urlPath, HttpServletResponse response) {
         logger.info("下载跨域pdf文件url:{}", urlPath);
         try {
-            downloadUtils.saveToOutputStreamFromUrl(urlPath, response.getOutputStream());
+            byte[] bytes = downloadUtils.getBytesFromUrl(urlPath);
+            downloadUtils.saveBytesToOutStream(bytes, response.getOutputStream());
         } catch (IOException e) {
             logger.error("下载跨域pdf文件异常,url:{}", urlPath, e);
         }