【问题标题】:GAE Blobstore Error: NOT_FOUND servletGAE Blobstore 错误:NOT_FOUND servlet
【发布时间】:2014-10-20 08:02:53
【问题描述】:

我正在尝试使用 BlobstoreService 来将图像上传到我的应用程序。 根据 GAE API,您应该这样做:

<form action="<%= blobstoreService.createUploadUrl("/upload") %>" method="post" enctype="multipart/form-data">
    <input type="file" name="myFile">
    <input type="submit" value="Submit">
</form>

我的问题是我无法使用 JSP,因为我正在使用 phonegap 创建一个 android 应用程序并且不支持 JSP,所以我以另一种方式执行此操作,我有一个 servlet 接收请求,生成 URL 并转发对生成的 URL 的请求如下:

GetBlobstoreServiceUrlServlet:

String url = blobstoreService.createUploadUrl("/AddDogPictureServlet");
int ahUploadIndex = url.indexOf("/_ah/upload");
url = url.substring(ahUploadIndex);
ServletContext context = getServletContext();
RequestDispatcher rd = context.getRequestDispatcher(url);
rd.forward(request, response);

当我在本地计算机上运行它时,它运行良好,但是当我将它上传到 GAE 时,我只在这个 servlet 上收到“错误:NOT_FOUND”。

我还有其他 serlet,它们都工作正常。

我检查了 web.xml 文件和正确映射的 servlet(否则它不会在本地工作):

<servlet>
    <servlet-name>GetBlobstoreServiceUrlServlet</servlet-name>
    <servlet-class>Servlets.BlobstoreServlets.GetBlobstoreServiceUrlServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>GetBlobstoreServiceUrlServlet</servlet-name>
    <url-pattern>/GetBlobstoreServiceUrlServlet</url-pattern>
</servlet-mapping>

还有其他方法可以实现这个目标吗?

【问题讨论】:

    标签: java google-app-engine servlets blobstore


    【解决方案1】:

    问题在于,在生产环境中,生成的 Blob 上传 URL (createUploadUrl(..)) 位于与您的应用服务器不同的服务器上。 OTOH requestDispatcher.forward(..) 只能在同一个 servlet 容器中工作。这适用于开发服务器,因为 blob 上传 url 是模拟的并在同一个 servlet 容器中运行。

    解决办法是:

    1. 通过 Url Fetch 转发整个请求(这会发出一个全新的传出 Http 请求),或者
    2. 最好分两步进行上传:首先从服务器获取上传 url,然后将 blob 上传到该 url。

    【讨论】:

    • 嘿,非常感谢,它分两步工作,获取 URL 然后提交到这个 URL。
    猜你喜欢
    • 2012-07-07
    • 2015-12-11
    • 1970-01-01
    • 2023-04-07
    • 2012-10-12
    • 1970-01-01
    • 1970-01-01
    • 2013-04-06
    • 1970-01-01
    相关资源
    最近更新 更多