Class AbstractDownloadStrategy

    • Method Detail

      • matches

        public boolean matches​(String requestUri)
        Specified by:
        matches in interface com.atlassian.plugin.servlet.DownloadStrategy
      • getServletPath

        protected abstract String getServletPath()
        Returns the servlet path handled by this download strategy. Includes the leading "/" but no trailing "/", e.g. "/download" or "/artifact".
      • serveFile

        public void serveFile​(javax.servlet.http.HttpServletRequest httpServletRequest,
                              javax.servlet.http.HttpServletResponse httpServletResponse)
                       throws com.atlassian.plugin.servlet.DownloadException
        Specified by:
        serveFile in interface com.atlassian.plugin.servlet.DownloadStrategy
        Throws:
        com.atlassian.plugin.servlet.DownloadException
      • serveOrdinaryFile

        protected void serveOrdinaryFile​(javax.servlet.http.HttpServletRequest httpServletRequest,
                                         javax.servlet.http.HttpServletResponse httpServletResponse,
                                         TitledFile titledFileToServe)
                                  throws IOException
        Serves the specified file, handling both full and partial content requests
        Parameters:
        httpServletRequest - The servlet request containing client data
        httpServletResponse - The servlet response for sending the file data
        titledFileToServe - The file to be served, with metadata
        Throws:
        IOException - If an error occurs during file access or streaming
      • isByteRangeRequest

        public static boolean isByteRangeRequest​(javax.servlet.http.HttpServletRequest request)
        Checks if the request contains a valid Byte-Range header
        Parameters:
        request - The HTTP request
        Returns:
        boolean True if the request contains a Range header, false otherwise
      • generateETag

        public String generateETag​(File file)
        Generates an ETag for a given file based on its last modified timestamp and length
        Parameters:
        file - The file for which the ETag is generated
        Returns:
        A string representing the ETag
      • processRangeHeader

        protected RangeHeaderResult processRangeHeader​(javax.servlet.http.HttpServletRequest httpServletRequest,
                                                       javax.servlet.http.HttpServletResponse httpServletResponse,
                                                       long fileLength)
        Processes the Range and If-Range headers from the HTTP request to determine the byte range to be served This method validates the range, calculates the start and content length, and sets the appropriate response headers If the range is invalid or not satisfiable, it sets the response status to 416 (Range Not Satisfiable) If an If-Range header is present, it checks whether the file has changed since the specified date or ETag If the file has changed, it serves the entire file instead of the range
        Parameters:
        httpServletRequest - The servlet request containing the Range and If-Range headers (if present)
        httpServletResponse - The servlet response to set the headers on
        fileLength - The total length of the file being requested
        Returns:
        A RangeHeaderResult containing the start position and content length to be served, or null if the range is invalid
      • throwPermissionException

        protected void throwPermissionException​(RequestPath requestPath)
                                         throws UserNotLoggedInException,
                                                org.acegisecurity.AccessDeniedException
        Throws an exception indicating that the current user does not have permission to access the requested item. The requestPath parameter may be included in the exception message and/or logs.
        Throws:
        UserNotLoggedInException
        org.acegisecurity.AccessDeniedException
      • isCompressionEnabled

        public boolean isCompressionEnabled()