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"); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。