diff --git a/pom.xml b/pom.xml index 86c7dc8..6a192bb 100644 --- a/pom.xml +++ b/pom.xml @@ -8,7 +8,7 @@ org.gcube.data.transfer uri-resolver - 1.3.0-SNAPSHOT + 1.4.0-SNAPSHOT war diff --git a/src/main/java/org/gcube/datatransfer/resolver/http/ConstantsHttpResolver.java b/src/main/java/org/gcube/datatransfer/resolver/http/ConstantsHttpResolver.java new file mode 100644 index 0000000..710079d --- /dev/null +++ b/src/main/java/org/gcube/datatransfer/resolver/http/ConstantsHttpResolver.java @@ -0,0 +1,19 @@ +/** + * + */ +package org.gcube.datatransfer.resolver.http; + + + +/** + * The Class ConstantsHttpResolver. + * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * Sep 21, 2015 + */ +public class ConstantsHttpResolver { + + public static final String CONTENT_DISPOSITION = "content-disposition"; + public static final String DEFAULT_CONTENTTYPE_UNKNOWN_UNKNOWN = "unknown/unknown"; + public static final String DEFAULT_FILENAME_FROM_STORAGE_MANAGER = "fromStorageManager"; +} diff --git a/src/main/java/org/gcube/datatransfer/resolver/http/HttpResolver.java b/src/main/java/org/gcube/datatransfer/resolver/http/HttpResolver.java index a778720..e0beed0 100644 --- a/src/main/java/org/gcube/datatransfer/resolver/http/HttpResolver.java +++ b/src/main/java/org/gcube/datatransfer/resolver/http/HttpResolver.java @@ -113,12 +113,12 @@ public class HttpResolver extends HttpServlet { if (fileName != null) response.addHeader("content-disposition", "attachment; filename=" +fileName); else - response.addHeader("content-disposition", "attachment; filename=fromStorageManager"); + response.addHeader("content-disposition", "attachment; filename="+ConstantsHttpResolver.DEFAULT_FILENAME_FROM_STORAGE_MANAGER); if (contentType!= null) response.setContentType(contentType); else - response.setContentType("unknown/unknown"); + response.setContentType(ConstantsHttpResolver.DEFAULT_CONTENTTYPE_UNKNOWN_UNKNOWN); URL url = new URL(null, uri, new URLStreamHandler() { @@ -132,7 +132,7 @@ public class HttpResolver extends HttpServlet { URLConnection uc = null; try { - uc = ( URLConnection ) url.openConnection ( ); + uc = ( URLConnection ) url.openConnection(); in = uc.getInputStream(); } catch(Exception e){ diff --git a/src/main/java/org/gcube/datatransfer/resolver/http/StorageIDResolver.java b/src/main/java/org/gcube/datatransfer/resolver/http/StorageIDResolver.java index 2613af7..c0e43da 100644 --- a/src/main/java/org/gcube/datatransfer/resolver/http/StorageIDResolver.java +++ b/src/main/java/org/gcube/datatransfer/resolver/http/StorageIDResolver.java @@ -11,6 +11,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.io.IOUtils; +import org.gcube.contentmanagement.blobstorage.resource.MyFile; import org.gcube.contentmanagement.blobstorage.service.IClient; import org.gcube.contentmanager.storageclient.model.protocol.smp.Handler; import org.gcube.contentmanager.storageclient.wrapper.AccessType; @@ -18,14 +19,15 @@ import org.gcube.contentmanager.storageclient.wrapper.StorageClient; import org.slf4j.Logger; import org.slf4j.LoggerFactory; + /** * The Class StorageIDResolver. * * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it - * Apr 28, 2015 + * Sep 21, 2015 */ public class StorageIDResolver extends HttpServlet { - + private static final long serialVersionUID = -5208562956923156697L; protected static final String SMP_ID = "smp-id"; @@ -92,33 +94,47 @@ public class StorageIDResolver extends HttpServlet { OutputStream out = response.getOutputStream(); - if (fileName != null) - response.addHeader("content-disposition", "attachment; filename=" +fileName); - else - response.addHeader("content-disposition", "attachment; filename=fromStorageManager"); - - if (contentType!= null) - response.setContentType(contentType); - else - response.setContentType("unknown/unknown"); - try{ StorageClient client = new StorageClient(StorageIDResolver.class.getName(), StorageIDResolver.class.getSimpleName(), StorageIDResolver.class.getName(), AccessType.PUBLIC); IClient icClient = client.getClient(); - in=icClient.get().RFileAsInputStream(smpID); - } - catch (Exception e) { + + in=icClient.get().RFileAsInputStream(smpID); //input stream + + MyFile file = client.getClient().getMetaFile().RFile(smpID); + logger.debug("MetaFile retrieved from storage? "+ (file!=null)); + + if(fileName==null || fileName.isEmpty()){ //filename + fileName = file.getName(); + logger.debug("filename read from MetaFile: "+ fileName); + } + + if(contentType==null || contentType.isEmpty()){ //mime type + contentType = file.getMimeType(); + logger.debug("contentType read from MetaFile: "+ contentType); + } + + }catch (Exception e) { response.sendError(404); logger.error("Storage Client Exception:", e); return; } - + //CASE InputStream NULL if(in==null){ logger.warn("Input stream is null, sending status error 404"); sendErrorQuietly(response, 404); return; } + + //VALIDATING PARAMETERS: FILENAME AND CONTENT TYPE + if(fileName==null || fileName.isEmpty()) + fileName = ConstantsHttpResolver.DEFAULT_FILENAME_FROM_STORAGE_MANAGER; + + if(contentType==null || contentType.isEmpty()) + contentType = ConstantsHttpResolver.DEFAULT_CONTENTTYPE_UNKNOWN_UNKNOWN; + + response.addHeader(ConstantsHttpResolver.CONTENT_DISPOSITION, "attachment; filename=" +fileName); + response.setContentType(contentType); //CASE VALIDATION if(validatingURI){