Search in sources :

Example 1 with RepeatableFileInputStream

use of com.aliyun.oss.common.comm.io.RepeatableFileInputStream in project aliyun-oss-java-sdk by aliyun.

the class OSSObjectOperation method writeObjectInternal.

private <RequestType extends PutObjectRequest, ResponseType> ResponseType writeObjectInternal(WriteMode mode, RequestType originalRequest, ResponseParser<ResponseType> responseParser) {
    final String bucketName = originalRequest.getBucketName();
    final String key = originalRequest.getKey();
    InputStream originalInputStream = originalRequest.getInputStream();
    ObjectMetadata metadata = originalRequest.getMetadata();
    if (metadata == null) {
        metadata = new ObjectMetadata();
    }
    assertParameterNotNull(bucketName, "bucketName");
    assertParameterNotNull(key, "key");
    ensureBucketNameValid(bucketName);
    ensureObjectKeyValid(key);
    ensureCallbackValid(originalRequest.getCallback());
    InputStream repeatableInputStream = null;
    if (originalRequest.getFile() != null) {
        File toUpload = originalRequest.getFile();
        if (!checkFile(toUpload)) {
            getLog().info("Illegal file path: " + toUpload.getPath());
            throw new ClientException("Illegal file path: " + toUpload.getPath());
        }
        metadata.setContentLength(toUpload.length());
        if (metadata.getContentType() == null) {
            metadata.setContentType(Mimetypes.getInstance().getMimetype(toUpload, key));
        }
        try {
            repeatableInputStream = new RepeatableFileInputStream(toUpload);
        } catch (IOException ex) {
            logException("Cannot locate file to upload: ", ex);
            throw new ClientException("Cannot locate file to upload: ", ex);
        }
    } else {
        assertTrue(originalInputStream != null, "Please specify input stream or file to upload");
        if (metadata.getContentType() == null) {
            metadata.setContentType(Mimetypes.getInstance().getMimetype(key));
        }
        try {
            repeatableInputStream = newRepeatableInputStream(originalInputStream);
        } catch (IOException ex) {
            logException("Cannot wrap to repeatable input stream: ", ex);
            throw new ClientException("Cannot wrap to repeatable input stream: ", ex);
        }
    }
    Map<String, String> headers = new HashMap<String, String>();
    populateRequestMetadata(headers, metadata);
    populateRequestCallback(headers, originalRequest.getCallback());
    Map<String, String> params = new LinkedHashMap<String, String>();
    populateWriteObjectParams(mode, originalRequest, params);
    RequestMessage httpRequest = new OSSRequestMessageBuilder(getInnerClient()).setEndpoint(getEndpoint()).setMethod(WriteMode.getMappingMethod(mode)).setBucket(bucketName).setKey(key).setHeaders(headers).setParameters(params).setInputStream(repeatableInputStream).setInputSize(determineInputStreamLength(repeatableInputStream, metadata.getContentLength())).setOriginalRequest(originalRequest).build();
    List<ResponseHandler> reponseHandlers = new ArrayList<ResponseHandler>();
    reponseHandlers.add(new OSSCallbackErrorResponseHandler());
    final ProgressListener listener = originalRequest.getProgressListener();
    ResponseType result = null;
    try {
        publishProgress(listener, ProgressEventType.TRANSFER_STARTED_EVENT);
        if (originalRequest.getCallback() == null) {
            result = doOperation(httpRequest, responseParser, bucketName, key, true);
        } else {
            result = doOperation(httpRequest, responseParser, bucketName, key, true, null, reponseHandlers);
        }
        publishProgress(listener, ProgressEventType.TRANSFER_COMPLETED_EVENT);
    } catch (RuntimeException e) {
        publishProgress(listener, ProgressEventType.TRANSFER_FAILED_EVENT);
        throw e;
    }
    return result;
}
Also used : ResponseHandler(com.aliyun.oss.common.comm.ResponseHandler) LinkedHashMap(java.util.LinkedHashMap) HashMap(java.util.HashMap) RepeatableFileInputStream(com.aliyun.oss.common.comm.io.RepeatableFileInputStream) IOUtils.newRepeatableInputStream(com.aliyun.oss.common.utils.IOUtils.newRepeatableInputStream) CheckedInputStream(java.util.zip.CheckedInputStream) ByteArrayInputStream(java.io.ByteArrayInputStream) ProgressInputStream(com.aliyun.oss.event.ProgressInputStream) InputStream(java.io.InputStream) ArrayList(java.util.ArrayList) IOException(java.io.IOException) RepeatableFileInputStream(com.aliyun.oss.common.comm.io.RepeatableFileInputStream) LinkedHashMap(java.util.LinkedHashMap) ProgressListener(com.aliyun.oss.event.ProgressListener) RequestMessage(com.aliyun.oss.common.comm.RequestMessage) ClientException(com.aliyun.oss.ClientException) ObjectMetadata(com.aliyun.oss.model.ObjectMetadata) IOUtils.checkFile(com.aliyun.oss.common.utils.IOUtils.checkFile) File(java.io.File)

Aggregations

ClientException (com.aliyun.oss.ClientException)1 RequestMessage (com.aliyun.oss.common.comm.RequestMessage)1 ResponseHandler (com.aliyun.oss.common.comm.ResponseHandler)1 RepeatableFileInputStream (com.aliyun.oss.common.comm.io.RepeatableFileInputStream)1 IOUtils.checkFile (com.aliyun.oss.common.utils.IOUtils.checkFile)1 IOUtils.newRepeatableInputStream (com.aliyun.oss.common.utils.IOUtils.newRepeatableInputStream)1 ProgressInputStream (com.aliyun.oss.event.ProgressInputStream)1 ProgressListener (com.aliyun.oss.event.ProgressListener)1 ObjectMetadata (com.aliyun.oss.model.ObjectMetadata)1 ByteArrayInputStream (java.io.ByteArrayInputStream)1 File (java.io.File)1 IOException (java.io.IOException)1 InputStream (java.io.InputStream)1 ArrayList (java.util.ArrayList)1 HashMap (java.util.HashMap)1 LinkedHashMap (java.util.LinkedHashMap)1 CheckedInputStream (java.util.zip.CheckedInputStream)1