怎么在JAVA中利用HttpURLConnection實(shí)現(xiàn)一個(gè)文件上傳下載功能?很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。
創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站制作、網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)、翔安網(wǎng)絡(luò)推廣、成都小程序開發(fā)、翔安網(wǎng)絡(luò)營(yíng)銷、翔安企業(yè)策劃、翔安品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供翔安建站搭建服務(wù),24小時(shí)服務(wù)熱線:13518219792,官方網(wǎng)址:www.cdcxhl.com
HttpURLConnection文件上傳
HttpURLConnection采用模擬瀏覽器上傳的數(shù)據(jù)格式,上傳給服務(wù)器
上傳代碼如下:
package com.util; import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import java.util.Iterator; import java.util.Map; /** * Java原生的API可用于發(fā)送HTTP請(qǐng)求,即java.net.URL、java.net.URLConnection,這些API很好用、很常用, * 但不夠簡(jiǎn)便; * * 1.通過統(tǒng)一資源定位器(java.net.URL)獲取連接器(java.net.URLConnection) 2.設(shè)置請(qǐng)求的參數(shù) 3.發(fā)送請(qǐng)求 * 4.以輸入流的形式獲取返回內(nèi)容 5.關(guān)閉輸入流 * * @author H__D * */ public class HttpConnectionUtil { /** * 多文件上傳的方法 * * @param actionUrl:上傳的路徑 * @param uploadFilePaths:需要上傳的文件路徑,數(shù)組 * @return */ @SuppressWarnings("finally") public static String uploadFile(String actionUrl, String[] uploadFilePaths) { String end = "\r\n"; String twoHyphens = "--"; String boundary = "*****"; DataOutputStream ds = null; InputStream inputStream = null; InputStreamReader inputStreamReader = null; BufferedReader reader = null; StringBuffer resultBuffer = new StringBuffer(); String tempLine = null; try { // 統(tǒng)一資源 URL url = new URL(actionUrl); // 連接類的父類,抽象類 URLConnection urlConnection = url.openConnection(); // http的連接類 HttpURLConnection httpURLConnection = (HttpURLConnection) urlConnection; // 設(shè)置是否從httpUrlConnection讀入,默認(rèn)情況下是true; httpURLConnection.setDoInput(true); // 設(shè)置是否向httpUrlConnection輸出 httpURLConnection.setDoOutput(true); // Post 請(qǐng)求不能使用緩存 httpURLConnection.setUseCaches(false); // 設(shè)定請(qǐng)求的方法,默認(rèn)是GET httpURLConnection.setRequestMethod("POST"); // 設(shè)置字符編碼連接參數(shù) httpURLConnection.setRequestProperty("Connection", "Keep-Alive"); // 設(shè)置字符編碼 httpURLConnection.setRequestProperty("Charset", "UTF-8"); // 設(shè)置請(qǐng)求內(nèi)容類型 httpURLConnection.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary); // 設(shè)置DataOutputStream ds = new DataOutputStream(httpURLConnection.getOutputStream()); for (int i = 0; i < uploadFilePaths.length; i++) { String uploadFile = uploadFilePaths[i]; String filename = uploadFile.substring(uploadFile.lastIndexOf("http://") + 1); ds.writeBytes(twoHyphens + boundary + end); ds.writeBytes("Content-Disposition: form-data; " + "name=\"file" + i + "\";filename=\"" + filename + "\"" + end); ds.writeBytes(end); FileInputStream fStream = new FileInputStream(uploadFile); int bufferSize = 1024; byte[] buffer = new byte[bufferSize]; int length = -1; while ((length = fStream.read(buffer)) != -1) { ds.write(buffer, 0, length); } ds.writeBytes(end); /* close streams */ fStream.close(); } ds.writeBytes(twoHyphens + boundary + twoHyphens + end); /* close streams */ ds.flush(); if (httpURLConnection.getResponseCode() >= 300) { throw new Exception( "HTTP Request is not success, Response code is " + httpURLConnection.getResponseCode()); } if (httpURLConnection.getResponseCode() == HttpURLConnection.HTTP_OK) { inputStream = httpURLConnection.getInputStream(); inputStreamReader = new InputStreamReader(inputStream); reader = new BufferedReader(inputStreamReader); tempLine = null; resultBuffer = new StringBuffer(); while ((tempLine = reader.readLine()) != null) { resultBuffer.append(tempLine); resultBuffer.append("\n"); } } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { if (ds != null) { try { ds.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if (reader != null) { try { reader.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if (inputStreamReader != null) { try { inputStreamReader.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if (inputStream != null) { try { inputStream.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return resultBuffer.toString(); } } public static void main(String[] args) { // 上傳文件測(cè)試 String str = uploadFile("http://127.0.0.1:8080/image/image.do",new String[] { "/Users//H__D/Desktop//1.png","http://Users/H__D/Desktop/2.png" }); System.out.println(str); } }
HttpURLConnection文件下載
下載代碼如下:
package com.util; import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import java.util.Iterator; import java.util.Map; /** * Java原生的API可用于發(fā)送HTTP請(qǐng)求,即java.net.URL、java.net.URLConnection,這些API很好用、很常用, * 但不夠簡(jiǎn)便; * * 1.通過統(tǒng)一資源定位器(java.net.URL)獲取連接器(java.net.URLConnection) 2.設(shè)置請(qǐng)求的參數(shù) 3.發(fā)送請(qǐng)求 * 4.以輸入流的形式獲取返回內(nèi)容 5.關(guān)閉輸入流 * * @author H__D * */ public class HttpConnectionUtil { /** * * @param urlPath * 下載路徑 * @param downloadDir * 下載存放目錄 * @return 返回下載文件 */ public static File downloadFile(String urlPath, String downloadDir) { File file = null; try { // 統(tǒng)一資源 URL url = new URL(urlPath); // 連接類的父類,抽象類 URLConnection urlConnection = url.openConnection(); // http的連接類 HttpURLConnection httpURLConnection = (HttpURLConnection) urlConnection; // 設(shè)定請(qǐng)求的方法,默認(rèn)是GET httpURLConnection.setRequestMethod("POST"); // 設(shè)置字符編碼 httpURLConnection.setRequestProperty("Charset", "UTF-8"); // 打開到此 URL 引用的資源的通信鏈接(如果尚未建立這樣的連接)。 httpURLConnection.connect(); // 文件大小 int fileLength = httpURLConnection.getContentLength(); // 文件名 String filePathUrl = httpURLConnection.getURL().getFile(); String fileFullName = filePathUrl.substring(filePathUrl.lastIndexOf(File.separatorChar) + 1); System.out.println("file length---->" + fileLength); URLConnection con = url.openConnection(); BufferedInputStream bin = new BufferedInputStream(httpURLConnection.getInputStream()); String path = downloadDir + File.separatorChar + fileFullName; file = new File(path); if (!file.getParentFile().exists()) { file.getParentFile().mkdirs(); } OutputStream out = new FileOutputStream(file); int size = 0; int len = 0; byte[] buf = new byte[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 (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { return file; } } public static void main(String[] args) { // 下載文件測(cè)試 downloadFile("http://localhost:8080/images/1467523487190.png", "/Users/H__D/Desktop"); } }
看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)的支持。