Google cloud storage &引用;“禁止”;通过Google云存储API上载文件时出错

Google cloud storage &引用;“禁止”;通过Google云存储API上载文件时出错,google-cloud-storage,Google Cloud Storage,我正在使用“google-api-services-storage-v1beta2-rev5-java-1.15.0-rc.zip”谷歌云存储库以及来自 我按照示例程序的设置说明设置了“client_secrets.json”和“sample_settings.json”文件。示例程序编译正常,但仅部分正常运行 我修改了“StorageSample.java”程序的“uploadObject”方法,以便它上载我创建的测试文件(而不是上载随机生成的文件)。程序按以下方法正常运行: tryCreat

我正在使用“google-api-services-storage-v1beta2-rev5-java-1.15.0-rc.zip”谷歌云存储库以及来自

我按照示例程序的设置说明设置了“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();
}
private static void uploadObject(布尔useCustomMetadata)引发IOException{
视图.header1(“上载对象”);
File File=新文件(“My_test_upload_File.txt”);
如果(!file.exists()| |!file.isFile()){
System.out.println(“文件不存在”);
系统出口(1);
}
InputStream InputStream=新文件InputStream(文件);
long byteCount=file.length();
InputStreamContent mediaContent=新的InputStreamContent(“应用程序/八位字节流”,inputStream);
mediaContent.setLength(字节数);
StorageObject objectMetadata=null;
如果(使用自定义元数据){
List acl=Lists.newArrayList();//空acl(似乎是默认acl)。
objectMetadata=新的StorageObject()
.setName(“myobject”)
.setMetadata(不可变映射,共有(“key1”、“value1”、“key2”、“value2”))
.setAcl(acl)
.setContentDisposition(“附件”);
}
Storage.Objects.Insert insertObject=Storage.Objects().Insert(“mybucket”、objectMetadata、mediaContent);
如果(!useCustomMetadata){
insertObject.setName(“myobject”);
}

如果(mediaContent.getLength()>0&&mediaContent.getLength()哦,真是一个粗心的错误。我忘了将“mybucket”名称更改为我创建的bucket的名称


该程序现在运行正常。

我也在尝试这样做,但它不适用于大文件,但在谷歌提供的给定示例中,它似乎适用于大文件(如注释所示为100MB)。你知道怎么做吗?非常感谢