首页 文章

AppEngine上的多部分POST(Java)

提问于
浏览
2

简单的问题(我很困惑,我在这里找不到答案):

我想从我的AppEngine Java servlet(出站)执行多部分编码的HTTP POST . AppEngine似乎不支持Apache HTTP lib,也不提供API本身(仅 setPayload(byte[]) ),但我想避免自己实现Multipart编码 . 所以:

  • 有没有办法从AppEngine Java发送Multipart HTTP主体?

  • 是否有一个将这样的主体编码为 byte[] 数组的库? (注意,没有实现 MultiPartEntity.getContent() . )然后我可以使用AppEngine内部URLFetch API(由于异步调用功能,我更喜欢它) .

2 回答

  • 0

    我写了一个小帮助方法,为AppEngine添加了Multipart POST支持(使用Apache HTTP客户端库) .

    public static void addMultipartBodyToRequest(MultipartEntity entity, HTTPRequest req) throws IOException{
    
        /*
         * turn Entity to byte[] using ByteArrayOutputStream
         */
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        entity.writeTo(bos);
        byte[] body = bos.toByteArray();
    
        /*
         * extract multipart boundary (body starts with --boundary\r\n)
         */
        String boundary = new BufferedReader(new StringReader(new String(body))).readLine();
        boundary = boundary.substring(2, boundary.length());
    
        /*
         * add multipart header and body
         */
        req.addHeader(new HTTPHeader("Content-type", "multipart/form-data; boundary=" + boundary));
        req.setPayload(body);
    }
    

    然后调用代码如下所示:

    MultipartEntity e = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
                e.addPart("part1", new StringBody("value1"));
                e.addPart("part2", new StringBody("value2"));
    
                HTTPRequest req = new HTTPRequest(new URL(myUrl), HTTPMethod.POST);
                ServletHelper.addMultipartBodyToRequest(e, req);
    
                URLFetchServiceFactory.getURLFetchService().fetchAsync(req);
    
  • 2

    您可以使用httpmime中的MultipartEntity .

    她是an example .

相关问题