- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
有几个问题讨论了如何使用 multipart/form-data 数据格式将进度指示添加到 Android 中的 HTTP 文件上传。建议的典型方法集中在 Can't grab progress on http POST file upload (Android) 中的最佳答案中。 -- 包括来自完整 Apache HTTPClient 库的 MultipartEntity 类,然后将它用于获取数据的输入流包装在一个在读取字节时计算字节数的流中。
这种方法适用于这种情况,但不幸的是不适用于通过 UrlEncodedFormEntity 发送数据的请求,它希望将其数据以字符串而不是 InputStreams 的形式传递给它。
所以我的问题是,有哪些方法可以通过这种机制确定上传进度?
最佳答案
您可以覆盖任何 HttpEntity
实现的 #writeTo
方法,并在字节写入输出流时对其进行计数。
DefaultHttpClient httpclient = new DefaultHttpClient();
try {
HttpPost httppost = new HttpPost("http://www.google.com/sorry");
MultipartEntity outentity = new MultipartEntity() {
@Override
public void writeTo(final OutputStream outstream) throws IOException {
super.writeTo(new CoutingOutputStream(outstream));
}
};
outentity.addPart("stuff", new StringBody("Stuff"));
httppost.setEntity(outentity);
HttpResponse rsp = httpclient.execute(httppost);
HttpEntity inentity = rsp.getEntity();
EntityUtils.consume(inentity);
} finally {
httpclient.getConnectionManager().shutdown();
}
static class CoutingOutputStream extends FilterOutputStream {
CoutingOutputStream(final OutputStream out) {
super(out);
}
@Override
public void write(int b) throws IOException {
out.write(b);
System.out.println("Written 1 byte");
}
@Override
public void write(byte[] b) throws IOException {
out.write(b);
System.out.println("Written " + b.length + " bytes");
}
@Override
public void write(byte[] b, int off, int len) throws IOException {
out.write(b, off, len);
System.out.println("Written " + len + " bytes");
}
}
关于UrlEncodedFormEntity 的 Android HTTP 上传进度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9854555/
我们有网络服务器,仅接受来自 Android 手机的解码值 例如 “http://www.url.com/data/?name=hello World” 返回预期结果 但是当我们尝试使用时 “http
我正在尝试在 java 中发出 POST 请求,但这没有按预期工作。 已关注 this post ,这是我目前拥有的代码 UrlEncodedFormEntity entity = new UrlEn
我想在我的 Android 设备上使用远程 API,但出于某种原因,UrlEncodedFormEntity 类不会将 _ 转换为 %5f 就像远程 API 似乎期望的那样。因此,使用此代码: Lis
我正在尝试将数据发送到服务器。也就是说,一些字符串字段和一个图像,它被编码为 base64 并作为一个字符串传递,如下所示: ByteArrayOutputStream stream = new By
图像通常需要特殊的 HTTP header ,例如: Content-disposition: attachment; filename="file2.jpeg" Content-type: imag
我正在使用 Apache HttpClient 与 WS 连接。一切正常,但是当应用程序尝试发送大尺寸的帖子时,它就崩溃了。 我像这样取消 HttpClint: 将 XML 发布到 REST WS 这
我有一个要上传的文件,所以我有这样的标准 MultipartEntityBuilder: MultipartEntityBuilder multiPartEntity = MultipartEntit
有几个问题讨论了如何使用 multipart/form-data 数据格式将进度指示添加到 Android 中的 HTTP 文件上传。建议的典型方法集中在 Can't grab progress on
我们如何在UrlEncodedFormEntity中传递HashMap参数?或者如何解决? 最佳答案 我想你的意思是这样的: HashMap values = ....; ArrayList para
如果您想使用参数执行 HTTP Post 并以“x-www-form-urlencoded”内容类型发送它,那么在 Apache HTTP Client 3 中执行此操作的方法是... Htt
我正在创建一个单元测试来试用我刚刚创建的 servlet。 @Test public void test() throws ParseException, IOException { HttpCl
您好,我正在尝试将 ArrayList 作为 POST 请求的参数从我的 Android 应用程序发送到服务器。到目前为止,我有这段代码: HttpResponse response;
我有一个已经采用正确 URLEncoded 格式的字符串,我想通过 Android 上的 POST 请求将其发送到 PHP 服务器。我知道在 Android 上发送 URL 编码表单的方法使用 Url
我正在使用jReddit包装器制作Reddit应用程序,但在Apache HTTP客户端抛出上述异常时遇到了麻烦。我的依赖关系如下所示: 我的库看起来像这样: 我曾在SO上看到过类似类似异常的其他问题
我正在尝试通过调用网络服务上传设备摄像头拍摄的图像,服务器代码使用 PHP。 首先我将位图转换为字符串 ByteArrayOutputStream stream = new ByteArrayOutp
我是一名优秀的程序员,十分优秀!