替换 FileService Api 以在服务器端创建 Blob 文件

Replacing the FileService Api to create a Blob file in server side

我正在使用 FileService Api 从服务器端将文件保存到 Blobstore,如下所示:

    FileService fileService = FileServiceFactory.getFileService();
    AppEngineFile file = null;
    file = fileService.createNewBlobFile(contentType, fileName);

    boolean lock = true;
    FileWriteChannel writeChannel = null;
    writeChannel = fileService.openWriteChannel(file, lock);

    ByteBuffer bb = ByteBuffer.wrap(FILE_BYTES);
    writeChannel.write(bb);
    writeChannel.closeFinally();
    BlobKey blobKey = fileService.getBlobKey(file);
    return blobKey.getKeyString();

但是 FileService Api 将在今年 (2015) 7 月前退出 File Api Service Turndown

我正在寻找执行此操作的替代方法。我需要从服务器端的 byte[] 创建一个文件并将其保存到 blobstore。

我知道并使用 createUploadUrl 选项从客户端上传和保存文件到 blobstore

    BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
    url = blobstoreService.createUploadUrl("/upload", uploadOptions);

但我需要的是在服务器端创建和保存文件,作为 FileService Api do/did.

我已经在迁移文档中搜索了 JAVA,但没有其他选择。唯一的选择是通过 POST 和 createUploadUrl

如有任何帮助,我们将不胜感激。感谢阅读。

由于 Blobstore 即将永久关闭,您需要开始使用 Google 云存储。

Google Cloud Storage Client Library 与 App Engine 完全集成,可以轻松迁移到另一个 API。

将对象保存到云存储后,您可以生成一个以对象名称开头的 BlobKey。

GcsFilename gcs_file = /* your uploaded file */;
String cloudStorageURL = "/gs/" + gcs_file.getBucketName() + "/" + gcs_file.getObjectName();
BlobstoreService bs = BlobstoreServiceFactory.getBlobstoreService();
return bs.createGsBlobKey(cloudStorageURL);

通过这种方式,您无需更改整个代码(可能还有数据存储区),因为您继续使用 BlobKey 对象作为文件标识符。