将解析文件迁移到Google云端存储

时间:2016-02-14 00:43:59

标签: java google-app-engine servlets parse-platform google-cloud-storage

我试图删除我的应用程序对Parse Backend的依赖,因为它将停止使用。

我已经开始将所有内容转移到Google App Engine上,该应用现在正常运行。

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

我想获取这些文件(.mp4和.png)并将其移至Google云端存储。

我知道如何上传/提供文件到云存储。

我不知道如何通过托管在其他位置的网址将文件上传到云端存储。

    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);

是否有人成功将文件从云中的网址上传到GCS而不是其设备上的实际文件?

我无法使用开发人员控制台中的Cloud Storage Transfer Service从URL传输文件,因为此解决方案是手动解决方案。

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

3 个答案:

答案 0 :(得分:1)

您可以使用开发人员控制台中的云存储传输服务从URL传输文件:

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

答案 1 :(得分:0)

您可以使用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 ();
}

这是未经测试的,因此可能需要进行一些更改。

答案 2 :(得分:0)

不使用cloud storage transfer service我必须从网址下载该文件,以便将其上传到GCS,并更新数据存储区中的实体。

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

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

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

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