ref #9132 improve length reading for URI based images
authorAndreas Müller <a.mueller@bgbm.org>
Wed, 8 Jul 2020 07:18:29 +0000 (09:18 +0200)
committerAndreas Müller <a.mueller@bgbm.org>
Wed, 8 Jul 2020 07:18:29 +0000 (09:18 +0200)
cdmlib-commons/src/main/java/eu/etaxonomy/cdm/common/media/ImageInfo.java
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/media/ImageFile.java

index 922fb2d8a8a4f8e79db5566f5e3197501f4d4732..f0b4fcab954bd343bf7eda6e4b8f299ac3081d89 100644 (file)
@@ -96,8 +96,23 @@ public  class ImageInfo extends MediaInfo {
        }\r
 \r
        private void readImageLength() throws ClientProtocolException, IOException, HttpException{\r
-               long length = UriUtils.getResourceLength(imageUri, null);\r
-               setLength(length);\r
+               try {\r
+            long length = UriUtils.getResourceLength(imageUri, null);\r
+            setLength(length);\r
+        } catch (HttpException e) {\r
+            if (e.getMessage().equals("Could not retrieve Content-Length")){\r
+                InputStream inputStream = UriUtils.getInputStream(imageUri);\r
+                int n = 0;\r
+                while(inputStream.read() != -1){\r
+                    n++;\r
+                }\r
+                inputStream.close();\r
+                logger.info("Content-Length not available in http header. Image size computed via input stream size: " + imageUri);\r
+                setLength(n);\r
+            }else{\r
+                throw e;\r
+            }\r
+        }\r
        }\r
 \r
        /**\r
index 8eb88ebe1f8ad143e1fe33ab4977483b36c8af2a..07e25eb32c2cca53160fd5972979fb21ffee3112 100644 (file)
@@ -65,7 +65,9 @@ public class ImageFile extends MediaRepresentationPart {
                if(imageInfo != null){
                        imageFile.setHeight(imageInfo.getHeight());
                        imageFile.setWidth(imageInfo.getWidth());
-//                     imageFile.setSize((int)imageInfo.getLength());
+                       if(imageInfo.getLength() != 0){
+                           imageFile.setSize((int)imageInfo.getLength());
+                       }
                }
 
                return imageFile;