java - 使用 Http 连接上传文件并计算上传字节的百分比

标签 java blackberry java-me

我想使用 HttpConnection 将文件上传到服务器。所以我想制作一个 GaugeField 代表上传作业的百分比。

但我在 OutputStream 中所能找到的只有 .flush(),它会将整个输出流刷新到服务器一次。所以我无法计算在特定时间上传的字节数

怎么做到的?有什么想法吗?

我使用了以下内容,但大部分时间都出现错误:

           while (position < length) {
                try {
                    os.write(postDataBytes, position, length100);
                    position += length100;
                    int location = position * 100 / length;
                    gaugeField.setValue(location);
                    os.flush();
                }
            }

最佳答案

有两种方法可以做到这一点:

  • 客户端:识别客户端写入的字节(这不是正确的方法,因为您不知道数据是否真的到达了服务器)。在这种情况下,您应该通过为您提供自定义 SocketFactory 并包装底层套接字来计算写入的字节数。
  • Server Side : 最好的方法是在一个session中统计server读取的数据,让client发出请求知道上传进度。

以下是实现此目的的步骤:

1) 在服务器端的 Upload Servlet 中更新 session 中读取的字节。

 session.setAttribute(pBytesRead);

2) 编写一个 servlet UploadProgressServlet,它将进度写入响应。

response.getOutputStream().write(session.getAttribute("uploadprogress"));

3)让客户端向UploadProgressServlet发出请求,知道进度

您还可以使用 Apache Commons Upload具有 Progress Listener 支持的 API。在这种情况下,您必须以多部分格式写入数据。

关于java - 使用 Http 连接上传文件并计算上传字节的百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10794831/

相关文章:

android - 背景图像不适用于 Android、BB、Windows Phone

java - Android Shoutcast 互联网广播流媒体

java - 在 Java SWT 中绘制动态基元

java - maven-surefire-plugin : java. lang.NoSuchMethodError : org. testng.TestNG.configure(Ljava/util/Map;)V

Android 2.3 和黑莓将页面显示为列,让您可以滚动到右侧和底部

java - BlackBerry drawTexturedPath 旋转 将 anchor 移动到图像中心

blackberry - 使用种子值生成 AES key

java - 我应该如何设计我的 DAO 层

java - 从泛型基接口(interface)的实例中检索类型参数

android - 在黑莓中,android 播放器是否支持推送通知或 C2dm?