File name param for direct acccess url requests

Adds optional file name parameter for all direct access url requests
https://github.com/Alfresco/alfresco-community-repo/issues/2064
This commit is contained in:
canpan14
2023-07-12 10:07:34 -04:00
parent d7722e4f25
commit 70430ea96c
18 changed files with 66 additions and 34 deletions

View File

@@ -111,7 +111,7 @@ public interface DeletedNodes
*/
default DirectAccessUrl requestContentDirectUrl(String archivedId, String renditionId, boolean attachment)
{
return requestContentDirectUrl(archivedId, renditionId, attachment, null);
return requestContentDirectUrl(archivedId, renditionId, attachment, null, null);
}
/**
@@ -121,8 +121,9 @@ public interface DeletedNodes
* @param renditionId The rendition id for which to obtain the direct access {@code URL}
* @param attachment {@code true} if an attachment {@code URL} is requested, {@code false} for an embedded {@code URL}, {@code true} by default.
* @param validFor The time at which the direct access {@code URL} will expire.
* @param fileName Optional overide for file name
* @return A direct access {@code URL} object for the content.
*/
DirectAccessUrl requestContentDirectUrl(String archivedId, String renditionId, boolean attachment, Long validFor);
DirectAccessUrl requestContentDirectUrl(String archivedId, String renditionId, boolean attachment, Long validFor, String fileName);
}

View File

@@ -63,4 +63,15 @@ public class DirectAccessUrlHelper
}
return attachment;
}
public String getFileName(DirectAccessUrlRequest directAccessUrlRequest)
{
String fileName = null;
if (directAccessUrlRequest != null )
{
fileName = directAccessUrlRequest.getFileName();
}
return fileName;
}
}

View File

@@ -301,7 +301,7 @@ public interface Nodes
*/
default DirectAccessUrl requestContentDirectUrl(NodeRef nodeRef, boolean attachment)
{
return requestContentDirectUrl(nodeRef, attachment, null);
return requestContentDirectUrl(nodeRef, attachment, null, null);
}
/**
@@ -313,7 +313,7 @@ public interface Nodes
*/
default DirectAccessUrl requestContentDirectUrl(String nodeId, boolean attachment, Long validFor)
{
return requestContentDirectUrl(validateNode(nodeId), attachment, validFor);
return requestContentDirectUrl(validateNode(nodeId), attachment, validFor, null);
}
/**
@@ -321,9 +321,10 @@ public interface Nodes
* @param nodeRef The node reference for which to obtain the direct access {@code URL}
* @param attachment {@code true} if an attachment {@code URL} is requested, {@code false} for an embedded {@code URL}.
* @param validFor The time at which the direct access {@code URL} will expire.
* @param fileName Optional name for the file when downloaded
* @return A direct access {@code URL} object for the content.
*/
DirectAccessUrl requestContentDirectUrl(NodeRef nodeRef, boolean attachment, Long validFor);
DirectAccessUrl requestContentDirectUrl(NodeRef nodeRef, boolean attachment, Long validFor, String fileName);
/**
* Convert from node properties (map of QName to Serializable) retrieved from

View File

@@ -234,7 +234,7 @@ public interface Renditions
default DirectAccessUrl requestContentDirectUrl(String nodeId, String versionId, String renditionId, boolean attachment, Long validFor)
{
NodeRef nodeRef = new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, nodeId);
return requestContentDirectUrl(nodeRef, versionId, renditionId, attachment, validFor);
return requestContentDirectUrl(nodeRef, versionId, renditionId, attachment, validFor, null);
}
/**
@@ -247,7 +247,7 @@ public interface Renditions
*/
default DirectAccessUrl requestContentDirectUrl(NodeRef nodeRef, String versionId, String renditionId, boolean attachment)
{
return requestContentDirectUrl(nodeRef, versionId, renditionId, attachment, null);
return requestContentDirectUrl(nodeRef, versionId, renditionId, attachment, null, null);
}
/**
@@ -257,8 +257,9 @@ public interface Renditions
* @param renditionId the rendition id
* @param attachment {@code true} if an attachment {@code URL} is requested, {@code false} for an embedded {@code URL}
* @param validFor the time at which the direct access {@code URL} will expire
* @param fileName optional name for the file when downloaded
* @return a direct access {@code URL} object for the content.
*/
DirectAccessUrl requestContentDirectUrl(NodeRef nodeRef, String versionId, String renditionId, boolean attachment, Long validFor);
DirectAccessUrl requestContentDirectUrl(NodeRef nodeRef, String versionId, String renditionId, boolean attachment, Long validFor, String fileName);
}

