/* * Copyright 2018-2023 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://aws.amazon.com/apache2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazonaws.services.s3.model; import com.amazonaws.AmazonWebServiceRequest; import java.io.Serializable; import java.net.URL; /** * Request class to download objects using presigned urls. The class has options to set the presigned url to * download the request from, range headers to download partial objects. * * If custom headers are used in generating the url, you can set them through {@link #putCustomRequestHeader(String, String)} * method. If any signed headers or parameters are missing from the request, a Signature mismatch error will be thrown from S3. * Ensure you set all the custom headers/parameters that are used for creating the presigned url. */ public class PresignedUrlDownloadRequest extends AmazonWebServiceRequest implements Serializable { /** Required member indicating the endpoint to send the request **/ private URL presignedUrl; /** Optional member indicating the byte range of data to retrieve */ private long[] range; public PresignedUrlDownloadRequest(URL presignedUrl) { this.presignedUrl = presignedUrl; } /** * @return The presigned url to which the request will be sent */ public URL getPresignedUrl() { return presignedUrl; } /** * @param presignedUrl sets the presigned url to send the request to */ public void setPresignedUrl(URL presignedUrl) { this.presignedUrl = presignedUrl; } /** * @param presignedUrl sets the presigned url to send the request to * @return This object for method chaining */ public PresignedUrlDownloadRequest withPresignedUrl(URL presignedUrl) { setPresignedUrl(presignedUrl); return this; } /** *
* Gets the optional inclusive byte range within the desired object * that will be downloaded by this request. *
*
* The range is returned as
* a two element array, containing the start and end index of the byte range.
* If no byte range has been specified, the entire object is downloaded and
* this method returns null
.
*
null
if no range has been specified,
* and the whole object is
* to be downloaded.
*
* @see #setRange(long, long)
*/
public long[] getRange() {
return range == null ? null : range.clone();
}
/**
* * Sets the optional inclusive byte range within the desired object that * will be downloaded by this request. *
** The first byte in an object has * position 0; as an example, the first ten bytes of an object can be * downloaded by specifying a range of 0 to 9. *
** If no byte range is specified, this request downloads the entire * object from Amazon S3. *
* * @param start * The start of the inclusive byte range to download. * @param end * The end of the inclusive byte range to download. * * @see #getRange() */ public void setRange(long start, long end) { range = new long[] {start, end}; } /** ** Sets the optional inclusive byte range within the desired object that * will be downloaded by this request. * Returns this {@link GetObjectRequest}, enabling additional method * calls to be chained together. *
** The first byte in an object has * position 0; as an example, the first ten bytes of an object can be * downloaded by specifying a range of 0 to 9. *
** If no byte range is specified, this request downloads the entire * object from Amazon S3. *
* * @param start * The start of the inclusive byte range to download. * @param end * The end of the inclusive byte range to download. * * @return This {@link GetObjectRequest}, enabling additional method * calls to be chained together. * * @see #getRange() * @see #setRange(long, long) */ public PresignedUrlDownloadRequest withRange(long start, long end) { setRange(start, end); return this; } /** * Creates and returns a new copy of the request. * This method also copies the internal state of the base {@link AmazonWebServiceRequest} class. */ public PresignedUrlDownloadRequest clone() { PresignedUrlDownloadRequest target = new PresignedUrlDownloadRequest(getPresignedUrl()); copyBaseTo(target); if (getRange() != null) { target.setRange(getRange()[0], getRange()[1]); } return target; } }