将 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 传输文件:
您可以使用类似这样的方式将 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 是更便宜的选项(可能更慢),但两者都应该有效。
我正在尝试删除我的应用程序对 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 传输文件:
您可以使用类似这样的方式将 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 是更便宜的选项(可能更慢),但两者都应该有效。