JAVA通过HttpURLConnection 上传和下载文件的方法
本文介绍了JAVA通过HttpURLConnection上传和下载文件的方法,分享给大家,具体如下:
HttpURLConnection文件上传
HttpURLConnection采用模拟浏览器上传的数据格式,上传给服务器
上传代码如下:
packagecom.util;
importjava.io.BufferedInputStream;
importjava.io.BufferedReader;
importjava.io.DataOutputStream;
importjava.io.File;
importjava.io.FileInputStream;
importjava.io.FileOutputStream;
importjava.io.IOException;
importjava.io.InputStream;
importjava.io.InputStreamReader;
importjava.io.OutputStream;
importjava.io.OutputStreamWriter;
importjava.net.HttpURLConnection;
importjava.net.MalformedURLException;
importjava.net.URL;
importjava.net.URLConnection;
importjava.util.Iterator;
importjava.util.Map;
/**
*Java原生的API可用于发送HTTP请求,即java.net.URL、java.net.URLConnection,这些API很好用、很常用,
*但不够简便;
*
*1.通过统一资源定位器(java.net.URL)获取连接器(java.net.URLConnection)2.设置请求的参数3.发送请求
*4.以输入流的形式获取返回内容5.关闭输入流
*
*@authorH__D
*
*/
publicclassHttpConnectionUtil{
/**
*多文件上传的方法
*
*@paramactionUrl:上传的路径
*@paramuploadFilePaths:需要上传的文件路径,数组
*@return
*/
@SuppressWarnings("finally")
publicstaticStringuploadFile(StringactionUrl,String[]uploadFilePaths){
Stringend="\r\n";
StringtwoHyphens="--";
Stringboundary="*****";
DataOutputStreamds=null;
InputStreaminputStream=null;
InputStreamReaderinputStreamReader=null;
BufferedReaderreader=null;
StringBufferresultBuffer=newStringBuffer();
StringtempLine=null;
try{
//统一资源
URLurl=newURL(actionUrl);
//连接类的父类,抽象类
URLConnectionurlConnection=url.openConnection();
//http的连接类
HttpURLConnectionhttpURLConnection=(HttpURLConnection)urlConnection;
//设置是否从httpUrlConnection读入,默认情况下是true;
httpURLConnection.setDoInput(true);
//设置是否向httpUrlConnection输出
httpURLConnection.setDoOutput(true);
//Post请求不能使用缓存
httpURLConnection.setUseCaches(false);
//设定请求的方法,默认是GET
httpURLConnection.setRequestMethod("POST");
//设置字符编码连接参数
httpURLConnection.setRequestProperty("Connection","Keep-Alive");
//设置字符编码
httpURLConnection.setRequestProperty("Charset","UTF-8");
//设置请求内容类型
httpURLConnection.setRequestProperty("Content-Type","multipart/form-data;boundary="+boundary);
//设置DataOutputStream
ds=newDataOutputStream(httpURLConnection.getOutputStream());
for(inti=0;i=300){
thrownewException(
"HTTPRequestisnotsuccess,Responsecodeis"+httpURLConnection.getResponseCode());
}
if(httpURLConnection.getResponseCode()==HttpURLConnection.HTTP_OK){
inputStream=httpURLConnection.getInputStream();
inputStreamReader=newInputStreamReader(inputStream);
reader=newBufferedReader(inputStreamReader);
tempLine=null;
resultBuffer=newStringBuffer();
while((tempLine=reader.readLine())!=null){
resultBuffer.append(tempLine);
resultBuffer.append("\n");
}
}
}catch(Exceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}finally{
if(ds!=null){
try{
ds.close();
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
if(reader!=null){
try{
reader.close();
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
if(inputStreamReader!=null){
try{
inputStreamReader.close();
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
if(inputStream!=null){
try{
inputStream.close();
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
returnresultBuffer.toString();
}
}
publicstaticvoidmain(String[]args){
//上传文件测试
Stringstr=uploadFile("http://127.0.0.1:8080/image/image.do",newString[]{"/Users//H__D/Desktop//1.png","//Users/H__D/Desktop/2.png"});
System.out.println(str);
}
}
 
HttpURLConnection文件下载
下载代码如下:
packagecom.util;
importjava.io.BufferedInputStream;
importjava.io.BufferedReader;
importjava.io.DataOutputStream;
importjava.io.File;
importjava.io.FileInputStream;
importjava.io.FileOutputStream;
importjava.io.IOException;
importjava.io.InputStream;
importjava.io.InputStreamReader;
importjava.io.OutputStream;
importjava.io.OutputStreamWriter;
importjava.net.HttpURLConnection;
importjava.net.MalformedURLException;
importjava.net.URL;
importjava.net.URLConnection;
importjava.util.Iterator;
importjava.util.Map;
/**
*Java原生的API可用于发送HTTP请求,即java.net.URL、java.net.URLConnection,这些API很好用、很常用,
*但不够简便;
*
*1.通过统一资源定位器(java.net.URL)获取连接器(java.net.URLConnection)2.设置请求的参数3.发送请求
*4.以输入流的形式获取返回内容5.关闭输入流
*
*@authorH__D
*
*/
publicclassHttpConnectionUtil{
/**
*
*@paramurlPath
*下载路径
*@paramdownloadDir
*下载存放目录
*@return返回下载文件
*/
publicstaticFiledownloadFile(StringurlPath,StringdownloadDir){
Filefile=null;
try{
//统一资源
URLurl=newURL(urlPath);
//连接类的父类,抽象类
URLConnectionurlConnection=url.openConnection();
//http的连接类
HttpURLConnectionhttpURLConnection=(HttpURLConnection)urlConnection;
//设定请求的方法,默认是GET
httpURLConnection.setRequestMethod("POST");
//设置字符编码
httpURLConnection.setRequestProperty("Charset","UTF-8");
//打开到此URL引用的资源的通信链接(如果尚未建立这样的连接)。
httpURLConnection.connect();
//文件大小
intfileLength=httpURLConnection.getContentLength();
//文件名
StringfilePathUrl=httpURLConnection.getURL().getFile();
StringfileFullName=filePathUrl.substring(filePathUrl.lastIndexOf(File.separatorChar)+1);
System.out.println("filelength---->"+fileLength);
URLConnectioncon=url.openConnection();
BufferedInputStreambin=newBufferedInputStream(httpURLConnection.getInputStream());
Stringpath=downloadDir+File.separatorChar+fileFullName;
file=newFile(path);
if(!file.getParentFile().exists()){
file.getParentFile().mkdirs();
}
OutputStreamout=newFileOutputStream(file);
intsize=0;
intlen=0;
byte[]buf=newbyte[1024];
while((size=bin.read(buf))!=-1){
len+=size;
out.write(buf,0,size);
//打印下载百分比
//System.out.println("下载了------->"+len*100/fileLength+
//"%\n");
}
bin.close();
out.close();
}catch(MalformedURLExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}finally{
returnfile;
}
}
publicstaticvoidmain(String[]args){
//下载文件测试
downloadFile("http://localhost:8080/images/1467523487190.png","/Users/H__D/Desktop");
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。