【问题标题】:The API package 'file' or call 'Create()' was not found未找到 API 包“文件”或调用“Create()”
【发布时间】:2015-08-13 23:26:07
【问题描述】:

我正在尝试使用 blobstore API,但出现此错误:

com.google.api.server.spi.SystemService invokeServiceMethod:调用支持的方法时发生异常 com.google.apphosting.api.ApiProxy$CallNotFoundException:未找到 API 包“文件”或调用“创建()”。 在 java.lang.Thread.getStackTrace(Thread.java:1589) 在 com.google.apphosting.api.ApiProxy.makeSyncCall(ApiProxy.java:116) 在 com.google.apphosting.api.ApiProxy.makeSyncCall(ApiProxy.java:65) 在 com.google.appengine.api.files.FileServiceImpl.makeSyncCall(FileServiceImpl.java:590) 在 com.google.appengine.api.files.FileServiceImpl.create(FileServiceImpl.java:512) 在 com.google.appengine.api.files.FileServiceImpl.createNewBlobFile(FileServiceImpl.java:111) 在 com.listecourses.model.ListeModelEndpoint.insertListeModel(ListeModelEndpoint.java:182) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:45) 在 com.google.api.server.spi.SystemService.invokeServiceMethod(SystemService.java:359) 在 com.google.api.server.spi.SystemServiceServlet.execute(SystemServiceServlet.java:113) 在 com.google.api.server.spi.SystemServiceServlet.doPost(SystemServiceServlet.java:71) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:637) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 在 org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) 在 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) 在 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:230) 在 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) 在 java.lang.Thread.run(Thread.java:745)

我使用这个代码:

@ApiMethod(name = "insertListeModel", httpMethod = "POST")
public ListeModel insertListeModel(ListeModel listemodel) {
    EntityManager mgr = getEntityManager();
    try {
        if (containsListeModel(listemodel)) {
            throw new EntityExistsException("Object already exists");
        }




        FileService fileService = FileServiceFactory.getFileService();
        if(listemodel.getImage()!=null && !listemodel.getImage().equals(""))
        {
            byte[] data = listemodel.getImage();




            String mimeType = "image/png";

            // save data to Google App Engine Blobstore 

            listemodel.setImage(null);
            mgr.persist(listemodel);
            AppEngineFile file;
                file = fileService.createNewBlobFile(mimeType,"LM_"+listemodel.getId());
                FileWriteChannel writeChannel = fileService.openWriteChannel(file, true);
                writeChannel.write(java.nio.ByteBuffer.wrap(data));
                writeChannel.closeFinally();

                // your blobKey to your data in Google App Engine BlobStore
                BlobKey blobKey = fileService.getBlobKey(file);

                // THANKS TO BLOBKEY YOU CAN GET FOR EXAMPLE SERVING URL FOR IMAGES

                //  UploadOptions uploadOptions = UploadOptions.Builder
                //          .withGoogleStorageBucketName("photobucket11");

                // Get the image serving URL (in https:// format)
                String imageUrl = ImagesServiceFactory.getImagesService().getServingUrl(ServingUrlOptions.Builder.withBlobKey(blobKey).secureUrl(true));

                //       ImagesService imagesService = ImagesServiceFactory
                //               .getImagesService();
                //      ServingUrlOptions servingOptions = ServingUrlOptions.Builder
                //               .withBlobKey(blobKey);

                //       String imageUrl = imagesService.getServingUrl(servingOptions);

                if(listemodel.getIdBlobkey()!=null)
                {
                    BlobKey blobKeytmp= new BlobKey(listemodel.getIdBlobkey());
                    final AppEngineFile f = fileService.getBlobFile(blobKeytmp);

                    if(f.isReadable())
                    {

                        if(f.hasFinalizedName())
                        {
                            fileService.delete(f); // Problematic line
                        }
                    }

                }

                listemodel.setAvatar(imageUrl);
                listemodel.setIdBlobkey(blobKey.getKeyString());
        }

                mgr.persist(listemodel);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();


            } finally {
                mgr.close();
            }
            return listemodel;
        }

你能帮帮我吗?

【问题讨论】:

  • 找到解决方案了吗?如果是,请分享。甚至面临同样的问题。

标签: google-app-engine blobstorage


【解决方案1】:

文件 API 似乎在 2013 年被弃用,今年终于被禁用。见:https://cloud.google.com/appengine/docs/deprecations/files_api

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-21
    • 2015-02-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多