View File

@@ -250,18 +250,18 @@ public class DeletedNodesImpl implements DeletedNodes, RecognizedParamsExtractor
* {@inheritDoc}
*/
@Override
public DirectAccessUrl requestContentDirectUrl(String originalNodeId, String renditionId, boolean attachment, Long validFor)
public DirectAccessUrl requestContentDirectUrl(String originalNodeId, String renditionId, boolean attachment, Long validFor, String fileName)
{
//First check the node is valid and has been archived.
NodeRef validatedNodeRef = nodes.validateNode(StoreRef.STORE_REF_ARCHIVE_SPACESSTORE, originalNodeId);
if (renditionId != null)
{
return renditions.requestContentDirectUrl(validatedNodeRef, null, renditionId, attachment, validFor);
return renditions.requestContentDirectUrl(validatedNodeRef, null, renditionId, attachment, validFor, fileName);
}
else
{
return nodes.requestContentDirectUrl(validatedNodeRef, attachment, validFor);
return nodes.requestContentDirectUrl(validatedNodeRef, attachment, validFor, fileName);
}
}
}

View File

@@ -3443,9 +3443,9 @@ public class NodesImpl implements Nodes
* {@inheritDoc}
*/
@Override
public DirectAccessUrl requestContentDirectUrl(NodeRef nodeRef, boolean attachment, Long validFor)
public DirectAccessUrl requestContentDirectUrl(NodeRef nodeRef, boolean attachment, Long validFor, String fileName)
{
DirectAccessUrl directAccessUrl = contentService.requestContentDirectUrl(nodeRef, ContentModel.PROP_CONTENT, attachment, validFor);
DirectAccessUrl directAccessUrl = contentService.requestContentDirectUrl(nodeRef, ContentModel.PROP_CONTENT, attachment, validFor, fileName);
if (directAccessUrl == null)
{
throw new DisabledServiceException("Direct access url isn't available.");

View File

@@ -512,7 +512,7 @@ public class RenditionsImpl implements Renditions, ResourceLoaderAware
/**
* {@inheritDoc}
*/
public DirectAccessUrl requestContentDirectUrl(NodeRef nodeRef, String versionId, String renditionId, boolean attachment, Long validFor)
public DirectAccessUrl requestContentDirectUrl(NodeRef nodeRef, String versionId, String renditionId, boolean attachment, Long validFor, String fileName)
{
final NodeRef validatedNodeRef = validateNode(nodeRef.getStoreRef(), nodeRef.getId(), versionId, null);
NodeRef renditionNodeRef = getRenditionByName(validatedNodeRef, renditionId, null);
@@ -522,7 +522,7 @@ public class RenditionsImpl implements Renditions, ResourceLoaderAware
throw new NotFoundException("The rendition with id: " + renditionId + " was not found.");
}
return nodes.requestContentDirectUrl(renditionNodeRef, attachment, validFor);
return nodes.requestContentDirectUrl(renditionNodeRef, attachment, validFor, fileName);
}
private BinaryResource getContentImpl(NodeRef nodeRef, String renditionId, Parameters parameters)

View File

@@ -33,6 +33,7 @@ package org.alfresco.rest.api.model;
public class DirectAccessUrlRequest
{
private Boolean attachment;
private String fileName;
public Boolean isAttachment()
{
@@ -43,4 +44,14 @@ public class DirectAccessUrlRequest
{
this.attachment = attachment;
}
public String getFileName()
{
return fileName;
}
public void setFileName(String fileName)
{
this.fileName = fileName;
}
}

View File

@@ -137,12 +137,13 @@ public class NodeRenditionsRelation implements RelationshipResourceAction.Read<R
{
boolean attachment = directAccessUrlHelper.getAttachment(directAccessUrlRequest);
Long validFor = directAccessUrlHelper.getDefaultExpiryTimeInSec();
String fileName = directAccessUrlHelper.getFileName(directAccessUrlRequest);
NodeRef nodeRef = new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, nodeId);
DirectAccessUrl directAccessUrl;
try
{
directAccessUrl = renditions.requestContentDirectUrl(nodeRef, null, renditionId, attachment, validFor);
directAccessUrl = renditions.requestContentDirectUrl(nodeRef, null, renditionId, attachment, validFor, fileName);
}
catch (DirectAccessUrlDisabledException ex)
{

View File

@@ -149,13 +149,14 @@ public class NodeVersionRenditionsRelation implements RelationshipResourceAction
{
boolean attachment = directAccessUrlHelper.getAttachment(directAccessUrlRequest);
Long validFor = directAccessUrlHelper.getDefaultExpiryTimeInSec();
String fileName = directAccessUrlHelper.getFileName(directAccessUrlRequest);
NodeRef nodeRef = new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, nodeId);
String renditionId = parameters.getRelationship2Id();
DirectAccessUrl directAccessUrl;
try
{
directAccessUrl = renditions.requestContentDirectUrl(nodeRef, versionId, renditionId, attachment, validFor);
directAccessUrl = renditions.requestContentDirectUrl(nodeRef, versionId, renditionId, attachment, validFor, fileName);
}
catch (DirectAccessUrlDisabledException ex)
{

View File

@@ -311,6 +311,7 @@ public class NodeVersionsRelation extends AbstractNodeRelation implements
{
boolean attachment = directAccessUrlHelper.getAttachment(directAccessUrlRequest);
Long validFor = directAccessUrlHelper.getDefaultExpiryTimeInSec();
String fileName = directAccessUrlHelper.getFileName(directAccessUrlRequest);
Version version = findVersion(nodeId, versionId);
if (version != null)
{
@@ -319,7 +320,7 @@ public class NodeVersionsRelation extends AbstractNodeRelation implements
DirectAccessUrl directAccessUrl;
try
{
directAccessUrl = nodes.requestContentDirectUrl(versionNodeRef, attachment, validFor);
directAccessUrl = nodes.requestContentDirectUrl(versionNodeRef, attachment, validFor, fileName);
}
catch (DirectAccessUrlDisabledException ex)
{

View File

@@ -211,12 +211,13 @@ public class NodesEntityResource implements
{
boolean attachment = directAccessUrlHelper.getAttachment(directAccessUrlRequest);
Long validFor = directAccessUrlHelper.getDefaultExpiryTimeInSec();
String fileName = directAccessUrlHelper.getFileName(directAccessUrlRequest);
NodeRef nodeRef = nodes.validateNode(nodeId);
DirectAccessUrl directAccessUrl;
try
{
directAccessUrl = nodes.requestContentDirectUrl(nodeRef, attachment, validFor);
directAccessUrl = nodes.requestContentDirectUrl(nodeRef, attachment, validFor, fileName);
}
catch (DirectAccessUrlDisabledException ex)
{

View File

@@ -109,10 +109,11 @@ public class TrashcanEntityResource implements
{
boolean attachment = directAccessUrlHelper.getAttachment(directAccessUrlRequest);
Long validFor = directAccessUrlHelper.getDefaultExpiryTimeInSec();
String fileName = directAccessUrlHelper.getFileName(directAccessUrlRequest);
DirectAccessUrl directAccessUrl;
try
{
directAccessUrl = deletedNodes.requestContentDirectUrl(originalNodeId, null, attachment, validFor);
directAccessUrl = deletedNodes.requestContentDirectUrl(originalNodeId, null, attachment, validFor, fileName);
}
catch (DirectAccessUrlDisabledException ex)
{

View File

@@ -98,10 +98,11 @@ public class TrashcanRenditionsRelation
{
boolean attachment = directAccessUrlHelper.getAttachment(directAccessUrlRequest);
Long validFor = directAccessUrlHelper.getDefaultExpiryTimeInSec();
String fileName = directAccessUrlHelper.getFileName(directAccessUrlRequest);
DirectAccessUrl directAccessUrl;
try
{
directAccessUrl = deletedNodes.requestContentDirectUrl(originalNodeId, renditionId, attachment, validFor);
directAccessUrl = deletedNodes.requestContentDirectUrl(originalNodeId, renditionId, attachment, validFor, fileName);
}
catch (DirectAccessUrlDisabledException ex)
{