zoukankan      html  css  js  c++  java
  • 【JAVA】通过HttpURLConnection 上传和下载文件(二)

    HttpURLConnection文件上传

      HttpURLConnection采用模拟浏览器上传的数据格式,上传给服务器

      上传代码如下:

    •   1 package com.util;
        2 
        3 import java.io.BufferedInputStream;
        4 import java.io.BufferedReader;
        5 import java.io.DataOutputStream;
        6 import java.io.File;
        7 import java.io.FileInputStream;
        8 import java.io.FileOutputStream;
        9 import java.io.IOException;
       10 import java.io.InputStream;
       11 import java.io.InputStreamReader;
       12 import java.io.OutputStream;
       13 import java.io.OutputStreamWriter;
       14 import java.net.HttpURLConnection;
       15 import java.net.MalformedURLException;
       16 import java.net.URL;
       17 import java.net.URLConnection;
       18 import java.util.Iterator;
       19 import java.util.Map;
       20 
       21 /**
       22  * Java原生的API可用于发送HTTP请求,即java.net.URL、java.net.URLConnection,这些API很好用、很常用,
       23  * 但不够简便;
       24  * 
       25  * 1.通过统一资源定位器(java.net.URL)获取连接器(java.net.URLConnection) 2.设置请求的参数 3.发送请求
       26  * 4.以输入流的形式获取返回内容 5.关闭输入流
       27  * 
       28  * @author H__D
       29  *
       30  */
       31 public class HttpConnectionUtil {
       32 
       33 
       34     /**
       35      * 多文件上传的方法
       36      * 
       37      * @param actionUrl:上传的路径
       38      * @param uploadFilePaths:需要上传的文件路径,数组
       39      * @return
       40      */
       41     @SuppressWarnings("finally")
       42     public static String uploadFile(String actionUrl, String[] uploadFilePaths) {
       43         String end = "
      ";
       44         String twoHyphens = "--";
       45         String boundary = "*****";
       46 
       47         DataOutputStream ds = null;
       48         InputStream inputStream = null;
       49         InputStreamReader inputStreamReader = null;
       50         BufferedReader reader = null;
       51         StringBuffer resultBuffer = new StringBuffer();
       52         String tempLine = null;
       53 
       54         try {
       55             // 统一资源
       56             URL url = new URL(actionUrl);
       57             // 连接类的父类,抽象类
       58             URLConnection urlConnection = url.openConnection();
       59             // http的连接类
       60             HttpURLConnection httpURLConnection = (HttpURLConnection) urlConnection;
       61 
       62             // 设置是否从httpUrlConnection读入,默认情况下是true;
       63             httpURLConnection.setDoInput(true);
       64             // 设置是否向httpUrlConnection输出
       65             httpURLConnection.setDoOutput(true);
       66             // Post 请求不能使用缓存
       67             httpURLConnection.setUseCaches(false);
       68             // 设定请求的方法,默认是GET
       69             httpURLConnection.setRequestMethod("POST");
       70             // 设置字符编码连接参数
       71             httpURLConnection.setRequestProperty("Connection", "Keep-Alive");
       72             // 设置字符编码
       73             httpURLConnection.setRequestProperty("Charset", "UTF-8");
       74             // 设置请求内容类型
       75             httpURLConnection.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);
       76 
       77             // 设置DataOutputStream
       78             ds = new DataOutputStream(httpURLConnection.getOutputStream());
       79             for (int i = 0; i < uploadFilePaths.length; i++) {
       80                 String uploadFile = uploadFilePaths[i];
       81                 String filename = uploadFile.substring(uploadFile.lastIndexOf("//") + 1);
       82                 ds.writeBytes(twoHyphens + boundary + end);
       83                 ds.writeBytes("Content-Disposition: form-data; " + "name="file" + i + "";filename="" + filename
       84                         + """ + end);
       85                 ds.writeBytes(end);
       86                 FileInputStream fStream = new FileInputStream(uploadFile);
       87                 int bufferSize = 1024;
       88                 byte[] buffer = new byte[bufferSize];
       89                 int length = -1;
       90                 while ((length = fStream.read(buffer)) != -1) {
       91                     ds.write(buffer, 0, length);
       92                 }
       93                 ds.writeBytes(end);
       94                 /* close streams */
       95                 fStream.close();
       96             }
       97             ds.writeBytes(twoHyphens + boundary + twoHyphens + end);
       98             /* close streams */
       99             ds.flush();
      100             if (httpURLConnection.getResponseCode() >= 300) {
      101                 throw new Exception(
      102                         "HTTP Request is not success, Response code is " + httpURLConnection.getResponseCode());
      103             }
      104 
      105             if (httpURLConnection.getResponseCode() == HttpURLConnection.HTTP_OK) {
      106                 inputStream = httpURLConnection.getInputStream();
      107                 inputStreamReader = new InputStreamReader(inputStream);
      108                 reader = new BufferedReader(inputStreamReader);
      109                 tempLine = null;
      110                 resultBuffer = new StringBuffer();
      111                 while ((tempLine = reader.readLine()) != null) {
      112                     resultBuffer.append(tempLine);
      113                     resultBuffer.append("
      ");
      114                 }
      115             }
      116 
      117         } catch (Exception e) {
      118             // TODO Auto-generated catch block
      119             e.printStackTrace();
      120         } finally {
      121             if (ds != null) {
      122                 try {
      123                     ds.close();
      124                 } catch (IOException e) {
      125                     // TODO Auto-generated catch block
      126                     e.printStackTrace();
      127                 }
      128             }
      129             if (reader != null) {
      130                 try {
      131                     reader.close();
      132                 } catch (IOException e) {
      133                     // TODO Auto-generated catch block
      134                     e.printStackTrace();
      135                 }
      136             }
      137             if (inputStreamReader != null) {
      138                 try {
      139                     inputStreamReader.close();
      140                 } catch (IOException e) {
      141                     // TODO Auto-generated catch block
      142                     e.printStackTrace();
      143                 }
      144             }
      145             if (inputStream != null) {
      146                 try {
      147                     inputStream.close();
      148                 } catch (IOException e) {
      149                     // TODO Auto-generated catch block
      150                     e.printStackTrace();
      151                 }
      152             }
      153 
      154             return resultBuffer.toString();
      155         }
      156     }
      157 
      158 
      159     public static void main(String[] args) {
      160 
      161         // 上传文件测试
      162          String str = uploadFile("http://127.0.0.1:8080/image/image.do",new String[] { "/Users//H__D/Desktop//1.png","//Users/H__D/Desktop/2.png" });
      163          System.out.println(str);
      164 
      165 
      166     }
      167 
      168 }
      uploadFile

    HttpURLConnection文件下载

      下载代码如下:

    •   1 package com.util;
        2 
        3 import java.io.BufferedInputStream;
        4 import java.io.BufferedReader;
        5 import java.io.DataOutputStream;
        6 import java.io.File;
        7 import java.io.FileInputStream;
        8 import java.io.FileOutputStream;
        9 import java.io.IOException;
       10 import java.io.InputStream;
       11 import java.io.InputStreamReader;
       12 import java.io.OutputStream;
       13 import java.io.OutputStreamWriter;
       14 import java.net.HttpURLConnection;
       15 import java.net.MalformedURLException;
       16 import java.net.URL;
       17 import java.net.URLConnection;
       18 import java.util.Iterator;
       19 import java.util.Map;
       20 
       21 /**
       22  * Java原生的API可用于发送HTTP请求,即java.net.URL、java.net.URLConnection,这些API很好用、很常用,
       23  * 但不够简便;
       24  * 
       25  * 1.通过统一资源定位器(java.net.URL)获取连接器(java.net.URLConnection) 2.设置请求的参数 3.发送请求
       26  * 4.以输入流的形式获取返回内容 5.关闭输入流
       27  * 
       28  * @author H__D
       29  *
       30  */
       31 public class HttpConnectionUtil {
       32 
       33 
       34     /**
       35      * 
       36      * @param urlPath
       37      *            下载路径
       38      * @param downloadDir
       39      *            下载存放目录
       40      * @return 返回下载文件
       41      */
       42     public static File downloadFile(String urlPath, String downloadDir) {
       43         File file = null;
       44         try {
       45             // 统一资源
       46             URL url = new URL(urlPath);
       47             // 连接类的父类,抽象类
       48             URLConnection urlConnection = url.openConnection();
       49             // http的连接类
       50             HttpURLConnection httpURLConnection = (HttpURLConnection) urlConnection;
       51             // 设定请求的方法,默认是GET
       52             httpURLConnection.setRequestMethod("POST");
       53             // 设置字符编码
       54             httpURLConnection.setRequestProperty("Charset", "UTF-8");
       55             // 打开到此 URL 引用的资源的通信链接(如果尚未建立这样的连接)。
       56             httpURLConnection.connect();
       57 
       58             // 文件大小
       59             int fileLength = httpURLConnection.getContentLength();
       60 
       61             // 文件名
       62             String filePathUrl = httpURLConnection.getURL().getFile();
       63             String fileFullName = filePathUrl.substring(filePathUrl.lastIndexOf(File.separatorChar) + 1);
       64 
       65             System.out.println("file length---->" + fileLength);
       66 
       67             URLConnection con = url.openConnection();
       68 
       69             BufferedInputStream bin = new BufferedInputStream(httpURLConnection.getInputStream());
       70 
       71             String path = downloadDir + File.separatorChar + fileFullName;
       72             file = new File(path);
       73             if (!file.getParentFile().exists()) {
       74                 file.getParentFile().mkdirs();
       75             }
       76             OutputStream out = new FileOutputStream(file);
       77             int size = 0;
       78             int len = 0;
       79             byte[] buf = new byte[1024];
       80             while ((size = bin.read(buf)) != -1) {
       81                 len += size;
       82                 out.write(buf, 0, size);
       83                 // 打印下载百分比
       84                 // System.out.println("下载了-------> " + len * 100 / fileLength +
       85                 // "%
      ");
       86             }
       87             bin.close();
       88             out.close();
       89         } catch (MalformedURLException e) {
       90             // TODO Auto-generated catch block
       91             e.printStackTrace();
       92         } catch (IOException e) {
       93             // TODO Auto-generated catch block
       94             e.printStackTrace();
       95         } finally {
       96             return file;
       97         }
       98 
       99     }
      100 
      101     public static void main(String[] args) {
      102 
      103         // 下载文件测试
      104         downloadFile("http://localhost:8080/images/1467523487190.png", "/Users/H__D/Desktop");
      105 
      106     }
      107 
      108 }
      downloadFile

      

       

  • 相关阅读:
    POJ 1416 Shredding Company
    HDU 2289 Cup
    Django Mysql数据库-F查询和Q查询
    Django Mysql数据库-聚合查询与分组查询
    Django Mysql数据库-基于双下划线的跨表查询
    centos下cp -r 命令可拷贝文件夹
    查看linux下mysql版本
    速卖通 排序规则解析
    跨境电商 -- 普及
    学习外贸英语单词--通过速卖通来学习句子和单词的含义
  • 原文地址:https://www.cnblogs.com/h--d/p/5638092.html
Copyright © 2011-2022 走看看