栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何使用Apache HttpClient 4获取文件上传的进度条?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何使用Apache HttpClient 4获取文件上传的进度条?

大家好!

我自己解决了这个问题,并给出了一个简单的例子。
如有任何疑问,请随时提问。

开始了!

ApplicationView.java

    import java.awt.event.ActionEvent;    import java.awt.event.ActionListener;    import java.io.File;    import java.util.logging.Level;    import java.util.logging.Logger;    import javax.swing.JButton;    import javax.swing.Jframe;    import javax.swing.JPanel;    import javax.swing.JProgressBar;    import org.apache.http.HttpEntity;    import org.apache.http.HttpResponse;    import org.apache.http.HttpVersion;    import org.apache.http.client.HttpClient;    import org.apache.http.client.methods.HttpPut;    import org.apache.http.impl.client.DefaultHttpClient;    import org.apache.http.params.BasicHttpParams;    import org.apache.http.params.HttpParams;    import org.apache.http.params.HttpProtocolParams;    import org.apache.http.util.EntityUtils;    public class ApplicationView implements ActionListener    {      File file = new File("C:/Temp/my-upload.avi");      JProgressBar progressBar = null;      public ApplicationView()      {        super();      }      public void createView()      {        Jframe frame = new Jframe("File Upload with progress bar - Example");        frame.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE);        frame.setBounds(0, 0, 300, 200);        frame.setVisible(true);        progressBar = new JProgressBar(0, 100);        progressBar.setBounds(20, 20, 200, 30);        progressBar.setStringPainted(true);        progressBar.setVisible(true);        JButton button = new JButton("upload");        button.setBounds(progressBar.getX(),     progressBar.getY() + progressBar.getHeight() + 20,     100,     40);        button.addActionListener(this);        JPanel panel = (JPanel) frame.getContentPane();        panel.setLayout(null);        panel.add(progressBar);        panel.add(button);        panel.setVisible(true);      }      public void actionPerformed(ActionEvent e)      {        try        {          sendFile(this.file, this.progressBar);        }        catch (Exception ex)        {          System.out.println(ex.getLocalizedMessage());        }      }      private void sendFile(File file, JProgressBar progressBar) throws Exception      {        String serverResponse = null;        HttpParams params = new BasicHttpParams();        params.setParameter(HttpProtocolParams.USE_EXPECT_CONTINUE, true);        HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);        HttpClient client = new DefaultHttpClient(params);        HttpPut put = new HttpPut("http://localhost:8080/" + file.getName());        ProgressBarListener listener = new ProgressBarListener(progressBar);        FileEntityWithProgressBar fileEntity = new FileEntityWithProgressBar(file, "binary/octet-stream", listener);        put.setEntity(fileEntity);        HttpResponse response = client.execute(put);        HttpEntity entity = response.getEntity();        if (entity != null)        {          serverResponse = EntityUtils.toString(entity);          System.out.println(serverResponse);        }      }    }

FileEntityWithProgressBar.java

    import java.io.File;    import java.io.FileInputStream;    import java.io.IOException;    import java.io.InputStream;    import java.io.OutputStream;    import org.apache.http.entity.AbstractHttpEntity;        public class FileEntityWithProgressBar extends AbstractHttpEntity implements Cloneable    {      protected final File file;      private final ProgressBarListener listener;      private long transferredBytes;      public FileEntityWithProgressBar(final File file, final String contentType, ProgressBarListener listener)      {        super();        if (file == null)        {          throw new IllegalArgumentException("File may not be null");        }        this.file = file;        this.listener = listener;        this.transferredBytes = 0;        setContentType(contentType);      }      public boolean isRepeatable()      {        return true;      }      public long getContentLength()      {        return this.file.length();      }      public InputStream getContent() throws IOException      {        return new FileInputStream(this.file);      }      public void writeTo(final OutputStream outstream) throws IOException      {        if (outstream == null)        {          throw new IllegalArgumentException("Output stream may not be null");        }        InputStream instream = new FileInputStream(this.file);        try        {          byte[] tmp = new byte[4096];          int l;          while ((l = instream.read(tmp)) != -1)          { outstream.write(tmp, 0, l); this.transferredBytes += l; this.listener.updateTransferred(this.transferredBytes);          }          outstream.flush();        }        finally        {          instream.close();        }      }      public boolean isStreaming()      {        return false;      }      @Override      public Object clone() throws CloneNotSupportedException      {        return super.clone();      }    }

ProgressBarListener.java

    import javax.swing.JProgressBar;    public class ProgressBarListener    {      private int transferedMegaBytes = 0;      private JProgressBar progressBar = null;      public ProgressBarListener()      {        super();      }      public ProgressBarListener(JProgressBar progressBar)      {        this();        this.progressBar = progressBar;      }      public void updateTransferred(long transferedBytes)      {        transferedMegaBytes = (int) (transferedBytes / 1048576);        this.progressBar.setValue(transferedMegaBytes);        this.progressBar.paint(progressBar.getGraphics());        System.out.println("Transferred: " + transferedMegaBytes + " Megabytes.");      }    }

编码愉快!



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/486455.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号