当前位置: 首页 > 知识库问答 >
问题:

Google Appengine&云存储:AppIdentity服务抛出意外错误

屠瑞
2023-03-14

我试图通过使用GCSExampleServlet.java遵循Google的示例来设置Google云存储文件上传。我已经完成了所有步骤,但当我将项目部署到aggengine并试图在GCS中上传一个简单的文本时,它失败了,出现了以下日志:

com.google.appengine.tools.cloudstorage.NonRetriableException: com.google.appengine.tools.cloudstorage.NonRetriableException: com.google.appengine.api.appidentity.AppIdentityServiceFailureException: 
The AppIdentity service threw an unexpected error. Details: 
at com.google.appengine.tools.cloudstorage.RetryHelper.doRetry(RetryHelper.java:120)
at com.google.appengine.tools.cloudstorage.RetryHelper.runWithRetries(RetryHelper.java:166)
at com.google.appengine.tools.cloudstorage.RetryHelper.runWithRetries(RetryHelper.java:156)
at com.google.appengine.tools.cloudstorage.GcsServiceImpl.createOrReplace(GcsServiceImpl.java:70)
at com.appart.storage.server.GcsExampleServlet.doPost(GcsExampleServlet.java:88)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
(...)

尽管如此,代码中没有任何复杂的地方...在web.xml中,我配置了servlet:

<servlet>
  <servlet-name>GcsExample</servlet-name>
    <servlet-class>
      com.example.server.GcsExampleServlet
    </servlet-class>
</servlet>
<servlet-mapping>
  <servlet-name>GcsExample</servlet-name>
  <url-pattern>/gcs/*</url-pattern>
</servlet-mapping>
@SuppressWarnings("serial")
public class GcsExampleServlet extends HttpServlet {

  private final GcsService gcsService = GcsServiceFactory.createGcsService(new RetryParams.Builder()
      .initialRetryDelayMillis(10)
      .retryMaxAttempts(10)
      .totalRetryPeriodMillis(15000)
      .build());     
  //...
  @Override
  public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException 
  {
    GcsOutputChannel outputChannel =
    gcsService.createOrReplace(getFileName(req), GcsFileOptions.getDefaultInstance());
    copy(req.getInputStream(), Channels.newOutputStream(outputChannel));
  }

  private void copy(InputStream input, OutputStream output) throws IOException {
    try {
      byte[] buffer = new byte[BUFFER_SIZE];
      int bytesRead = input.read(buffer);
      while (bytesRead != -1) {
        output.write(buffer, 0, bytesRead);
        bytesRead = input.read(buffer);
      }
    } finally {
      input.close();
      output.close();
    }
  }
}
<form action="/upload.html" enctype="text/plain" method="get" name="putFile" id="putFile">
   <div>
        Bucket: <input type="text" name="bucket" />
        File Name: <input type="text" name="fileName" />
        <br /> File Contents: <br />
        <textarea name="content" id="content" rows="3" cols="60"></textarea>
        <br />
        <input type="submit" onclick='uploadFile(this)' value="Upload Content" />
   </div>
</form>
<script>

  function uploadFile() {
    var bucket = document.forms["putFile"]["bucket"].value;
    var filename = document.forms["putFile"]["fileName"].value;
    if (bucket == null || bucket == "" || filename == null || filename == "") {
      alert("Both Bucket and FileName are required");
      return false;
    } else {
      var postData = document.forms["putFile"]["content"].value;
      document.getElementById("content").value = null;

      var request = new XMLHttpRequest();
      request.open("POST", "/gcs/" + bucket + "/" + filename, false);
      request.setRequestHeader("Content-Type", "text/plain;charset=UTF-8");
      request.send(postData);
    }
  }
</script>

我已经启用了计费,创建了一个bucket,但AppIdentity错误仍然出现。我没有Oauth,云存储API已经启用,用于上传的appengine帐户对bucket有写访问权限。我甚至试过

gsutil acl ch -u warm-particle-718@appspot.gserviceaccount.com:WRITE gs://ctrlxbucket

以确保用户对我的bucket具有写访问权限。

请帮我弄清楚这个错误是什么意思,我已经在这里呆了几天了:(

共有1个答案

燕翼
2023-03-14

不要使用warm-particle-718@appspot.gserviceaccount.com,请尝试使用XXX@developer.gserviceaccount.com(将XXX替换为应用程序的项目id--取自管理控制台“管理/应用程序设置”中的“Google API Console project Number”)。

 类似资料:
  • 这会给出以下输出{“error”:{“error”:[{“domain”:“global”,“reason”:“autherror”,“message”:“invalid credentials”,“locationtype”:“header”,“location”:“authorization”}],“code”:401,“message”:“invalid credentials”}} 有人能

  • 试图调试这个简单的NodeJS socketIO服务器。 我在启动时不断收到以下错误消息。我看不出代码有什么问题。 TypeError:侦听器必须是服务器上Namespace.EventEmitter.AddListener(Events.js:130:11)处的TypeError()处的函数。(匿名函数)[如上](/users/foo/bin/node_modules/socket.io/lib

  • 我试图从GCS读取文件。以下是我创建的方法。我在一些服务层中使用这个方法。因为这个方法中的一些调用是静态的和最终的,因为我的单元测试失败了。 以下是地面军事系统存储的代码: 我正试图为同样的问题编写Junit测试。但是文件。类是最终类,用于我收到空指针异常。 期待尽快收到你们的来信。

  • 阿里云存储服务(OpenStorageService,简称OSS),是阿里云对外提供的海量,安全,低成本,高可靠的云存储服务。用户可以通过简单的REST接口,在任何时间、任何地点、任何互联网设备上进行上传和下载数据,也可以使用WEB页面对数据进行管理。同时,OSS提供Java、 Python、 PHP、C#语言的SDK,简化用户的编程。基于OSS,用户可以搭建出各种多媒体分享网站、网盘、个人和企业

  • 在运行时显示错误在Gradle错误: 错误:任务“:app:TransformClassesWithInstantRunForderBug”的执行失败。 意外输入:ImmutableJarInput{name=com.google.android.gms:play services base:9.0.0,file=/home/nawaf/AndroidStudioProjects/YugiohDe

  • 问题内容: 这是我包含传播算子的代码 我需要安装或添加哪些东西才能使其运行? 以及它的等效含义是什么? 问题答案: 您需要配置Babel以使用transform-object-rest- spread插件。有关详细信息,请参见以下链接:https : //babeljs.io/docs/plugins/transform-object-rest- spread/