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

com.qcloud.cos.model.AbstractPutObjectRequest Maven / Gradle / Ivy

/*
 * Copyright 2010-2019 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.
 
 * According to cos feature, we modify some class,comment, field name, etc.
 */


package com.qcloud.cos.model;

import java.io.File;
import java.io.InputStream;
import java.io.Serializable;

import com.qcloud.cos.internal.CosServiceRequest;
import com.qcloud.cos.model.ciModel.persistence.PicOperations;


public abstract class AbstractPutObjectRequest extends CosServiceRequest implements Cloneable,
        SSECustomerKeyProvider, SSECOSKeyManagementParamsProvider, CosDataSource, Serializable {

    /**
     * The name of an existing bucket, to which this request will upload a new object. You must have
     * {@link Permission#Write} permission granted to you in order to upload new objects to a
     * bucket.
     */
    private String bucketName;

    /**
     * The key under which to store the new object.
     */
    private String key;

    /**
     * The file containing the data to be uploaded to Qcloud COS. You must either specify a file or
     * an InputStream containing the data to be uploaded to Qcloud COS.
     */
    private File file;

    /**
     * The InputStream containing the data to be uploaded to Qcloud COS. You must either specify a
     * file or an InputStream containing the data to be uploaded to Qcloud COS.
     */
    private transient InputStream inputStream;

    /**
     * Optional metadata instructing Qcloud COS how to handle the uploaded data (e.g. custom user
     * metadata, hooks for specifying content type, etc.). If you are uploading from an InputStream,
     * you should always specify metadata with the content size set, otherwise the
     * contents of the InputStream will have to be buffered in memory before they can be sent to
     * Qcloud COS, which can have very negative performance impacts.
     */
    private ObjectMetadata metadata;

    /**
     * An optional pre-configured access control policy to use for the new object. Ignored in favor
     * of accessControlList, if present.
     */
    private CannedAccessControlList cannedAcl;

    /**
     * An optional access control list to apply to the new object. If specified, cannedAcl will be
     * ignored.
     */
    private AccessControlList accessControlList;

    /**
     * The optional Qcloud COS storage class to use when storing the new object. If not specified,
     * the default, standard storage class will be used.
     * 

* For more information on Qcloud COS storage classes and available values, see the * {@link StorageClass} enumeration. */ private String storageClass; /** The optional redirect location about an object */ private String redirectLocation; /** * The optional customer-provided server-side encryption key to use to encrypt the uploaded * object. */ private SSECustomerKey sseCustomerKey; /** * The optional COS Key Management system parameters to be used to encrypt the the object on the * server side. */ private SSECOSKeyManagementParams sseCOSKeyManagementParams; /** * traffic limit speed in second, the unit is bit/s */ private int trafficLimit = 0; /** * pic operations */ private PicOperations picOperations; /** * Constructs a new {@link AbstractPutObjectRequest} object to upload a file to the specified * bucket and key. After constructing the request, users may optionally specify object metadata * or a canned ACL as well. * * @param bucketName The name of an existing bucket to which the new object will be uploaded. * @param key The key under which to store the new object. * @param file The path of the file to upload to Qcloud COS. */ public AbstractPutObjectRequest(String bucketName, String key, File file) { this.bucketName = bucketName; this.key = key; this.file = file; } /** * Constructs a new {@link AbstractPutObjectRequest} object with redirect location. After * constructing the request, users may optionally specify object metadata or a canned ACL as * well. * * @param bucketName The name of an existing bucket to which the new object will be uploaded. * @param key The key under which to store the new object. * @param redirectLocation The redirect location of this new object. */ public AbstractPutObjectRequest(String bucketName, String key, String redirectLocation) { this.bucketName = bucketName; this.key = key; this.redirectLocation = redirectLocation; } /** * Constructs a new {@link AbstractPutObjectRequest} object to upload a stream of data to the * specified bucket and key. After constructing the request, users may optionally specify object * metadata or a canned ACL as well. *

* Content length for the data stream must be specified in the object metadata parameter; * Qcloud COS requires it be passed in before the data is uploaded. Failure to specify a content * length will cause the entire contents of the input stream to be buffered locally in memory so * that the content length can be calculated, which can result in negative performance problems. *

* * @param bucketName The name of an existing bucket to which the new object will be uploaded. * @param key The key under which to store the new object. * @param input The stream of data to upload to Qcloud COS. * @param metadata The object metadata. At minimum this specifies the content length for the * stream of data being uploaded. */ protected AbstractPutObjectRequest(String bucketName, String key, InputStream input, ObjectMetadata metadata) { this.bucketName = bucketName; this.key = key; this.inputStream = input; this.metadata = metadata; } /** * Gets the name of the existing bucket where this request will upload a new object to. In order * to upload the object, users must have {@link Permission#Write} permission granted. * * @return The name of an existing bucket where this request will upload a new object to. * * @see AbstractPutObjectRequest#setBucketName(String) * @see AbstractPutObjectRequest#withBucketName(String) */ public String getBucketName() { return bucketName; } /** * Sets the name of an existing bucket where this request will upload a new object to. In order * to upload the object, users must have {@link Permission#Write} permission granted. * * @param bucketName The name of an existing bucket where this request will upload a new object * to. In order to upload the object, users must have {@link Permission#Write} permission * granted. * * @see AbstractPutObjectRequest#getBucketName() * @see AbstractPutObjectRequest#withBucketName(String) */ public void setBucketName(String bucketName) { this.bucketName = bucketName; } /** * Sets the name of the bucket where this request will upload a new object to. Returns this * object, enabling additional method calls to be chained together. *

* In order to upload the object, users must have {@link Permission#Write} permission granted. * * @param bucketName The name of an existing bucket where this request will upload a new object * to. In order to upload the object, users must have {@link Permission#Write} permission * granted. * * @return This {@link AbstractPutObjectRequest}, enabling additional method calls to be chained * together. * * @see AbstractPutObjectRequest#getBucketName() * @see AbstractPutObjectRequest#setBucketName(String) */ public T withBucketName(String bucketName) { setBucketName(bucketName); @SuppressWarnings("unchecked") T t = (T) this; return t; } /** * Gets the key under which to store the new object. * * @return The key under which to store the new object. * * @see AbstractPutObjectRequest#setKey(String) * @see AbstractPutObjectRequest#withKey(String) */ public String getKey() { return key; } /** * Sets the key under which to store the new object. * * @param key The key under which to store the new object. * * @see AbstractPutObjectRequest#getKey() * @see AbstractPutObjectRequest#withKey(String) */ public void setKey(String key) { this.key = key; } /** * Sets the key under which to store the new object. Returns this object, enabling additional * method calls to be chained together. * * @param key The key under which to store the new object. * * @return This {@link AbstractPutObjectRequest}, enabling additional method calls to be chained * together. * * @see AbstractPutObjectRequest#getKey() * @see AbstractPutObjectRequest#setKey(String) */ public T withKey(String key) { setKey(key); @SuppressWarnings("unchecked") T t = (T) this; return t; } /** * Gets the optional Qcloud COS storage class to use when storing the new object. If not * specified, the default standard storage class is used when storing the object. *

* For more information on available Qcloud COS storage classes, see the {@link StorageClass} * enumeration. *

* * @return The Qcloud COS storage class to use when storing the newly copied object. * * @see AbstractPutObjectRequest#setStorageClass(String) * @see AbstractPutObjectRequest#setStorageClass(StorageClass) * @see AbstractPutObjectRequest#withStorageClass(StorageClass) * @see AbstractPutObjectRequest#withStorageClass(String) */ public String getStorageClass() { return storageClass; } /** * Sets the optional Qcloud COS storage class to use when storing the new object. If not * specified, the default standard storage class will be used when storing the new object. *

* For more information on Qcloud COS storage classes and available values, see the * {@link StorageClass} enumeration. *

* * @param storageClass The storage class to use when storing the new object. * * @see #getStorageClass() * @see #setStorageClass(String) * @see #withStorageClass(StorageClass) * @see #withStorageClass(String) */ public void setStorageClass(String storageClass) { this.storageClass = storageClass; } /** * Sets the optional Qcloud COS storage class to use when storing the new object. Returns this * {@link AbstractPutObjectRequest}, enabling additional method calls to be chained together. If * not specified, the default standard storage class will be used when storing the object. *

* For more information on Qcloud COS storage classes and available values, see the * {@link StorageClass} enumeration. *

* * @param storageClass The storage class to use when storing the new object. * * @return This {@link AbstractPutObjectRequest}, enabling additional method calls to be chained * together. * * @see AbstractPutObjectRequest#getStorageClass() * @see AbstractPutObjectRequest#setStorageClass(StorageClass) * @see AbstractPutObjectRequest#setStorageClass(String) * @see AbstractPutObjectRequest#withStorageClass(StorageClass) */ public T withStorageClass(String storageClass) { setStorageClass(storageClass); @SuppressWarnings("unchecked") T t = (T) this; return t; } /** * Sets the optional Qcloud COS storage class to use when storing the new object. If not * specified, the default standard storage class will be used when storing the object. *

* For more information on Qcloud COS storage classes and available values, see the * {@link StorageClass} enumeration. *

* * @param storageClass The storage class to use when storing the new object. * * @see #getStorageClass() * @see #setStorageClass(String) */ public void setStorageClass(StorageClass storageClass) { this.storageClass = storageClass.toString(); } /** * Sets the optional Qcloud COS storage class to use when storing the new object. Returns this * {@link AbstractPutObjectRequest}, enabling additional method calls to be chained together. If * not specified, the default standard storage class will be used when storing the object. *

* For more information on Qcloud COS storage classes and available values, see the * {@link StorageClass} enumeration. *

* * @param storageClass The storage class to use when storing the new object. * * @return This {@link AbstractPutObjectRequest}, enabling additional method calls to be chained * together. * * @see AbstractPutObjectRequest#getStorageClass() * @see AbstractPutObjectRequest#setStorageClass(StorageClass) * @see AbstractPutObjectRequest#setStorageClass(String) * @see AbstractPutObjectRequest#withStorageClass(String) */ public T withStorageClass(StorageClass storageClass) { setStorageClass(storageClass); @SuppressWarnings("unchecked") T t = (T) this; return t; } /** * Gets the path and name of the file containing the data to be uploaded to Qcloud COS. Either * specify a file or an input stream containing the data to be uploaded to Qcloud COS; both * cannot be specified. * * @return The path and name of the file containing the data to be uploaded to Qcloud COS. * * @see AbstractPutObjectRequest#setFile(File) * @see AbstractPutObjectRequest#withFile(File) * @see AbstractPutObjectRequest#setInputStream(InputStream) * @see AbstractPutObjectRequest#withInputStream(InputStream) */ @Override public File getFile() { return file; } /** * Sets the path and name of the file containing the data to be uploaded to Qcloud COS. Either * specify a file or an input stream containing the data to be uploaded to Qcloud COS; both * cannot be specified. * * @param file The path and name of the file containing the data to be uploaded to Qcloud COS. * * @see AbstractPutObjectRequest#getFile() * @see AbstractPutObjectRequest#withFile(File) * @see AbstractPutObjectRequest#getInputStream() * @see AbstractPutObjectRequest#withInputStream(InputStream) */ @Override public void setFile(File file) { this.file = file; } /** * Sets the file containing the data to be uploaded to Qcloud COS. Returns this * {@link AbstractPutObjectRequest}, enabling additional method calls to be chained together. *

* Either specify a file or an input stream containing the data to be uploaded to Qcloud COS; * both cannot be specified. * * @param file The file containing the data to be uploaded to Qcloud COS. * * @return This {@link AbstractPutObjectRequest}, enabling additional method calls to be chained * together. * * @see AbstractPutObjectRequest#getFile() * @see AbstractPutObjectRequest#setFile(File) * @see AbstractPutObjectRequest#getInputStream() * @see AbstractPutObjectRequest#setInputStream(InputStream) */ public T withFile(File file) { setFile(file); @SuppressWarnings("unchecked") T t = (T) this; return t; } /** * Gets the optional metadata instructing Qcloud COS how to handle the uploaded data (e.g. * custom user metadata, hooks for specifying content type, etc.). *

* If uploading from an input stream, always specify metadata with the content size set. * Otherwise the contents of the input stream have to be buffered in memory before being sent to * Qcloud COS. This can cause very negative performance impacts. *

* * @return The optional metadata instructing Qcloud COS how to handle the uploaded data (e.g. * custom user metadata, hooks for specifying content type, etc.). * * @see AbstractPutObjectRequest#setMetadata(ObjectMetadata) * @see AbstractPutObjectRequest#withMetadata(ObjectMetadata) */ public ObjectMetadata getMetadata() { return metadata; } /** * Sets the optional metadata instructing Qcloud COS how to handle the uploaded data (e.g. * custom user metadata, hooks for specifying content type, etc.). *

* If uploading from an input stream, always specify metadata with the content size set. * Otherwise the contents of the input stream have to be buffered in memory before being sent to * Qcloud COS. This can cause very negative performance impacts. *

* * @param metadata The optional metadata instructing Qcloud COS how to handle the uploaded data * (e.g. custom user metadata, hooks for specifying content type, etc.). * * @see AbstractPutObjectRequest#getMetadata() * @see AbstractPutObjectRequest#withMetadata(ObjectMetadata) */ public void setMetadata(ObjectMetadata metadata) { this.metadata = metadata; } /** * Sets the optional metadata instructing Qcloud COS how to handle the uploaded data (e.g. * custom user metadata, hooks for specifying content type, etc.). Returns this * {@link AbstractPutObjectRequest}, enabling additional method calls to be chained together. *

* If uploading from an input stream, always specify metadata with the content size set. * Otherwise the contents of the input stream have to be buffered in memory before being sent to * Qcloud COS. This can cause very negative performance impacts. *

* * @param metadata The optional metadata instructing Qcloud COS how to handle the uploaded data * (e.g. custom user metadata, hooks for specifying content type, etc.). * * @return This {@link AbstractPutObjectRequest}, enabling additional method calls to be chained * together. * * @see AbstractPutObjectRequest#getMetadata() * @see AbstractPutObjectRequest#setMetadata(ObjectMetadata) */ public T withMetadata(ObjectMetadata metadata) { setMetadata(metadata); @SuppressWarnings("unchecked") T t = (T) this; return t; } /** * Gets the optional pre-configured access control policy to use for the new object. * * @return The optional pre-configured access control policy to use for the new object. * * @see AbstractPutObjectRequest#setCannedAcl(CannedAccessControlList) * @see AbstractPutObjectRequest#withCannedAcl(CannedAccessControlList) */ public CannedAccessControlList getCannedAcl() { return cannedAcl; } /** * Sets the optional pre-configured access control policy to use for the new object. * * @param cannedAcl The optional pre-configured access control policy to use for the new object. * * @see AbstractPutObjectRequest#getCannedAcl() * @see AbstractPutObjectRequest#withCannedAcl(CannedAccessControlList) */ public void setCannedAcl(CannedAccessControlList cannedAcl) { this.cannedAcl = cannedAcl; } /** * Sets the optional pre-configured access control policy to use for the new object. Returns * this {@link AbstractPutObjectRequest}, enabling additional method calls to be chained * together. * * @param cannedAcl The optional pre-configured access control policy to use for the new object. * * @return This {@link AbstractPutObjectRequest}, enabling additional method calls to be chained * together. * * @see AbstractPutObjectRequest#getCannedAcl() * @see AbstractPutObjectRequest#setCannedAcl(CannedAccessControlList) */ public T withCannedAcl(CannedAccessControlList cannedAcl) { setCannedAcl(cannedAcl); @SuppressWarnings("unchecked") T t = (T) this; return t; } /** * Returns the optional access control list for the new object. If specified, cannedAcl will be * ignored. */ public AccessControlList getAccessControlList() { return accessControlList; } /** * Sets the optional access control list for the new object. If specified, cannedAcl will be * ignored. * * @param accessControlList The access control list for the new object. */ public void setAccessControlList(AccessControlList accessControlList) { this.accessControlList = accessControlList; } /** * Sets the optional access control list for the new object. If specified, cannedAcl will be * ignored. Returns this {@link AbstractPutObjectRequest}, enabling additional method calls to * be chained together. * * @param accessControlList The access control list for the new object. */ public T withAccessControlList( AccessControlList accessControlList) { setAccessControlList(accessControlList); @SuppressWarnings("unchecked") T t = (T) this; return t; } /** * Gets the input stream containing the data to be uploaded to Qcloud COS. The user of this * request must either specify a file or an input stream containing the data to be uploaded to * Qcloud COS; both cannot be specified. * * @return The input stream containing the data to be uploaded to Qcloud COS. Either specify a * file or an input stream containing the data to be uploaded to Qcloud COS, not both. * * @see AbstractPutObjectRequest#setInputStream(InputStream) * @see AbstractPutObjectRequest#withInputStream(InputStream) * @see AbstractPutObjectRequest#setFile(File) * @see AbstractPutObjectRequest#withFile(File) */ @Override public InputStream getInputStream() { return inputStream; } /** * Sets the input stream containing the data to be uploaded to Qcloud COS. Either specify a file * or an input stream containing the data to be uploaded to Qcloud COS; both cannot be * specified. * * @param inputStream The input stream containing the data to be uploaded to Qcloud COS. Either * specify a file or an input stream containing the data to be uploaded to Qcloud COS, * not both. * * @see AbstractPutObjectRequest#getInputStream() * @see AbstractPutObjectRequest#withInputStream(InputStream) * @see AbstractPutObjectRequest#getFile() * @see AbstractPutObjectRequest#withFile(File) */ @Override public void setInputStream(InputStream inputStream) { this.inputStream = inputStream; } /** * Sets the input stream containing the data to be uploaded to Qcloud COS. Returns this * {@link AbstractPutObjectRequest}, enabling additional method calls to be chained together. *

* Either specify a file or an input stream containing the data to be uploaded to Qcloud COS; * both cannot be specified. *

* * @param inputStream The InputStream containing the data to be uploaded to Qcloud COS. * * @return This PutObjectRequest, so that additional method calls can be chained together. * * @see AbstractPutObjectRequest#getInputStream() * @see AbstractPutObjectRequest#setInputStream(InputStream) * @see AbstractPutObjectRequest#getFile() * @see AbstractPutObjectRequest#setFile(File) */ public T withInputStream(InputStream inputStream) { setInputStream(inputStream); @SuppressWarnings("unchecked") T t = (T) this; return t; } /** * Sets the optional redirect location for the new object. * * @param redirectLocation The redirect location for the new object. */ public void setRedirectLocation(String redirectLocation) { this.redirectLocation = redirectLocation; } /** * Gets the optional redirect location for the new object. */ public String getRedirectLocation() { return this.redirectLocation; } /** * Sets the optional redirect location for the new object.Returns this * {@link AbstractPutObjectRequest}, enabling additional method calls to be chained together. * * @param redirectLocation The redirect location for the new object. */ public T withRedirectLocation(String redirectLocation) { this.redirectLocation = redirectLocation; @SuppressWarnings("unchecked") T t = (T) this; return t; } @Override public SSECustomerKey getSSECustomerKey() { return sseCustomerKey; } /** * Sets the optional customer-provided server-side encryption key to use to encrypt the uploaded * object. * * @param sseKey The optional customer-provided server-side encryption key to use to encrypt the * uploaded object. */ public void setSSECustomerKey(SSECustomerKey sseKey) { if (sseKey != null && this.sseCOSKeyManagementParams != null) { throw new IllegalArgumentException( "Either SSECustomerKey or SSECOSKeyManagementParams must not be set at the same time."); } this.sseCustomerKey = sseKey; } /** * Sets the optional customer-provided server-side encryption key to use to encrypt the uploaded * object, and returns the updated request object so that additional method calls can be chained * together. * * @param sseKey The optional customer-provided server-side encryption key to use to encrypt the * uploaded object. * * @return This updated request object so that additional method calls can be chained together. */ public T withSSECustomerKey(SSECustomerKey sseKey) { setSSECustomerKey(sseKey); @SuppressWarnings("unchecked") T t = (T) this; return t; } /** * Returns the COS Key Management System parameters used to encrypt the object on server side. */ @Override public SSECOSKeyManagementParams getSSECOSKeyManagementParams() { return sseCOSKeyManagementParams; } /** * Sets the COS Key Management System parameters used to encrypt the object on server side. */ public void setSSECOSKeyManagementParams(SSECOSKeyManagementParams params) { if (params != null && this.sseCustomerKey != null) { throw new IllegalArgumentException( "Either SSECustomerKey or SSECOSKeyManagementParams must not be set at the same time."); } this.sseCOSKeyManagementParams = params; } /** * Sets the COS Key Management System parameters used to encrypt the object on server side. * * @return returns the update PutObjectRequest */ public T withSSECOSKeyManagementParams( SSECOSKeyManagementParams sseCOSKeyManagementParams) { setSSECOSKeyManagementParams(sseCOSKeyManagementParams); @SuppressWarnings("unchecked") T t = (T) this; return t; } @Override public AbstractPutObjectRequest clone() { return (AbstractPutObjectRequest) super.clone(); } protected final T copyPutObjectBaseTo(T target) { copyBaseTo(target); final ObjectMetadata metadata = getMetadata(); return target.withAccessControlList(getAccessControlList()).withCannedAcl(getCannedAcl()) .withInputStream(getInputStream()) .withMetadata(metadata == null ? null : metadata.clone()) .withRedirectLocation(getRedirectLocation()).withStorageClass(getStorageClass()) .withSSECOSKeyManagementParams(getSSECOSKeyManagementParams()) .withSSECustomerKey(getSSECustomerKey()); } public int getTrafficLimit() { return trafficLimit; } public void setTrafficLimit(int trafficLimit) { this.trafficLimit = trafficLimit; } public PicOperations getPicOperations() { return picOperations; } public void setPicOperations(PicOperations picOperations) { this.picOperations = picOperations; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy