Я создаю данные на сервере (gae), и я хочу сохранить его в Blobstore. Я видел много ответов о том, как это сделать, указывая URL-адрес BlobStore для клиента, но клиент или HTTP-запрос отсутствуют: это просто асинхронная задача.Загрузка серверной части в Blobstore - Java Google Appengine
Тогда я думаю, я должен использовать createUploadUrl(), и вместо того, чтобы дать этот URL клиенту, от моего кода HTTP POST мои данные к нему через URL Fetch. Это выглядит странно, для этого нет другого API?
Предположим, что файлы, которые я хочу в Blobstore, уже сохранены в моем контейнере по умолчанию GCS. Могу ли я просто сообщить Blobstore о них, используя расположение gcs «/ gs/bucketname/file»? Я попробовал это,
GcsFilename filename = new GcsFilename(bucketName, fileId);
String gcsKey = "/gs/" + bucketName + "/" + filename.getObjectName();
BlobKey blobKey = blobstoreService.createGsBlobKey(gcsKey);
GcsOutputChannel outputChannel = gcsService.createOrReplace(filename, GcsFileOptions.getDefaultInstance());
ObjectOutputStream oout = new ObjectOutputStream(Channels.newOutputStream(outputChannel));
oout.writeObject(myDataObjectToPersist);
oout.close();
// ...at some other point I have checked the file is correctly stored in
// GCS and I can fetch it using /gs/bucket/fileId
// but it doesn't seem to be in Blobstore, so when
InputStream stream = new BlobstoreInputStream(new BlobKey(blobKey.keyString))
// ... this gives a BlobstoreInputStream$BlobstoreIOException: BlobstoreInputStream received an invalid blob key...
Является ли это что-то концептуально неправильно - как если я использую GcsOutputChannel, чтобы сохранить его я не буду получать его от Blobstore даже если я создаю BlobKey, или что-то, что может работать, но Я просто сделал что-то не так?
1K благодаря
Есть много причин, которые можно было бы хотеть. Это как спросить, какие преимущества Blobstore, не так ли? :) Но если вы скажете, что я могу создать URL-адрес загрузки для любого файла в GCS, то это дает меньшую выгоду. В моем случае это также требования и унаследованные причины. Я думаю, что fetchData даст мне то, что я хочу, спасибо. И о моем вопросе 1, я думаю, вы подтверждаете, что единственное, что я могу сделать, это HTTP-сообщение из моего приложения-сервера. –
Да, нет никакого способа написать прямо в blobstore. Файлы api, которые раньше делали это, теперь устарели (https://cloud.google.com/appengine/docs/java/googlecloudstorageclient/migrate). – ozarov