我尝试使用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时,我得到了错误:NOT_FOUND&#34;只在这个servlet上。
我有其他血清,所有这些都很好。
我检查了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>
有没有其他方法可以实现这一目标?
答案 0 :(得分:0)
问题在于,在生产环境中,生成的blob上传Urls(createUploadUrl(..)
)位于与您的应用服务器分开的服务器上。 OTOH requestDispatcher.forward(..)
仅在同一个servlet容器中工作。这适用于开发服务器,因为blob上传URL是在同一个servlet容器中模拟和运行的。
解决方案是: