将 xml 文件上传到 Google Cloud Storage 时出错

尼拉布·辛格

我想将文件上传到 Google Cloud Storage,但是出现如下错误:

java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkNotNull

我想上传到 Google Cloud Storage 的 xml 文件格式:

<set xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">

文件和谷歌存储桶,我想将文件上传到存储桶。

字符串文件名 = "data.xml"

String fileBucket = "上传文件";

 public static void uploadFile(String fileName, String fileBucket)
            throws IOException {
        final GcsService gcsService = GcsServiceFactory.createGcsService(new RetryParams.Builder()
                .initialRetryDelayMillis(10)
                .retryMaxAttempts(10)
                .totalRetryPeriodMillis(50000)//15000
                .build());
        gcsService.createOrReplace(
                new GcsFilename(fileBucket, fileName),
                new GcsFileOptions.Builder().mimeType("application/xml")
                        .acl("public-read")
                        .cacheControl("public, max-age=0").build());
    }

获取错误如下:

Jan 29, 2019 6:49:31 AM com.google.api.server.spi.SystemService invokeServiceMethod
SEVERE: exception occurred while calling backend method
java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkNotNull(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;
    at com.google.appengine.tools.cloudstorage.GcsFileOptions$Builder.checkNotEmpty(GcsFileOptions.java:252)
    at com.google.appengine.tools.cloudstorage.GcsFileOptions$Builder.mimeType(GcsFileOptions.java:173)
    at com.vivoiz.healofy.backend.v2.helpers.utils.AppUtilities.uploadFileToGCS(AppUtilities.java:168)
    at com.vivoiz.healofy.backend.v2.apis.InternalApis.uploadFile(InternalApis.java:578)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.google.api.server.spi.SystemService.invokeServiceMethod(SystemService.java:351)
    at com.google.api.server.spi.handlers.EndpointsMethodHandler$RestHandler.handle(EndpointsMethodHandler.java:119)
    at com.google.api.server.spi.handlers.EndpointsMethodHandler$RestHandler.handle(EndpointsMethodHandler.java:102)
    at com.google.api.server.spi.dispatcher.PathDispatcher.dispatch(PathDispatcher.java:50)
    at com.google.api.server.spi.EndpointsServlet.service(EndpointsServlet.java:72)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
    at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:867)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1623)
    at com.googlecode.objectify.ObjectifyFilter.doFilter(ObjectifyFilter.java:48)
INFO     2019-01-29 06:49:31,105 module.py:861] v2: "GET /_ah/api/internalapis/v1/uploadFile HTTP/1.1" 503 454
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1610)
    at com.google.appengine.tools.development.devappserver2.RequestIdFilter.doFilter(RequestIdFilter.java:36)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1610)
    at com.google.appengine.tools.development.ResponseRewriterFilter.doFilter(ResponseRewriterFilter.java:134)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1610)
    at com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:34)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1610)
    at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:48)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1610)
    at com.google.appengine.tools.development.jetty9.StaticFileFilter.doFilter(StaticFileFilter.java:123)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1602)
    at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:540)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:146)
    at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:524)
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
    at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:257)
    at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1588)
    at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:255)
    at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1345)
    at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:203)
    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:480)
    at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1557)
    at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:201)
    at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1247)
    at com.google.appengine.tools.development.jetty9.DevAppEngineWebAppContext.doScope(DevAppEngineWebAppContext.java:94)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:144)
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
    at com.google.appengine.tools.development.jetty9.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:595)
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
    at org.eclipse.jetty.server.Server.handle(Server.java:502)
    at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:364)
    at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:260)
    at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:305)
    at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)
    at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:118)
    at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:333)
    at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:310)
    at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:168)
    at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.produce(EatWhatYouKill.java:132)
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:765)
    at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:683)
    at java.lang.Thread.run(Thread.java:748)
安德烈·库斯尼尔

要将文件上传到 Google Cloud Storage,您需要这些StorageOptions服务。您可以查看有关Uploading Objects的文档

这会将Hello, Cloud Storage!字符串上传blob_name名为bucket. 您只需根据项目需要更改名称即可。

