Verificamos cada post de nuestro espacio con el objetivo de enseñarte siempre la información certera y actualizada.
Solución:
Finalmente logré PONER archivos en Google Cloud Storage usando URL firmadas. Esto se hizo creando un programa Java simple para simular:
Server
para firmar y codificar un string como firma.Uploader
como un usuario no autenticado que envía la solicitud PUT utilizando solo la firma proporcionada porServer
. El navegador se simula utilizando la biblioteca de cliente HTTP de Apache.
Puedes ver la aplicación de demostración aquí.
Realmente no entiendo por qué no funcionó cuando envié a través de la extensión Postman de Chrome.
Aunque el doc dice Content-Type
es opcional, en realidad significa que must
configurar correctamente content-Type
corresponden a su encabezado de solicitud http.
En este caso, debe agregar content-type: text/plain
en la firma string.
https://cloud.google.com/storage/docs/access-control/create-signed-urls-program
Tuve problemas con PUT y la URL firmada (con GAE Cloud Endpoints), pero estas son las dos cosas que tenía que hacer:
- Asegúrese de tener las últimas dependencias de gradle de GAE. Los generados automáticamente pero Android Studio no siempre son los últimos.
-
Para PUT necesitas tener tu string para firmar se ve así:
String url_signature = sign(verb + “n” + contentMD5 + “n” + contentType + “n” + caducidad + “n” + “/” + BUCKET_NAME + “/” + objectName );
Como se explica aquí: https://cloud.google.com/storage/docs/access-control/signed-urls el formato es:
StringToSign = HTTP_Verb + "n" +
Content_MD5 + "n" +
Content_Type + "n" +
Expiration + "n" +
Canonicalized_Extension_Headers +
Canonicalized_Resource
Esos retornos “n” son importantes. Si tiene demasiados o no los suficientes, obtendrá ese error. Si no está pasando un contentMD5, por ejemplo, simplemente pase en un vacío string para que obtenga el número correcto de retorno “n”
Si aceptas, eres capaz de dejar un artículo acerca de qué te ha parecido este ensayo.