App Engine Go Standard - API хранилища / изображений - PullRequest
0 голосов
/ 11 мая 2018

У меня проблемы с настройкой API обслуживающих изображений в сочетании с API Cloud Storage / Blobstore.

API изображений: https://cloud.google.com/appengine/docs/standard/go/images/

Прежде всего, я вообще не смог заставить его работать с dev_appserver. Он создает BlobKey, я могу найти его на сервере администратора, но журнал показывает:

Блоб с ключом 'encoded_gs_file: ZXBpbG90Z28uYXBwc3BvdC5jb20vZGF0YS9NYWNoaW5lcy8yNTk0Mzg2L2hlaWRlbGJlcmdfYmdfdjIucG5n' не существует * 100

В любом случае, я думал, что попробую это в App Engine, и здесь мне удалось заставить его работать, но мне нужен данный allUsers доступ владелец в противном случае я получаю:

«Ошибка API 1 (изображения: UNSPECIFIED_ERROR)»

Файлы, загруженные через gsutil как личные. Но я заметил, что Изображения должны быть публичными в хранилище? Или это ошибка, в документах ничего не найдено, просто serveURL будет общедоступным. Если allUsers просто иметь чтение доступ я получу:

«Ошибка API 7 (изображения: ACCESS_DENIED)»

Мой тестовый код, он просто получит первый файл из заданного пути и попытается получить serveURL:

ctx := appengine.NewContext(c.Request())
bucketName, err := file.DefaultBucketName(ctx)
if err != nil {
    log.Println(ctx, "failed to get default GCS bucket name: ", err)
    return c.JSON(http.StatusBadRequest, err.Error())
}
client, err := storage.NewClient(ctx)
if err != nil {
    log.Println(ctx, "failed to create client: %v", err)
    return c.JSON(http.StatusBadRequest, err.Error())
}
defer client.Close()
bucket := client.Bucket(bucketName)
files := []storage.ObjectAttrs{}
query := &storage.Query{Prefix: "PATHTOFILE"}
it := bucket.Objects(ctx, query)
for {
    obj, err := it.Next()
    if err == iterator.Done {
        break
    }
    if err != nil {
        log.Println("listBucket: unable to list bucket %q: %v", bucketName, err)
        return c.JSON(http.StatusBadRequest, err.Error())
    }
    files = append(files, *obj)
}
fileName := fmt.Sprintf("/gs/%s/%s", files[0].Bucket, files[0].Name)
blobKey, err := blobstore.BlobKeyForFile(ctx, fileName)
if err != nil {
    errorMessage := Model.ErrorResponseMessage{
        Message: "FailedToGetBlockKey",
        Info: []string{err.Error()},
    }
    errors.Errors = append(errors.Errors, errorMessage)
    return c.JSON(http.StatusBadRequest, errors)
}
options := image.ServingURLOptions{Secure:true, Size:600, Crop:false}
url, err := image.ServingURL(ctx, blobKey, &options)
if err != nil {
    errorMessage := Model.ErrorResponseMessage{
        Message: "FailedToGetServingURL",
        Info: []string{err.Error()},
    }
    errors.Errors = append(errors.Errors, errorMessage)
    return c.JSON(http.StatusBadRequest, errors)
}
return c.JSON(http.StatusOK, url)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...