上传您的本地文件之一。创建一个函数,该函数将读取文件的数据并将它们返回给将数据上传到存储桶的主函数。

我自己做了一些编码和以下代码,成功上传了包含您上面提到的数据的文件。


读取文件的函数:

它将从本地存储(例如 Cloud Shell)读取文件,并返回所有数据。

private String readFile(){
      // The name of the file to open.
        String fileName = "PATH/TO/THE/FILE/THAT/IS/GOING/TO/BE/UPLOADED/FILE_NAME/xml";

        // This will reference one line at a time
        String line = null;
        // This will be the full file after reading
        String output = "";

        try {
            // FileReader reads text files in the default encoding.
            FileReader fileReader = 
                new FileReader(fileName);

            // Always wrap FileReader in BufferedReader.
            BufferedReader bufferedReader = 
                new BufferedReader(fileReader);

            while((line = bufferedReader.readLine()) != null) {
                System.out.println(line);
                output = output + line;
            }   

            // Always close files.
            bufferedReader.close();         
        }
        catch(FileNotFoundException ex) {
            System.out.println(
                output = output + "Unable to open file '" + fileName + "'";         
        }
        catch(IOException ex) {
            System.out.println( 
                output = output + "Error reading file '" + fileName + "'";         
        }

      return output;
  }

上传功能:

它将使用将从文件中读取的所有数据并将它们上传到存储桶中的新文件。文档代码之间的区别在于...readFile().getBytes(UTF_8)...调用的位置。我们添加了将返回所有上传数据的函数,而不是字符串。

public String uploadFile(){

        String bucket_name = "BUCKET_NAME";
        String file_name = "PATH/TO/WHERE/THE/FILE/WILL/BE/UPLOADED/FILE_NAME.xml"

        Storage storage = StorageOptions.getDefaultInstance().getService();
        BlobId blobId = BlobId.of(bucket_name, file_name);
        BlobInfo blobInfo = BlobInfo.newBuilder(blobId).setContentType("text/plain").build();
        Blob blob = storage.create(blobInfo, readFile().getBytes(UTF_8));
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将 Excel 上传到 Google Cloud Storage 时出错

使用Flask将文件上传到Google Cloud Storage

Alamofire无法将文件上传到Google Cloud Storage

将文件上传到Google Cloud Storage:500后端错误

将.raw文件上传到Google Cloud Storage

使用 Codeigniter 将文件上传到 Google Cloud Storage

使用 For 循环将多个文件上传到 Google Cloud Storage

在node.js中将文件上传到Google Cloud Storage时出错

将文件上传到Google Cloud Storage而不在本地下载文件?

使用Google App Engine(Python)将文件上传到Google Cloud Storage

使用Google App Engine将大文件上传到Google Cloud Storage

将图像从Google Cloud Function上传到Cloud Storage

使用JSON API将文件上传到Google Cloud Storage,错误401未经授权

将文件直接上传到Google Cloud Storage for GAE应用

使用PHP和Ajax将文件上传到Google Cloud Storage Bucket

将Python文件上传到Google Cloud Storage Bucket返回管道中断错误

如何使用JSON API和CloseableHttpClient将文件上传到Google Cloud Storage存储桶?

使用 Node.js 将文件上传到 Google Cloud Storage(已声明“bucketName”)

使用Python将文件上传到Google Cloud Storage签名的URL

将python对象上传到Google Cloud Storage,而不保存到文件中

使用Python将文件上传到Google Cloud Storage Bucket子目录

无法从Django将文件上传到Google Cloud Storage(本地Windows ENV

从Localhost或外部服务器将文件上传到Google Cloud Storage

使用C#中的HMAC密钥将文件上传到Google Cloud Storage

如何将文件上传到 Google Cloud Storage Bucket 子目录

将文件从Firebase Cloud Functions上传到Cloud Storage

使用“gsutil”从 Cloud Storage 存储分区上传到 Google Colab 时出错

自动将数据上传到 Google Cloud Storage 和 BigQuery

使用Java通过Google App Engine将文件上传到Google Cloud Storage :(无此类文件或目录)