Java下http下載文件客戶端和上傳文件客戶端實(shí)例代碼
一、下載客戶端代碼
package javadownload;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
/**
* @說(shuō)明 導(dǎo)出虛擬機(jī)
* @author wxt
* @version 1.0
* @since
*/
public class GetVM {
/**
* 測(cè)試
* @param args
*/
public static void main(String[] args) {
String url = "http://192.168.5.102:8845/xx";
byte[] btImg = getVMFromNetByUrl(url);
if(null != btImg && btImg.length > 0){
System.out.println("讀取到:" + btImg.length + " 字節(jié)");
String fileName = "ygserver";
writeImageToDisk(btImg, fileName);
}else{
System.out.println("沒(méi)有從該連接獲得內(nèi)容");
}
}
/**
* 將vm 寫(xiě)入到磁盤(pán)
* @param vm 數(shù)據(jù)流
* @param fileName 文件保存時(shí)的名稱(chēng)
*/
public static void writeImageToDisk(byte[] vm, String fileName){
try {
File file = new File("./" + fileName);
FileOutputStream fops = new FileOutputStream(file);
fops.write(vm);
fops.flush();
fops.close();
System.out.println("下載完成");
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 根據(jù)地址獲得數(shù)據(jù)的字節(jié)流
* @param strUrl 網(wǎng)絡(luò)連接地址
* @return
*/
public static byte[] getVMFromNetByUrl(String strUrl){
try {
URL url = new URL(strUrl);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(5 * 1000);
InputStream inStream = conn.getInputStream();//通過(guò)輸入流獲取數(shù)據(jù)
byte[] btImg = readInputStream(inStream);//得到的二進(jìn)制數(shù)據(jù)
return btImg;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 從輸入流中獲取數(shù)據(jù)
* @param inStream 輸入流
* @return
* @throws Exception
*/
public static byte[] readInputStream(InputStream inStream) throws Exception{
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
while( (len=inStream.read(buffer)) != -1 ){
outStream.write(buffer, 0, len);
}
inStream.close();
return outStream.toByteArray();
}
}
上述代碼只適合下載小文件,如果下載大文件則會(huì)出現(xiàn) Exception in thread "main" java.lang.OutOfMemoryError: Java heap space 錯(cuò)誤,所以如果下載大文件需要對(duì)上述代碼進(jìn)行改造,代碼如下:
package javadownload;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
/**
* @說(shuō)明 導(dǎo)出虛擬機(jī)
* @author wxt
* @version 1.0
* @since
*/
public class GetBigFile {
/**
* 測(cè)試
* @param args
*/
public static void main(String[] args) {
String url = "http://192.168.5.76:8080/export?uuid=123";
String fileName="yserver";
getVMFromNetByUrl(url,fileName);
}
/**
* 根據(jù)地址獲下載文件
* @param strUrl 網(wǎng)絡(luò)連接地址
* @param fileName 下載文件的存儲(chǔ)名稱(chēng)
*/
public static void getVMFromNetByUrl(String strUrl,String fileName){
try {
URL url = new URL(strUrl);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(5 * 1000);
InputStream inStream = conn.getInputStream();//通過(guò)輸入流獲取數(shù)據(jù)
byte[] buffer = new byte[4096];
int len = 0;
File file = new File("./" + fileName);
FileOutputStream fops = new FileOutputStream(file);
while( (len=inStream.read(buffer)) != -1 ){
fops.write(buffer, 0, len);
}
fops.flush();
fops.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
二、上傳文件客戶端:
package javadownload;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
public class FileUpload {
/**
* 發(fā)送請(qǐng)求
*
* @param url
* 請(qǐng)求地址
* @param filePath
* 文件在服務(wù)器保存路徑(這里是為了自己測(cè)試方便而寫(xiě),可以將該參數(shù)去掉)
* @return
* @throws IOException
*/
public int send(String url, String filePath) throws IOException {
File file = new File(filePath);
if (!file.exists() || !file.isFile()) {
return -1;
}
/**
* 第一部分
*/
URL urlObj = new URL(url);
HttpURLConnection con = (HttpURLConnection) urlObj.openConnection();
/**
* 設(shè)置關(guān)鍵值
*/
con.setRequestMethod("POST"); // 以Post方式提交表單,默認(rèn)get方式
con.setDoInput(true);
con.setDoOutput(true);
con.setUseCaches(false); // post方式不能使用緩存
// 設(shè)置請(qǐng)求頭信息
con.setRequestProperty("Connection", "close");//Keep-Alive
con.setRequestProperty("Charset", "UTF-8");
// 設(shè)置邊界
String BOUNDARY = "----------" + System.currentTimeMillis();
con.setRequestProperty("Content-Type", "multipart/form-data; boundary="
+ BOUNDARY);
// 請(qǐng)求正文信息
// 第一部分:
StringBuilder sb = new StringBuilder();
sb.append("--"); // ////////必須多兩道線
sb.append(BOUNDARY);
sb.append("\r\n");
sb.append("Content-Disposition: form-data;name=\"file_name\";filename=\""
+ file.getName() + "\"\r\n");
sb.append("Content-Type:application/octet-stream\r\n\r\n");
sb.append("Connection:close\r\n\r\n");
byte[] head = sb.toString().getBytes("utf-8");
// 獲得輸出流
OutputStream out = new DataOutputStream(con.getOutputStream());
out.write(head);
// 文件正文部分
DataInputStream in = new DataInputStream(new FileInputStream(file));
int bytes = 0;
byte[] bufferOut = new byte[1024];
while ((bytes = in.read(bufferOut)) != -1) {
out.write(bufferOut, 0, bytes);
}
in.close();
// 結(jié)尾部分
byte[] foot = ("\r\n--" + BOUNDARY + "--\r\n").getBytes("utf-8");// 定義最后數(shù)據(jù)分隔線
out.write(foot);
out.flush();
out.close();
/**
* 讀取服務(wù)器響應(yīng),必須讀取,否則提交不成功
*/
return con.getResponseCode();
/**
* 下面的方式讀取也是可以的
*/
// try {
// // 定義BufferedReader輸入流來(lái)讀取URL的響應(yīng)
// BufferedReader reader = new BufferedReader(new InputStreamReader(
// con.getInputStream()));
// String line = null;
// while ((line = reader.readLine()) != null) {
// System.out.println(line);
// }
// } catch (Exception e) {
// System.out.println("發(fā)送POST請(qǐng)求出現(xiàn)異常!" + e);
// e.printStackTrace();
// }
}
public static void main(String[] args) throws IOException {
FileUpload up = new FileUpload();
System.out.println(up.send("http://192.168.5.102:8845/xx",
"./vif.xml"));
;
}
}
總結(jié)
以上所述是小編給大家介紹的Java下http下載文件客戶端和上傳文件客戶端實(shí)例代碼,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- Java下載文件的4種方式總結(jié)
- Java fastdfs客戶端實(shí)現(xiàn)上傳下載文件
- JAVA實(shí)現(xiàn)下載文件功能的兩種方法
- Java程序部署到服務(wù)器上,接口請(qǐng)求下載文件失敗/文件為空/文件名不對(duì)的問(wèn)題
- 基于Java寫(xiě)minio客戶端實(shí)現(xiàn)上傳下載文件
- Java上傳下載文件并實(shí)現(xiàn)加密解密
- 詳解關(guān)于java文件下載文件名亂碼問(wèn)題解決方案
- java后臺(tái)批量下載文件并壓縮成zip下載的方法
- java 從服務(wù)器下載文件并保存到本地的示例
- java通過(guò)url下載文件并輸出的方法
- Java下載遠(yuǎn)程服務(wù)器文件到本地(基于http協(xié)議和ssh2協(xié)議)
相關(guān)文章
基于Spring Data Jest的Elasticsearch數(shù)據(jù)統(tǒng)計(jì)示例
本篇文章主要介紹了基于Spring Data Jest的Elasticsearch數(shù)據(jù)統(tǒng)計(jì)示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-02-02
Spring @Transaction 注解執(zhí)行事務(wù)的流程
這篇文章主要介紹了Spring @Transaction 注解執(zhí)行事務(wù)的流程,Spring 是如何開(kāi)啟事務(wù)的?又是如何進(jìn)行提交事務(wù)和關(guān)閉事務(wù)的,本文給大家詳細(xì)介紹,需要的朋友可以參考下2021-06-06
解決"XML Parser Error on line 1: 前言中不允許有內(nèi)容"錯(cuò)誤
解決用windows自帶的記事編輯xml文件后出現(xiàn) "XML Parser Error on line 1: 前言中不允許有內(nèi)容。"的錯(cuò)誤2018-02-02
Java循環(huán)對(duì)bean的屬性進(jìn)行賦值的實(shí)現(xiàn)
本文主要介紹了Java循環(huán)對(duì)bean的屬性進(jìn)行賦值,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08

