当我转到https://appengine.google.com/blobstore/时,我看到图片已上传(参见blob viewer)。
在产品模式中:
在Chrome开发工具中,当我提交表单以上传图片时,我发现该表单处于“待定”状态。这封邮件的目的是帮助我理解失败的原因。在网络选项卡中,我有以下标题:
请求
URL:http://www.mananaseguro.com/_ah/upload/AMmfu6aImWsEdAeiy_FVrscqQiRoRSvjK2QSX6thgKTaMk4nKLbiJg86RrocrzAqWj2X2vi1gKrY_Yvr2kSQNpFMwxBiUFa1Tk5oEVZGjhMm_9SavhOAjNoteylbfLT7aZ5dUYMaDR2N/ALBNUaYAAAAAUeJL86BP_9txQLF54r96AvYfm1Nuw90l/
Request Headersview source
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Content-Type:multipart/form-data; boundary=----WebKitFormBoundarymTEOMdBbtHBxoFJb
Origin:http://www.mananaseguro.com
Referer:http://www.mananaseguro.com/
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.72 Safari/537.36
Request Payload
------WebKitFormBoundarymTEOMdBbtHBxoFJb
Content-Disposition: form-data; name="myFile"; filename="trailer-8.webp"
Content-Type: image/webp
------WebKitFormBoundarymTEOMdBbtHBxoFJb--
在响应标签中:
**This request has no data response**
我已完成以下servlet配置(GUICE) 服务( “/ _啊/上传”)与(BlobstoreUploadFinishedServlet.class)。 //发帖 服务( “/ _啊/服务”)与(Servlet_Serve.class);
我称之为一些相关的代码行:
resp.sendRedirect(“/ _ ah / serve?blob-key =”+ url);
String url = blobstoreService.createUploadUrl(“/ _ ah / upload”);
问题:你能解释一下为什么“我”没有回复(表格POST总是待定)吗? 我也不知道我是否应该使用“/ _ah /”(我决定把它放在任何地方)?
我在开发模式下有另一个问题,我无法测试上传到blobstore,因为我有以下错误:
警告:/ _ah / upload / ag1tYW5hbmFzZWd1cm8xch0LEhVfX0Jsb2JVcGxvYWRTZXNzaW9uX18Y2aQCDA 显示java.lang.NullPointerException 在com.google.appengine.api.blobstore.dev.UploadBlobServlet.getSessionId(UploadBlobServlet.java:134)
问题:发生了什么?这是与饼干有关的问题吗?
谢谢你,
答案 0 :(得分:2)
我记得有一段时间处理这个问题 - 遗憾的是,这是因为devmode中的blobstore实现与生产中的不同。
你不需要/ _ah /前缀如果我没错,/ _ah / upload是为blobservice保留的,所以你不应该使用它。 (不要相信我的意思)
这远非最佳,但您可以了解您是否在服务器端的devmode中 通过调用实用程序函数:
public static boolean isDevelopmentMode() {
return ( SystemProperty.environment.value() ==
SystemProperty.Environment.Value.Development );
}
通过调用resp.sendRedirect(“devmodeServe?blob-key =”+ blobkey)实现不同的逻辑;并将该servlet绑定到DevmodeServeServlet类:
class DevmodeServeServlet extends HttpServlet
{
BlobstoreService blobstoreService = BlobstoreServiceFactory
.getBlobstoreService();
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
BlobKey blobKey = new BlobKey(req.getParameter("blob-key"));
blobstoreService.serve(blobKey, resp);
}
}
我也不记得为什么,但我认为你必须在浏览器地址栏中使用你的计算机名而不是127.0.0.1或localhost(你可能需要将它添加到gwt devmode中允许的列表中浏览器中的插件)