微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Google App Engine-使用模拟的POST通过字节数组更新blobstore

如何解决Google App Engine-使用模拟的POST通过字节数组更新blobstore

|| 当我尝试模拟使用Java上传到应用程序引擎Blobstore的发布请求时,出现以下异常:
WARNING: /_ah/login
java.lang.NullPointerException
  at com.google.appengine.api.users.dev.LoginCookieUtils.encodeEmailAsUserId(LoginCookieUtils.java:89)
  at com.google.appengine.api.users.dev.LoginCookieUtils.createCookie(LoginCookieUtils.java:41)
  at com.google.appengine.api.users.dev.LocalLoginServlet.doPost(LocalLoginServlet.java:90)
这是执行POST请求的代码
byte[] htmlData = // ...I already have the byte array I want to store/update)

    BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
            String uploadURL = blobstoreService.createUploadUrl(\"/upload\");

                         //add host if in dev mode
             if(uploadURL.indexOf(\"http\") == -1)
             {
                 uploadURL = \"http://localhost:8888\" + uploadURL;
             }
             URL url = new URL(uploadURL);
             // create a boundary string
             String boundary = MultiPartFormOutputStream.createBoundary();
             URLConnection urlConn = MultiPartFormOutputStream.createConnection(url);
             urlConn.setReadTimeout(15000);
             urlConn.setRequestProperty(\"Accept\",\"*/*\");
             urlConn.setRequestProperty(\"Content-Type\",MultiPartFormOutputStream.getContentType(boundary));
             // set some other request headers...
             urlConn.setRequestProperty(\"Connection\",\"Keep-Alive\");
             urlConn.setRequestProperty(\"Cache-Control\",\"no-cache\");
             // no need to connect because getoutputStream() does it
             MultiPartFormOutputStream out = new MultiPartFormOutputStream(urlConn.getoutputStream(),boundary);
out.writeField(\"param\",\"value\")
out.writeFile(\"myFile\",\"multipart/form-data\",\"content.html\",htmlData);
         out.close();
然后在upload.java中
public class Upload extends HttpServlet 
{

    private BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();

    public void doPost(HttpServletRequest req,HttpServletResponse res) throws servletexception,IOException 
    {
        UserService userService = UserServiceFactory.getUserService();
        User user = userService.getCurrentUser();
        Map<String,BlobKey> blobs = blobstoreService.getUploadedBlobs(req);
        BlobKey blobKey = blobs.get(\"myFile\");
        String value = req.getParameter(\"param\");
        Topic t = pm.getobjectById(Topic.class,key);
        t.setParam(\"value\");
    try
    {
        pm.makePersistent(t);
    }
.... 为什么我收到了encodeEmailAsUserId的异常? 附言writeFields持久存在并且在数据存储区中更新得还不错,但是我仍然遇到此异常。

解决方法

我想出了解决方案。问题是我从中提取MultiPartStream代码的示例未设置身份验证cookie的标头。 我只是将以下内容添加到中间人servlet中,该服务将Post数据传递给Upload servlet。
    Cookie [] cookies = req.getCookies();
    String name = cookies[0].getName();
    String value = cookies[0].getValue();
...
 urlConn.setRequestProperty(\"Cookie\",name + \"=\" + value);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?