我正在尝试从我的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();
}
我在这里做错了什么,也许我也知道如何使用这篇文章添加更多参数,以便将它们发送到服务器。
答案 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
的上传脚本。你在服务器端使用什么?