android - listobjects - s3 putobject params
Aws S3 TransferService Carga fallida sin errores (1)
Un cambio reciente en v2.2.12 conserva solo una referencia débil de oyentes de transferencia registrados. El usuario es responsable de mantener el oyente de transferencia hasta que finalice la transferencia. La intención es evitar la pérdida de memoria. Sin embargo, su uso no está claramente documentado. Planeamos ajustarlo en lanzamientos futuros. Manténganse al tanto.
Implementé el núcleo AWS y S3 SDK para manejar la carga de archivos. Lamentablemente, la carga no funciona correctamente a veces. (parece ser solo bajo conexión wifi, pero no estoy 100% seguro de ese hecho)
Por algún motivo desconocido, el servicio aws recibe una respuesta exitosa aunque el archivo no haya terminado de cargarse y todo se cuelga.
Veo que se inició el servicio de transferencia y, por ejemplo, el primer archivo comienza a cargarse correctamente y finaliza, pero el segundo nunca termina de cargarse y TransferService se detiene silenciosamente sin que yo reciba ningún error a través de los escuchas de transferencia ... he habilitado los registros de depuración por aws para ver si puedo obtener más información a través de
java.util.logging.Logger.getLogger("com.amazonaws").setLevel(java.util.logging.Level.FINEST);
Y aquí hay un registro de carga en el que la primera carga del archivo fue exitosa y la segunda fallida: simplemente empiezo el siguiente archivo cuando el primero lo notifica completo. (sin nombres de paquetes y marcas de tiempo para un análisis más fácil):
D/AwsUploadManager: Uploading file: /storage/emulated/0/folder/profile20160219_123233.jpg
D/AwsUploadManager: Uploading under key: 56cb00d2121bbfcc0e8c68e7-843f1417-3f44-4d76-915d-f3a72c56a7d4
D/AwsUploadManager: AwsUploadManager 56cb00d2121bbfcc0e8c68e7-843f1417-3f44-4d76-915d-f3a72c56a7d4
D/TransferSerivce: Starting Transfer Service
D/TransferSerivce: Loading transfers from database
D/TransferSerivce: 1 transfers are loaded from database
W/TransferSerivce: Transfer has already been added: 6
D/TransferSerivce: Network connected: true
D/AwsUploadManager: onStateChanged IN_PROGRESS
D/AwsUploadManager: onProgressChanged id= 6 ::bytesCurrent0 bytesTotal16917
D/com.amazonaws.request: Sending Request: PUT.........
D/libc: [NET] android_getaddrinfofornet+,hn 41(0x6369616f2d696d),sn(),hints(known),family 0,flags 4
D/libc: [NET] android_getaddrinfofornet-, err=8
D/libc: [NET] android_getaddrinfofornet+,hn 41(0x6369616f2d696d),sn(),hints(known),family 0,flags 1024
D/libc: [NET] android_getaddrinfofornet-, pass to proxy
D/libc: [NET] android_getaddrinfo_proxy+
D/libc: [NET] android_getaddrinfo_proxy get netid:0
D/libc: [NET] android_getaddrinfo_proxy-, success
D/AwsUploadManager: onProgressChanged id= 6 ::bytesCurrent16917 bytesTotal16917
D/com.amazonaws.request: Received successful response: 200, AWS Request ID: 85952ED0E0FCF444
D/AwsUploadManager: onProgressChanged id= 6 ::bytesCurrent16917 bytesTotal16917
D/AwsUploadManager: onStateChanged COMPLETED
D/AwsUploadManager: Upload finished: 56cb00d2121bbfcc0e8c68e7-843f1417-3f44-4d76-915d-f3a72c56a7d4
D/AwsUploadManager: Uploaded url: https://server-name.s3.eu-central-1.amazonaws.com/56cb00d2121bbfcc0e8c68e7-843f1417-3f44-4d76-915d-f3a72c56a7d4
D/AwsUploadManager: Uploading file: /storage/emulated/0/folder/profile20160219_122512.jpg
D/AwsUploadManager: Uploading under key: 56cb00d2121bbfcc0e8c68e7-7ea27f9e-0e48-4fde-81a1-7d72383ada2d
D/AwsUploadManager: AwsUploadManager 56cb00d2121bbfcc0e8c68e7-7ea27f9e-0e48-4fde-81a1-7d72383ada2d
D/AwsUploadManager: onStateChanged IN_PROGRESS
D/AwsUploadManager: onProgressChanged id= 7 ::bytesCurrent0 bytesTotal1930575
D/com.amazonaws.request: Sending Request: PUT https://server-name.s3.eu-central-1.amazonaws.com /56cb00d2121bbfcc0e8c68e7-7ea27f9e-0e48-4fde-81a1-7d72383ada2d Headers: (x-amz-decoded-content-length: 1930575, Content-MD5....
D/AwsUploadManager: onProgressChanged id= 7 ::bytesCurrent655360 bytesTotal1930575
D/AwsUploadManager: onProgressChanged id= 7 ::bytesCurrent1048576 bytesTotal1930575
D/AwsUploadManager: onProgressChanged id= 7 ::bytesCurrent1310720 bytesTotal1930575
D/AwsUploadManager: onProgressChanged id= 7 ::bytesCurrent1703936 bytesTotal1930575
D/com.amazonaws.request: Received successful response: 200, AWS Request ID: DE9670A8450D4BAB
**D/TransferSerivce: Stop self** --And here amazon stopped self without notifying registered listeners about transfer..
El código utilizado para invocar la carga:
TransferObserver transferObserver = mTransferUtility.upload(BUCKET_NAME, fileKey, file);
transferObserver.setTransferListener(new TransferListener() {...}
Todo es estándar de muestras, excepto que estoy usando un método de autenticación estándar con credencial de clave pub / sec en lugar de Cognito.
mAwsCredentials = new BasicAWSCredentials(mContext.getString(R.string.aws_accress_key), context.getString(R.string.aws_secret_key));
mAmazonS3Client = new AmazonS3Client(mAwsCredentials);
mAmazonS3Client.setRegion(com.amazonaws.regions.Region.getRegion(REGION));
mTransferUtility = new TransferUtility(mAmazonS3Client, mContext);
Por cierto, este problema a veces ocurre en la primera carga del archivo a veces en la 3ra. No está relacionada con la cantidad de archivos que intento cargar. También a veces, el onProgressChanged se activa solo una vez antes de que se cuelgue la carga y puedo ver Recibido respuesta exitosa y Detenerse después.
La pregunta: ¿Alguien ha experimentado este problema antes y con qué podría estar relacionado? Estoy experimentando esto con relativa frecuencia (cada dos por tres) y, por lo tanto, no estoy seguro si su red está relacionada. Incluso si lo es, esperaba que Amazon manejara adecuadamente los errores de la red o al menos notificara a los oyentes registrados. Además, revisé algunos códigos fuente y sus documentos me dieron la sensación de que manejan los problemas de red de manera adecuada, así que estoy pensando que estoy haciendo algo terriblemente malo de mi parte.