2

我正在尝试将 zipfile 从我的 android 应用程序发送到我们的服务器,但我不断收到 411 length required 错误。

这是我用来执行此操作的代码。

    HttpPost post = new HttpPost("http://www.xyz.org/upload.json");
    post.setHeader(C.constants.HTTP_CONTENT_TYPE, "application/octet-stream");

    try {
        FileInputStream fis = new FileInputStream("/data/data/org.myapp.appname/app_content.zip");

        InputStreamEntity reqEntity = new InputStreamEntity(fis, -1);
        post.setEntity(reqEntity);
        String response = doPost(post);

        Log.v(tag, "response from server " + response);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }

我在这里做错了什么,我是否也知道如何在这篇文章中添加更多参数以将它们发送到服务器。

4

1 回答 1

1

您应该使用multipartMIME 类型,并为每个参数和文件使用部分。请参阅我的这篇旧博客文章

如您所知,HTTP 请求(和响应也是)由两部分组成:标头和正文(也称为实体)。在标头中指定 aContent-Type以便服务器脚本知道如何解释以下字节(您还可以在同一行上指定文本数据的编码)。

在标头之后,客户端发送一个空行和一个可选实体。多部分实体就像由边界分隔的一堆部分。这就是您想要的 HTTP 请求在网络上的样子:

POST /path/to/script.json HTTP/1.1
Host: localhost
Content-Type: multipart/form-data; boundary=a2ksdf0?--

a2ksdf0?--
Content-Disposition: form-data; name="profile_picture"; filename="me.png"
Content-Type: image/png

<content here>
a2ksdf0?--
Content-Disposition: form-data; name="username";
Content-Type: text/plain

Joe Black

顺便说一句,这是我第一次看到名为upload.json. 你在服务器端使用什么?

于 2012-12-03T23:02:13.650 回答