Tenemos la mejor respuesta que encontramos por todo internet. Nuestro deseo es que te sea de mucha ayuda y si deseas aportar algo que nos pueda ayudar a crecer siéntete libre de hacerlo..
Solución:
@SheRey: mirando las carpetas creadas a través de la interfaz web de GCS, el tipo de contenido está configurado en application/x-www-form-urlencoded;charset=UTF-8
pero en realidad no importa. Esto es lo que funcionó para mí en python:
# pip install google-cloud-storage
from google.cloud import storage
gcs_client = storage.Client(project='some_project')
bucket = gcs_client.get_bucket('some_bucket')
blob = bucket.blob('some/folder/name/')
blob.upload_from_string('', content_type='application/x-www-form-urlencoded;charset=UTF-8')
Google Cloud Storage no tiene carpetas ni subdirectorios. Sin embargo, hay algo de soporte para emularlos. How Subdirectories Work de gsutil es una buena lectura para algunos antecedentes.
Los objetos de Google Cloud Storage son un espacio de nombres plano, pero muchas herramientas, incluidas gsutil y la interfaz de usuario de Google Cloud Storage, crean la ilusión de un árbol de archivos jerárquico.
Hay dos convenciones ampliamente utilizadas para crear la ilusión de un subdirectorio vacío:
-
(recomendado) Cree un objeto que termine en una barra inclinada final. Por ejemplo, para crear un subdirectorio llamado
foo
en la raíz de un cubo, crearía un objeto vacío (tamaño 0) llamadofoo/
. -
(legado) Crea un objeto con
_$folder$
adjunto al nombre. Por ejemplo, para crear un subdirectorio llamadofoo
en la raíz de un cubo, crearía un objeto vacío (tamaño 0) llamadofoo_$folder$
.
Tenga en cuenta que la mayoría de las herramientas y utilidades están utilizando el método 1 ahora. El método 2 se usa con menos frecuencia.
Node.js
+ @google-cloud/[email protected]^2.5.0
:
Lo único que necesita hacer es asignar un destino como:
patrón.
Para el siguiente ejemplo, estoy usando uuid
como mi nombre de carpeta para simular que cada usuario tiene una carpeta para almacenar sus propios archivos.
it('should upload file and create a folder correctly', async () =>
const myStorage = new Storage( keyFilename: path.resolve(__dirname, '../../../.gcp/cloud-storage-admin.json') );
const bucket = myStorage.bucket('ez2on');
const fileName = 'mmczblsq.doc';
const filePath = path.resolve(__dirname, `../../../tmp/$fileName`);
const uuid = faker.random.uuid();
await bucket.upload(filePath,
destination: `$uuid/$fileName`,
gzip: true,
metadata:
cacheControl: 'public, max-age=31536000'
);
);
El resultado es:
Aquí están los documentos API para @google-cloud/storage
: https://googleapis.dev/nodejs/storage/latest/Bucket.html#upload
Go
+ cloud.google.com/go/storage
package main
import (
"cloud.google.com/go/storage"
"context"
"fmt"
"github.com/google/uuid"
"google.golang.org/api/option"
"io"
"log"
"os"
)
func main()
ctx := context.Background()
opts := option.ClientOption(
option.WithCredentialsFile(os.Getenv("CredentialsFile")),
)
client, err := storage.NewClient(ctx, opts)
if err != nil
log.Fatalf("%v", err)
filename := "mmczblsq.doc"
filepath := fmt.Sprintf("./tmp/%s", filename)
file, err := os.Open(filepath)
if err != nil
log.Fatalf("%v", err)
defer file.Close()
uuidIns, err := uuid.NewUUID()
if err != nil
log.Fatalf("%v", err)
object := fmt.Sprintf("%s/%s", uuidIns, filename)
log.Printf("object name: %s", object)
wc := client.Bucket("ez2on").Object(object).NewWriter(ctx)
if _, err := io.Copy(wc, file); err != nil
log.Fatalf("%v", err)
if err := wc.Close(); err != nil
log.Fatalf("%v", err)
Salida de salida estándar:
☁ upload [master] ⚡ CredentialsFile=/Users/ldu020/workspace/github.com/mrdulin/nodejs-gcp/.gcp/cloud-storage-admin.json go run main.go
2019/07/08 14:47:59 object name: 532a2250-a14c-11e9-921d-8a002870ac01/mmczblsq.doc
Verifique el archivo en la consola de la plataforma de la nube de Google: