Tengo una URL de carga prefirmada de AWS S3 para cargar un archivo de video. Probando en Postman el video se subió con éxito. Sin embargo, recibo un 403 devuelto cuando lo implemento en la actualización. No puedo usar la carga de varias partes para esta tarea.
llamada de servicio :
@Headers("Content-Type: video/mp4") @PUT fun uploadTaskAWS(@Url awsUrl: String, @Body filePart: RequestBody): Call<ResponseBody>subir:
val file = File(task.file_path) val requestFile = RequestBody.create(MediaType.parse("video/mp4"), file) val response = awsTaskUploadService.uploadTaskAWS(task.upload_url, requestFile)Me he asegurado de que la URL sea correcta. El encabezado del tipo de contenido también se agrega, se adjunta una captura de pantalla del cartero. Obtener el error prohibido 403
captura de pantalla del cartero
Encontré esta pregunta relacionada, sin embargo, sigo recibiendo un 403. Cargue un archivo en la URL prefirmada de AWS S3 usando Retrofit2
¿Alguna sugerencia?
La solución fue incluir varias partes y esperar una respuesta única, no una llamada:
@Multipart @PUT fun uploadAsset( @Header(CONTENT_TYPE) contentType: String, @Url uploadUrl: String, @Part file: MultipartBody.Part ): Single<ResponseBody>donde se pasa contentType
val requestFile = RequestBody.create(MediaType.parse(contentType), file) val body = MultipartBody.Part.createFormData(mediaType, task.file_name, requestFile) assetService.uploadAsset(contentType, task.upload_url, body)El error 403 significa que el servidor sabe quién es usted pero no tiene la autoridad para realizar la acción deseada.
Si la URL prefirmada se genera correctamente, debería poder cargar sin ninguna autenticación.
Puede verificar si el cartero está agregando de forma predeterminada cualquier autenticación de AWS para solicitar
También debe configurar explícitamente la versión del protocolo al firmar las solicitudes si carga en una región que usa solo la versión 4.