2014-04-25 48 views
1

我可以從本地上傳和下載谷歌雲存儲中的文件。 但是,當我在Google應用引擎上部署代碼時,我無法成功。 我認爲這可能是由於訪問限制,但不是爲其相應的項目打開存儲? 這裏是我的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 /谷歌/ API /客戶/ HTTP/HttpRequestInitializer 在COM。 google.appengine.tools.cloudstorage.oauth.OauthRawGcsServiceFactory。(OauthRawGcsServiceFactory.java:29) at com.google.appengine.tools.cloudstorage.GcsServiceFactory.createRawGcsService(GcsServiceFactory.java:42) at com.google.appengine.tools .cloudstorage.GcsServiceFactory.crea teGcsService(GcsServiceFactory.java:34) 在com.example.test.DataStorageTestServlet。(DataStorageTestServlet.java:23) 在sun.reflect.NativeConstructorAccessorImpl.newInstance0(本機方法) 在sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl。的java:57) 在sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 在java.lang.reflect.Constructor.newInstance(Constructor.java:526) 在java.lang.Class.newInstance(類。的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(SE rvletHolder.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) at org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157) com.google.apphosting。 org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157) com.google.apphosting.utils.servlet.JdbcMySqlConnectionCleanupFilter。 doFilter(JdbcMySqlConnectionCleanupFilter.java:60) at org.mortbay.jetty.servlet.ServletHandler $ Cache dChain.doFilter(ServletHandler.java:1157) at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43) at 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) at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext。 java:418) at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.handle(AppVersionHandlerMap.java:266) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) at org.mortbay.jetty.Server.handle(Server.java:326) at org.mortbay.jetty.HttpConnection.handleRequest( (HttpConnection.java:542) at 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) at com.google.tracing.TraceContext $ TraceContextRunnable.runInContext(TraceContext.java:437) at com.google.tracing.TraceContext $ TraceContextRunnable $ 1.run (TraceContext.java:444) at com.google.tracing.CurrentContext.runInContext(CurrentContext.java:188) at com.google.tracing.TraceContext $ AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:308) at com.google .tracing.TraceContext $ AbstractTraceContextCallback.runInInheritedContext器(Tr aceContext.java:300) at com.google.tracing.TraceContext $ TraceContextRunnable.run(TraceContext.java:441) at com.google.apphosting.runtime.ThreadGroupPool $ PoolEntry.run(ThreadGroupPool.java:251) at java.lang.Thread.run(Thread.java:724) 引起:java.lang.ClassNotFoundException:com.google.api.client.http.HttpRequestInitializer at com.google.appengine.runtime.Request.process-88de41dad2fa9368 (Request.java) at java.lang.ClassLoader.loadClass(ClassLoader.java:360) at com.google.appengine.tools.cloudstorage.oauth.OauthRawGcsServiceFactory。(OauthRawGcsServiceFactory.java:29) at com.google。 appengine.tools.cloudstorage.GcsServiceFactory.createRawGcsService(GcsServiceFactory.java:42) com.google.appeng ine.tools.cloudstorage.GcsServiceFactory.createGcsService(GcsServiceFactory.java:34) 在com.example.test.DataStorageTestServlet。(DataStorageTestServlet.java:23) 在sun.reflect.NativeConstructorAccessorImpl.newInstance0(本機方法) 在陽光下。 reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 在sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 在java.lang.reflect.Constructor.newInstance(Constructor.java:526) 在java的。 lang.Class.newInstance(Class.java:370) at org.mortbay.jetty.servlet.Holder.newInstance(Holder.java:153) at org.mortbay.jetty.servlet.ServletHolder.initServlet(ServletHolder.java: 428) at org.mort bay.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:339) at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487) at org.mortbay.jetty.servlet.ServletHandler $ CachedChain。 doFilter(ServletHandler.java:1166) at org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157) at 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) 的組織。 mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388) at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHan dler.java:216) at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) at org。 (org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) at org.mortbay.jetty.Server.handle(Server。 Java的:326) 在org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) 在org.mortbay.jetty.HttpConnection $ RequestHandler.headerComplete(HttpConnection.java:923) 在org.mortbay.jetty。 HttpConnection.handle(HttpConnection.java:404) at com.google.tracing.TraceContext $ TraceContextRunnable.runInContext(TraceContext。java:437) at com.google.tracing.TraceContext $ TraceContextRunnable $ 1.run(TraceContext.java:444) at com.google.tracing.CurrentContext.runInContext(CurrentContext.java:188) at 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更多

+0

你會得到什麼樣的錯誤? –

+0

@BrandonYarbrough嗨,謝謝你的回覆。這裏是日誌: – user3571315

回答

2

我剛發現有什麼問題。這很有趣。 我之前使用過google-gcs-client v0.39,並得到「class not found」錯誤。 然後,我改爲谷歌gcs客戶端v0.38,它的工作原理! 我認爲谷歌應用程序引擎現在不支持v0.39。

0

聽起來好像你沒有一些必要的OAuth和HTTP庫在你的\戰爭\ WEB-INF \ lib文件夾

您需要手動複製您使用到該文件夾​​中的所有庫,只是把他們到構建路徑就足夠了。

相關問題