diff --git a/spring-core/src/main/java/org/springframework/core/io/AbstractFileResolvingResource.java b/spring-core/src/main/java/org/springframework/core/io/AbstractFileResolvingResource.java index 7e03d3f57b14..0e515cb8593a 100644 --- a/spring-core/src/main/java/org/springframework/core/io/AbstractFileResolvingResource.java +++ b/spring-core/src/main/java/org/springframework/core/io/AbstractFileResolvingResource.java @@ -19,7 +19,6 @@ import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; -import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URI; import java.net.URL; @@ -66,18 +65,17 @@ else if (code == HttpURLConnection.HTTP_NOT_FOUND) { return false; } } - if (con.getContentLength() >= 0) { + if (con.getContentLengthLong() >= 0) { return true; } if (httpCon != null) { - // no HTTP OK status, and no content-length header: give up + // No HTTP OK status, and no content-length header: give up httpCon.disconnect(); return false; } else { // Fall back to stream existence: can we open the stream? - InputStream is = getInputStream(); - is.close(); + getInputStream().close(); return true; } } @@ -211,7 +209,7 @@ public long contentLength() throws IOException { // Try a URL connection content-length header URLConnection con = url.openConnection(); customizeConnection(con); - return con.getContentLength(); + return con.getContentLengthLong(); } } diff --git a/spring-core/src/main/java/org/springframework/core/io/AbstractResource.java b/spring-core/src/main/java/org/springframework/core/io/AbstractResource.java index e02cfcb7902f..27320cb0cd37 100644 --- a/spring-core/src/main/java/org/springframework/core/io/AbstractResource.java +++ b/spring-core/src/main/java/org/springframework/core/io/AbstractResource.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2017 the original author or authors. + * Copyright 2002-2018 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -57,8 +57,7 @@ public boolean exists() { catch (IOException ex) { // Fall back to stream existence: can we open the stream? try { - InputStream is = getInputStream(); - is.close(); + getInputStream().close(); return true; } catch (Throwable isEx) { @@ -146,7 +145,7 @@ public long contentLength() throws IOException { InputStream is = getInputStream(); try { long size = 0; - byte[] buf = new byte[255]; + byte[] buf = new byte[256]; int read; while ((read = is.read(buf)) != -1) { size += read; @@ -169,10 +168,11 @@ public long contentLength() throws IOException { */ @Override public long lastModified() throws IOException { - long lastModified = getFileForLastModifiedCheck().lastModified(); - if (lastModified == 0L) { + File fileToCheck = getFileForLastModifiedCheck(); + long lastModified = fileToCheck.lastModified(); + if (lastModified == 0L && !fileToCheck.exists()) { throw new FileNotFoundException(getDescription() + - " cannot be resolved in the file system for resolving its last-modified timestamp"); + " cannot be resolved in the file system for checking its last-modified timestamp"); } return lastModified; }