日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時間:2025/3/21 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java httpclient 进度条_如何使用Apache HttpClient 4获取文件上传的进度条? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

小編典典

大家好!

我自己解決了這個問題,并給出了一個簡單的例子。

如有任何疑問,請隨時提問。

開始了!

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;

/**

* File entity which supports a progress bar.

* Based on "org.apache.http.entity.FileEntity".

* @author Benny Neugebauer (www.bennyn.de)

*/

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.");

}

}

編碼愉快!

2020-09-16

總結

以上是生活随笔為你收集整理的java httpclient 进度条_如何使用Apache HttpClient 4获取文件上传的进度条?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。