All Downloads are FREE. Search and download functionalities are using the official Maven repository.

me.desair.tus.server.download.DownloadGetRequestHandler Maven / Gradle / Ivy

package me.desair.tus.server.download;

import java.io.IOException;
import java.util.Objects;

import javax.servlet.http.HttpServletResponse;

import me.desair.tus.server.HttpHeader;
import me.desair.tus.server.HttpMethod;
import me.desair.tus.server.exception.TusException;
import me.desair.tus.server.exception.UploadInProgressException;
import me.desair.tus.server.upload.UploadInfo;
import me.desair.tus.server.upload.UploadStorageService;
import me.desair.tus.server.util.AbstractRequestHandler;
import me.desair.tus.server.util.TusServletRequest;
import me.desair.tus.server.util.TusServletResponse;

/**
 * Send the uploaded bytes of finished uploads
 */
public class DownloadGetRequestHandler extends AbstractRequestHandler {

    private static final String CONTENT_DISPOSITION_FORMAT = "attachment;filename=\"%s\"";

    @Override
    public boolean supports(HttpMethod method) {
        return HttpMethod.GET.equals(method);
    }

    @Override
    public void process(HttpMethod method, TusServletRequest servletRequest,
                        TusServletResponse servletResponse, UploadStorageService uploadStorageService,
                        String ownerKey) throws IOException, TusException {

        UploadInfo info = uploadStorageService.getUploadInfo(servletRequest.getRequestURI(), ownerKey);
        if (info == null || info.isUploadInProgress()) {
            throw new UploadInProgressException("Upload " + servletRequest.getRequestURI() + " is still in progress "
                    + "and cannot be downloaded yet");
        } else {

            servletResponse.setHeader(HttpHeader.CONTENT_LENGTH, Objects.toString(info.getLength()));

            servletResponse.setHeader(HttpHeader.CONTENT_DISPOSITION,
                    String.format(CONTENT_DISPOSITION_FORMAT, info.getFileName()));

            servletResponse.setHeader(HttpHeader.CONTENT_TYPE, info.getFileMimeType());

            if (info.hasMetadata()) {
                servletResponse.setHeader(HttpHeader.UPLOAD_METADATA, info.getEncodedMetadata());
            }

            uploadStorageService.copyUploadTo(info, servletResponse.getOutputStream());
        }

        servletResponse.setStatus(HttpServletResponse.SC_OK);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy