如何通过http发送文件和参数

时间:2012-12-03 22:56:24

标签: java android

我正在尝试从我的Android应用程序向我们的服务器发送一个zipfile,并且我一直得到411长度所需的错误。

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

    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();
    }

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

1 个答案:

答案 0 :(得分:1)

您应该使用multipart MIME类型,以及每个参数和文件的部分。请参阅this old blog post of mine

正如您所知,HTTP请求(以及响应)也由两部分组成:标题和正文(也称为实体)。在标头中指定Content-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

BTW,这是我第一次看到名为upload.json的上传脚本。你在服务器端使用什么?