部署时无法从Google云端存储上载和下载文件

时间:2014-04-25 03:07:40

标签: java google-app-engine google-cloud-storage

我可以在本地上传和下载谷歌云存储中的文件。 但是,当我在谷歌应用引擎上部署代码时,我无法成功。 我认为可能是由于访问限制,但是对于相应的项目,存储是否打开? 这是我的java代码:

public class DataStorageTestServlet extends HttpServlet {
    private final GcsService gcsService = GcsServiceFactory.createGcsService(RetryParams.getDefaultInstance());
    public void doGet(HttpServletRequest req, HttpServletResponse resp)
        throws IOException {
        resp.setContentType("text/plain");
        byte[] file = {1, 2, 3, 4, 5, 6};
        GcsFilename fileName = new GcsFilename("charlie-first-bucket", "a");
        writeToFile(fileName, file);
        resp.getWriter().println(readFromFile(fileName));
    }

以下是日志状态:

/ datastoragetest出错 java.lang.NoClassDefFoundError:com / google / api / client / http / HttpRequestInitializer     在com.google.appengine.tools.cloudstorage.oauth.OauthRawGcsServiceFactory。(OauthRawGcsServiceFactory.java:29)     在com.google.appengine.tools.cloudstorage.GcsServiceFactory.createRawGcsService(GcsServiceFactory.java:42)     在com.google.appengine.tools.cloudstorage.GcsServiceFactory.createGcsService(GcsServiceFactory.java:34)     在com.example.test.DataStorageTestServlet。(DataStorageTestServlet.java:23)     at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)     at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)     at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)     at java.lang.reflect.Constructor.newInstance(Constructor.java:526)     在java.lang.Class.newInstance(Class.java:370)     在org.mortbay.jetty.servlet.Holder.newInstance(Holder.java:153)     在org.mortbay.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:428)     在org.mortbay.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:339)     在org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)     在org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1166)     在com.google.apphosting.utils.servlet.ParseBlobUploadFilter.doFilter(ParseBlobUploadFilter.java:125)     在org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157)     在com.google.apphosting.runtime.jetty.SaveSessionFilter.doFilter(SaveSessionFilter.java:35)     在org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157)     在com.google.apphosting.utils.servlet.JdbcMySqlConnectionCleanupFilter.doFilter(JdbcMySqlConnectionCleanupFilter.java:60)     在org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157)     在com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)     在org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157)     在org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)     在org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)     在org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)     在org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)     在org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)     在com.google.apphosting.runtime.jetty.AppVersionHandlerMap.handle(AppVersionHandlerMap.java:266)     在org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)     在org.mortbay.jetty.Server.handle(Server.java:326)     在org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)     at org.mortbay.jetty.HttpConnection $ RequestHandler.headerComplete(HttpConnection.java:923)     在com.google.apphosting.runtime.jetty.RpcRequestParser.parseAvailable(RpcRequestParser.java:76)     在org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)     在com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:146)     在com.google.apphosting.runtime.JavaRuntime $ RequestRunnable.run(JavaRuntime.java:446)     在com.google.tracing.TraceContext $ TraceContextRunnable.runInContext(TraceContext.java:437)     在com.google.tracing.TraceContext $ TraceContextRunnable $ 1.run(TraceContext.java:444)     在com.google.tracing.CurrentContext.runInContext(CurrentContext.java:188)     在com.google.tracing.TraceContext $ AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:308)     在com.google.tracing.TraceContext $ AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:300)     在com.google.tracing.TraceContext $ TraceContextRunnable.run(TraceContext.java:441)     在com.google.apphosting.runtime.ThreadGroupPool $ PoolEntry.run(ThreadGroupPool.java:251)     在java.lang.Thread.run(Thread.java:724) 引起:java.lang.ClassNotFoundException:com.google.api.client.http.HttpRequestInitializer     在com.google.appengine.runtime.Request.process-88de41dad2fa9368(Request.java)     at java.lang.ClassLoader.loadClass(ClassLoader.java:360)     在com.google.appengine.tools.cloudstorage.oauth.OauthRawGcsServiceFactory。(OauthRawGcsServiceFactory.java:29)     在com.google.appengine.tools.cloudstorage.GcsServiceFactory.createRawGcsService(GcsServiceFactory.java:42)     在com.google.appengine.tools.cloudstorage.GcsServiceFactory.createGcsService(GcsServiceFactory.java:34)     在com.example.test.DataStorageTestServlet。(DataStorageTestServlet.java:23)     at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)     at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)     at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)     at java.lang.reflect.Constructor.newInstance(Constructor.java:526)     在java.lang.Class.newInstance(Class.java:370)     在org.mortbay.jetty.servlet.Holder.newInstance(Holder.java:153)     在org.mortbay.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:428)     在org.mortbay.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:339)     在org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)     在org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1166)     在org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157)     在org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157)     在org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157)     在org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157)     在org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)     在org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)     在org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)     在org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)     在org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)     在org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)     在org.mortbay.jetty.Server.handle(Server.java:326)     在org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)     at org.mortbay.jetty.HttpConnection $ RequestHandler.headerComplete(HttpConnection.java:923)     在org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)     在com.google.tracing.TraceContext $ TraceContextRunnable.runInContext(TraceContext.java:437)     在com.google.tracing.TraceContext $ TraceContextRunnable $ 1.run(TraceContext.java:444)     在com.google.tracing.CurrentContext.runInContext(CurrentContext.java:188)     在com.google.tracing.TraceContext $ AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:308)     在com.google.tracing.TraceContext $ AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:300)     在com.google.tracing.TraceContext $ TraceContextRunnable.run(TraceContext.java:441)     ......还有1个

2 个答案:

答案 0 :(得分:2)

我刚刚发现了什么问题。这很有趣。 之前我使用过google-gcs-client v0.39,并且找不到#34;找不到类#34;错误。 然后我改为谷歌-gcs-client v0.38,它的工作原理! 我认为谷歌应用引擎现在不支持v0.39。

答案 1 :(得分:0)

听起来你的\ war \ WEB-INF \ lib文件夹中没有一些必需的oauth和http库

您需要手动将您使用的所有库复制到该文件夹​​中,只需将它们放到构建路径即可。