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

发布于 2021-1-14|

复制链接

摘记: 一、下载客户端代码

```java

package javadownload;

import java.io.ByteArrayOutputStream;

import java.io.File;

import java.io.Fi ..

一、下载客户端代码

```java

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 错误,所以如果下载大文件需要对上述代码进行改造,代码如下:

```java

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();

}

}

}

```

二、上传文件客户端:

```java

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下http下载文件客户端和上传文件客户端实例代码相关推荐

  1. file上传代码 ios_iOS视频压缩存储至本地并上传至服务器实例代码

    最近做了一个项目,我把其中的核心功能拿出来和大家分享一下,重点还是自己梳理一下. 这里关于视频转码存储我整理了两个方法,这两个方法都是针对相册内视频进行处理的. 1.该方法没有对视频进行压缩,只是将视 ...

  2. linux sftp 上传文件内容为空,求linux 下 C/c++ 实现SFTP上传文件的代码,或shell 写的如何区分上传是否成功?...

    如题求linux系统下C/C++实现SFTP上传文件的代码,最好有一定的中文注释,谢谢了. 或是, 我看FTP上传的shell写的比较简单,但是,如何能判断是否上传成功哪?? 如果想做上传的进度条的话 ...

  3. JAVA客户端数据传输_java模拟TCP通信实现客户端上传文件到服务器端

    java模拟TCP通信实现客户端上传文件到服务器端,供大家参考,具体内容如下 客户端 package com.zr; import java.io.FileInputStream; import ja ...

  4. Selenium+Python 下载文件与上传文件

    Selenium+Python 下载文件与上传文件 目录 下载文件功能 谷歌浏览器下载设置 切换iframe框架 鼠标悬浮元素定位 鼠标悬浮后出现的元素定位 上传文件 切换句柄 利用AutoIt进行桌 ...

  5. php+easyui+上传文件,easyui 上传文件代码

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.IO ...

  6. Java springcloud B2B2C o2o多用户商城 springcloud架构 (十七)上传文件

    2019独角兽企业重金招聘Python工程师标准>>> 这篇文章主要介绍,如何在springboot工程作为服务器,去接收通过http 上传的multi-file的文件. 构建工程 ...

  7. 以命令方式从ftp服务器上下载和上传文件

    ** 以命令方式从ftp服务器上下载和上传文件 wang ** 1."开始"→"运行",输入"cmd",打开命令提示符: 2.在命令提示符内 ...

  8. ftp linux 推送文件_Linux下SSH用FTP命令上传文件至另一个FTP空间

    如果没有ftp 提示: -bash: ftp: command not found 请先安装ftp应用程序: yum install ftp #ftp 127.0.0.1 21 输入远程空间的FTP ...

  9. win10下php + apache客户端上传文件

    win10下php + apache客户端上传文件 1.apache配置1 //去掉以下行首#,加载apache相关模块,启用php LoadModule actions_module modules ...

最新文章

  1. 55 前端构建工具Gulp
  2. 什么时候使用临时表?
  3. Windows 2003 安装WLM2009/MSN9错误的另一种解决办法
  4. ABAP OO小例子
  5. java jsonobject转List_java – 将JSONObject转换为List或JSONArray的简单代码?
  6. JavaGUI版本销售管理系统
  7. html 头标签 meta http-equiv 属性应用。
  8. 生成api接口文档的故事
  9. win10安装solidworks 注册机闪退的问题,转自知乎
  10. 假设有一个英文文本文件,编写程序读取其内容,并将其中的大写字母变为小写字母,小写字母变为大写字母。...
  11. android c++服务器端,c++服务器与android客户端进行文件传输功能的实现
  12. 新能源电动车充电隐患不得不防,这些常识要知道
  13. Python爬虫笔记————抓取 猫眼电影排行榜Top100
  14. echarts地图导航飞线与层级穿透
  15. CSDN博客插入图片
  16. 互联网常用词汇索引表
  17. 城际客车微信订票系统(固定线路拼车在线售票平台开发)
  18. 巧妙地用继电器实现直流电机正反转
  19. Win7 vista 界面美化
  20. 笔记本电脑设备管理器中'符合USBxHCI的主机控制器'出现感叹号,所有的USB接口失灵--解决

热门文章

  1. 100%的BAT招聘岗位都考的知识,你精通了吗?
  2. Leangoo看板工具做单团队敏捷开发
  3. 麦克纳姆轮——机械部分
  4. 分享一个iec104协议的资源,一个模拟iec104协议主站端的小工具
  5. 05Observer/Event(观察者)模式
  6. 如何区分网线是几类的_认清网线的六种材质,挑选网线不再被坑
  7. pyqt创建窗口没有句柄_Filament 渲染引擎剖析 之 FrameGraph 1 虚拟资源的定义与创建...
  8. 自动驾驶多模态传感器融合的综述
  9. 接收率25.9%,ICCV 2021接收论文列表放出,你中了吗?
  10. IDA-3D:基于立体视觉的深度感知3D目标检测网络(CVPR2020)