将 Parse 文件迁移到 Google 云存储

Migrate Parse files to Google Cloud Storage

我正在尝试删除我的应用程序对 Parse Backend 的依赖,因为它将被停用。

我已经开始将所有内容转移到 Google App Engine 上,应用程序现在在那里运行良好。

但是,当应用程序进行 BETA 测试时,我仍然有一些文件托管在 Parse 上。

我想获取这些文件(.mp4 和 .png)并将它们移动到 Google 云存储。

我知道如何upload/serve 文件到云存储。

我不知道如何将文件从托管在不同位置的 URL 上传到云存储。

    HTTPRequest request = new HTTPRequest(new URL(uploadURL), HTTPMethod.POST);
    request.setHeader(new HTTPHeader("Content-type", "multipart/form-data"));

    byte[] data = ?? how do I convert URL to byte array

    request.setPayload(data);

    HTTPResponse response = URLFetchServiceFactory.getURLFetchService().fetch(request);

有没有人成功地将文件从云端 url 上传到 GCS 而不是他们设备上的实际文件?


我无法使用 Developers Console 中的 Cloud Storage Transfer Service 从 URL 传输文件,因为此解决方案是手动解决方案。

我需要一个解决方案,允许我在将文件上传到 Cloud Storage 后浏览一个大列表(位于解析数据库)并更新 App Engine 数据存储中的条目。

您可以使用 Developers Console 中的 Cloud Storage Transfer Service 从 URL 传输文件:

https://cloud.google.com/storage/transfer/#urls

您可以使用类似这样的方式将 URL 的内容通过 GCS Java Client 流式传输到 GCS 中的文件中(您可以在本地执行此操作以避免使用 GAE 资源):

GcsFilename fileName = new GcsFilename("MyBucket", "MyObject");
URL url = new URL("http://example.com/path/to/file");

GcsService gcsService = GcsServiceFactory.createGcsService(RetryParams.getDefaultInstance());

try {
  GcsOutputChannel outputChannel = gcsService.createOrReplace(fileName, GcsFileOptions.getDefaultInstance());
  ObjectOutputStream outputStream = new ObjectOutputStream(Channels.newOutputStream(outputChannel));
  InputStream inputStream = url.openStream();
  byte[] buffer = new byte[4096];  // Use any buffer size desired

  int bytesRead;
  while ((bytesRead = inputStream.read(buffer)) > 0) {
    outputStream.write(buffer, 0, bytesRead);
  }
  outputStream.close();
}
catch (IOException e) {
  e.printStackTrace ();
}

尽管这尚未经过测试,因此可能需要进行一些更改。

在不使用 cloud storage transfer service 的情况下,我不得不从 url 下载文件,以便将其上传到 GCS,并更新数据存储中的实体。

所以我可以选择两种方式中的一种。

1) 使用 Google Compute Engine 启动虚拟机以下载文件,将其重新上传到 Google 云存储,并更新数据存储中实体的文件位置。

2) 为 iPhone 模拟器编写一些代码来处理下载、上传和更新数据存储中的实体。

选项 2 是更便宜的选项(可能更慢),但两者都应该有效。