2013-12-02 2 views
1

Я загрузить изображение с S3, используя их SDK следующим образом:Отменить GetObjectRequest Amazon S3

s3Client.getObject(new GetObjectRequest("a24images", s3FileURLString), file); 

Однако, я ничего не могу найти в документации, чтобы указать, как:

• отменить запрос
• приостановить запрос

Любые советы по осуществлению отмены и паузы по этим запросам будут оценены, пожалуйста.

+0

как вы отменили запрос? –

ответ

0

Насколько я знаю,:

S3Object object = s3.getObject(new GetObjectRequest(bucketname, key)); 

даст вам обработчик объекта. Кроме того, Вы должны были бы прочитать объект либо в файловой системе или выходной поток, как это:

InputStream is = object.getObjectContent(); 
    int read = 0; 
    byte[] bytes = new byte[BYTES_DOWNLOAD]; 
    OutputStream os = response.getOutputStream(); 
    while ((read = is.read(bytes)) != -1) { 
     os.write(bytes, 0, read); 
    } 
    os.flush(); 
    os.close(); 

в то время как петля выше будет на самом деле читать объект из S3, и в этом случае преобразовать его в OutputStream.

Возможно, вам захочется взглянуть на контроль цикла while с логическим значением, которое вы можете установить, где бы вы ни нуждались, чтобы отменить этот запрос.

Это то, что вам нужно достичь? Или у меня вопрос неправильный?

Этот ответ соответствует с java sdk.

Благодаря

+0

Линия кода, предоставленная мной, напрямую загружает файл в диск - я предполагаю, что Amazon оптимизировал этот процесс, поэтому я не хочу перезаписывать его своей собственной реализацией. – RunLoop

0

попробуйте с этим.

myS3Client.shutdown(); 

, но я сделал ручной трекинг я просто взять одну булеву и когда пользователь пытается отменить, то это будет ложью, и время, когда загрузка с s3 просто проверить погоду это правда или ложь, если ложно, то я удалить этот файл с моей стороны в sdcard.

+1

Я просто хочу отменить запрос, а не выключить клиент – RunLoop

+0

, а затем использовать многостраничную загрузку вместо запроса на получение запроса. Я пытаюсь добиться того же, но не могу получить успех, тогда я использую ручное отслеживание :) –

1

Предложен вариант getObject метода, который вы используете, не может позволить для отмены, но если вы просто использовать более основной s3Client.getObject( new GetObjectRequest(bucketName, key)); то это должно просто дать вам ссылку на входной поток, как уже упомянутой Санкет ,

Существует не очень много «оптимизация» делается здесь, но если вы хотите, чтобы увидеть или повторно использовать код, который сам Amazon использует его здесь:

https://github.com/aws/aws-sdk-java/blob/master/src/main/java/com/amazonaws/services/s3/internal/ServiceUtils.java?source=c#L236