当前位置: 首页 > 编程笔记 >

Java下http下载文件客户端和上传文件客户端实例代码

冀崇凛
2023-03-14
本文向大家介绍Java下http下载文件客户端和上传文件客户端实例代码,包括了Java下http下载文件客户端和上传文件客户端实例代码的使用技巧和注意事项,需要的朋友参考一下

一、下载客户端代码

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; 
/** 
 * @说明 导出虚拟机 
 * @author wxt 
 * @version 1.0 
 * @since 
 */ 
public class GetVM { 
  /** 
   * 测试 
   * @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 + " 字节"); 
      String fileName = "ygserver"; 
      writeImageToDisk(btImg, fileName); 
    }else{ 
      System.out.println("没有从该连接获得内容"); 
    } 
  } 
  /** 
   * 将vm 写入到磁盘 
   * @param vm 数据流 
   * @param fileName 文件保存时的名称 
   */ 
  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(); 
    } 
  } 
  /** 
   * 根据地址获得数据的字节流 
   * @param strUrl 网络连接地址 
   * @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();//通过输入流获取数据 
      byte[] btImg = readInputStream(inStream);//得到的二进制数据 
      return btImg; 
    } catch (Exception e) { 
      e.printStackTrace(); 
    } 
    return null; 
  } 
  /** 
   * 从输入流中获取数据 
   * @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(); 
  } 
} 

上述代码只适合下载小文件,如果下载大文件则会出现  Exception in thread "main" java.lang.OutOfMemoryError: Java heap space 错误,所以如果下载大文件需要对上述代码进行改造,代码如下:

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; 
/** 
 * @说明 导出虚拟机 
 * @author wxt 
 * @version 1.0 
 * @since 
 */ 
public class GetBigFile { 
  /** 
   * 测试 
   * @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); 
  } 
  /** 
   * 根据地址获下载文件 
   * @param strUrl 网络连接地址 
   * @param fileName 下载文件的存储名称 
   */ 
  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();//通过输入流获取数据 
      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 { 
  /** 
   * 发送请求 
   * 
   * @param url 
   *      请求地址 
   * @param filePath 
   *      文件在服务器保存路径(这里是为了自己测试方便而写,可以将该参数去掉) 
   * @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(); 
    /** 
     * 设置关键值 
     */ 
    con.setRequestMethod("POST"); // 以Post方式提交表单,默认get方式 
    con.setDoInput(true); 
    con.setDoOutput(true); 
    con.setUseCaches(false); // post方式不能使用缓存 
    // 设置请求头信息 
    con.setRequestProperty("Connection", "close");//Keep-Alive 
    con.setRequestProperty("Charset", "UTF-8"); 
    // 设置边界 
    String BOUNDARY = "----------" + System.currentTimeMillis(); 
    con.setRequestProperty("Content-Type", "multipart/form-data; boundary=" 
        + BOUNDARY); 
    // 请求正文信息 
    // 第一部分: 
    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(); 
    // 结尾部分 
    byte[] foot = ("\r\n--" + BOUNDARY + "--\r\n").getBytes("utf-8");// 定义最后数据分隔线 
    out.write(foot); 
    out.flush(); 
    out.close(); 
    /** 
     * 读取服务器响应,必须读取,否则提交不成功 
     */ 
    return con.getResponseCode(); 
    /** 
     * 下面的方式读取也是可以的 
     */ 
    // try { 
    // // 定义BufferedReader输入流来读取URL的响应 
    // 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("发送POST请求出现异常!" + 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")); 
    ; 
  } 
} 

总结

以上所述是小编给大家介绍的Java下http下载文件客户端和上传文件客户端实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对小牛知识库网站的支持!

 类似资料:
  • 本文向大家介绍Java实现文件上传服务器和客户端,包括了Java实现文件上传服务器和客户端的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Java实现文件上传服务器和客户端的具体代码,供大家参考,具体内容如下 文件上传服务器端: 文件上传客户端: 本文已被整理到了《Java上传操作技巧汇总》,欢迎大家学习阅读。  以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐

  • 我有一个php脚本,它将文件流式传输到客户端。 当我只需点击下载链接(例如,file.php?=id{file-id})时,下载就开始了,但所有数据都进入RAM。这样做的问题是当用户的RAM已满时,下载就会停止。我说的是AVG。100GB文件。 最快的解决办法是什么?GoogleDrive/OneDrive等如何做到?

  • 我的服务器端代码是: 在我的客户机代码中,我得到的响应为200OK,但我无法保存我的文件在硬盘在下面的行,我提到的路径和位置,文件需要保存。不知道这里出了什么问题,任何帮助都将不胜感激。提前谢谢!!

  • 我使用的是Jersey 2.28,想要编写一个客户端来上传1Gb的文件,而客户端JVM堆不能超过256Mb。 我在这里有什么选择? 我试着用下面的代码片段,但结果是OOM,因为Jersey似乎一直在尽可能多地从InputStream中读取数据。为了处理大量输入,可以指示球衣进行冲洗吗?

  • 本文向大家介绍java文件上传下载代码实例,包括了java文件上传下载代码实例的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了java文件上传下载的具体代码,供大家参考,具体内容如下 文件上传 文件下载 以上所述是小编给大家介绍的java文件上传下载详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对呐喊教程网站的支持!

  • 我肯定在这里缺少某种序列化程序 任何建议都将不胜感激! 谢谢