我正在使用“google-api-services-storage-v1beta2-rev5-java-1.15.0-rc.zip”Google云端存储库以及here中的“StorageSample.java”示例程序
我已按照示例程序的设置说明进行操作,并设置了“client_secrets.json”和“sample_settings.json”文件。示例程序编译正常,但只能部分运行。
我修改了“StorageSample.java”程序的“uploadObject”方法,以便上传我创建的测试文件(而不是上传随机生成的文件)。该程序在以下方法中运行正常:
tryCreateBucket();
getBucket();
listObjects();
getObjectMetadata();
但是,运行“uploadObject(true)”方法时,出现以下错误
================== Uploading object. ==================
Forbidden
我修改过的“uploadObject”方法如下所示:
private static void uploadObject(boolean useCustomMetadata) throws IOException {
View.header1("Uploading object.");
File file = new File("My_test_upload_file.txt");
if (!file.exists() || !file.isFile()) {
System.out.println("File does not exist");
System.exit(1);
}
InputStream inputStream = new FileInputStream(file);
long byteCount = file.length();
InputStreamContent mediaContent = new InputStreamContent("application/octet-stream", inputStream);
mediaContent.setLength(byteCount);
StorageObject objectMetadata = null;
if (useCustomMetadata) {
List<ObjectAccessControl> acl = Lists.newArrayList(); // empty acl (seems default acl).
objectMetadata = new StorageObject()
.setName("myobject")
.setMetadata(ImmutableMap.of("key1", "value1", "key2", "value2"))
.setAcl(acl)
.setContentDisposition("attachment");
}
Storage.Objects.Insert insertObject = storage.objects().insert("mybucket", objectMetadata, mediaContent);
if (!useCustomMetadata) {
insertObject.setName("myobject");
}
if (mediaContent.getLength() > 0 && mediaContent.getLength() <= 2 * 1000 * 1000 /* 2MB */) {
insertObject.getMediaHttpUploader().setDirectUploadEnabled(true);
}
insertObject.execute();
}
在程序的第一次运行中,创建了一个存储桶,上传创建的测试文件时出现“禁止”错误。在随后的运行中,“禁止”错误仍然存在。
我认为由于程序创建了存储桶,程序应该有足够的访问权限将文件上传到该存储桶。
我错过了任何设置/操作吗?谢谢你的任何建议。
答案 0 :(得分:3)
程序现在运行正常。