Fix remote meta descriptor resolving issue

apps-11010
Lasantha Dharmakeerthi 7 months ago
commit 43595228db

@ -111,7 +111,8 @@ public class FileDownloaderServiceProvider {
throw new FileDownloaderServiceException("Unexpected response code received for the remote url " + downloadUrl); throw new FileDownloaderServiceException("Unexpected response code received for the remote url " + downloadUrl);
} }
String contentDisposition = response.header("Content-Disposition"); String contentDisposition = response.header("Content-Disposition");
String[] fileNameSegments = getFileNameSegments(contentDisposition); String contentType = response.header("Content-Type");
String[] fileNameSegments = getFileNameSegments(contentDisposition, contentType);
FileMetaEntry fileMetaEntry = new FileMetaEntry(); FileMetaEntry fileMetaEntry = new FileMetaEntry();
fileMetaEntry.setSize(Long.parseLong(Objects.requireNonNull(response.header("Content-Length")))); fileMetaEntry.setSize(Long.parseLong(Objects.requireNonNull(response.header("Content-Length"))));
fileMetaEntry.setFileName(fileNameSegments[0] + "-" + UUID.randomUUID()); fileMetaEntry.setFileName(fileNameSegments[0] + "-" + UUID.randomUUID());
@ -123,15 +124,25 @@ public class FileDownloaderServiceProvider {
} }
/** /**
* Extract file name segments(filename & extensions) from content disposition header * Extract file name segments(filename & extensions) from content disposition header and content type header
* @param contentDisposition Content disposition header value * @param contentDisposition Content disposition header value
* @param contentType Content type header value
* @return Array of name segments * @return Array of name segments
* @throws FileDownloaderServiceException Throws when error occurred while extracting name segments * @throws FileDownloaderServiceException Throws when error occurred while extracting name segments
*/ */
private static String[] getFileNameSegments(String contentDisposition) throws FileDownloaderServiceException { private static String[] getFileNameSegments(String contentDisposition, String contentType) throws FileDownloaderServiceException {
if (contentDisposition == null) { if (contentDisposition == null && contentType == null) {
throw new FileDownloaderServiceException("Cannot determine the file name for the remote file"); throw new FileDownloaderServiceException("Cannot determine the file name for the remote file");
} }
if (contentDisposition == null) {
String []contentTypeSegments = contentType.split("/");
if (contentTypeSegments.length != 2) {
throw new FileDownloaderServiceException("Encountered wrong content type header value");
}
return new String[]{ UUID.randomUUID().toString(), contentTypeSegments[contentTypeSegments.length - 1]};
}
String []contentDispositionSegments = contentDisposition.split("="); String []contentDispositionSegments = contentDisposition.split("=");
if (contentDispositionSegments.length != 2) { if (contentDispositionSegments.length != 2) {
throw new FileDownloaderServiceException("Error encountered when constructing file name"); throw new FileDownloaderServiceException("Error encountered when constructing file name");

Loading…
Cancel
Save