spring boot MVC作为服务器端, apache.httpclient作为客户端的文件传输模式(demo代码)

最近做http协议下面的数据传输,总结一下

1. 上传单个文件:

服务器端代码:

@RequestMapping(value = "/POST", method = RequestMethod.POST)

@ResponseBody

public String PostTest(String test_data, MultipartFile file ){

System. out.println("comming here!" );

if (!file .isEmpty()) {

try {

byte[] bytes = file .getBytes();

BufferedOutputStream stream =  new BufferedOutputStream(

new FileOutputStream(new File("d:\\temp\\" + test_data + "-uploaded")));

stream.write( bytes);

stream.close();

return "You successfully uploaded " + test_data + " into " + test_data + "-uploaded !" ;

catch (Exception e ) {

return "You failed to upload " + test_data + " => " + e.getMessage();

}

else {

return "You failed to upload " + test_data + " because the file was empty.";

}

}

客户端代码:

public static void testUploadOne() throws ClientProtocolException, IOException{

@SuppressWarnings("resource" )

HttpClient httpclient = new DefaultHttpClient() ;

HttpPost httppost = new HttpPost("http://127.0.0.1:8080/POST/" );

FileBody fileContent = new FileBody(new File( "D:\\projectSet.psf"));

StringBody stringBody = new StringBody ("123456" );

@SuppressWarnings("deprecation" )

MultipartEntity reqEntity = new MultipartEntity();

reqEntity.addPart("file", fileContent);

reqEntity.addPart("test_data", stringBody );

httppost.setEntity( reqEntity);

try {

HttpResponse response = httpclient.execute(httppost );

int statusCode = response .getStatusLine().getStatusCode();

if(statusCode == HttpStatus.SC_OK){

System. out.println("服务器正常响应....." );

HttpEntity resEntity = response .getEntity();

System.out.println(EntityUtils.toString(resEntity ));// httpclient自带的工具类读取返回数据

System. out.println(resEntity .getContent());

EntityUtils. consume(resEntity);

}

catch (ClientProtocolException e ) {

// TODO Auto-generated catch block

e.printStackTrace();

catch (IOException e ) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

2.

一次上传多个文件:

服务器端代码:

public static String writeMulti(String test_data , MultipartFile file){

if (!file .isEmpty()) {

try {

byte[] bytes = file .getBytes ();

BufferedOutputStream stream =  new BufferedOutputStream(

new FileOutputStream( new File("d:\\temp\\" + test_data)));

stream. write(bytes);

stream. close();

return "You successfully uploaded " + test_data + " into " + test_data + "!" ;

catch (Exception e) {

return "You failed to upload " + test_data + " => " + e.getMessage();

}

else {

return "You failed to upload " + test_data + " because the file was empty.";

}

}

@RequestMapping(value = "/TPOST", method = RequestMethod.POST)

@ResponseBody

public void Test(@RequestParam ("file_name" ) String[] file_name, @RequestParam("file" ) MultipartFile[] file,

HttpServletRequest request) throws FileUploadException, IOException{

System. out.println("comming here!" );

System. out.println("file name length: " + file_name .length + " file length: " + file.length);

writeMulti(file_name [0], file [0]);

writeMulti(file_name [1], file [1]);

}

客户端代码:

public static void testUploadMultiFiles() throws ClientProtocolException, IOException{

@SuppressWarnings("resource" )

HttpClient httpclient = new DefaultHttpClient();

HttpPost httppost = new HttpPost("http://127.0.0.1:8080/TPOST/" );

FileBody fileContent = new FileBody(new File("C:\\Users\\Tangyun\\Desktop\\xiazai\\lbfs.pdf" ));

FileBody fileContent1 = new FileBody(new File("C:\\Users\\Tangyun\\Desktop\\xiazai\\server_demo.erl" ));

StringBody stringBody = new StringBody ("lbfs.pdf" );

StringBody stringBody1 = new StringBody ("server_demo.erl" );

MultipartEntity reqEntity = new MultipartEntity();

// 你只传了一个参数 test_data  没有file , 而且test_data给的值是 文件

reqEntity.addPart("file" , fileContent );

reqEntity.addPart("file_name" , stringBody );

reqEntity.addPart("file" , fileContent1 );

reqEntity.addPart("file_name" , stringBody1 );

httppost.setEntity( reqEntity);

try {

HttpResponse response = httpclient.execute(httppost );

int statusCode = response .getStatusLine().getStatusCode();

if(statusCode == HttpStatus.SC_OK){

System. out.println("服务器正常响应....." );

HttpEntity resEntity = response .getEntity();

System.out.println(EntityUtils.toString(resEntity ));// httpclient自带的工具类读取返回数据

System. out.println(resEntity .getContent());

EntityUtils. consume(resEntity);

}

catch (ClientProtocolException e ) {

// TODO Auto-generated catch block

e.printStackTrace();

catch (IOException e ) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

3.

下载文件:

服务器端代码:

@RequestMapping(value = "/download", method = RequestMethod.GET)

public static ResponseEntity<byte[]> downloadFile(String fileId) {

HttpHeaders headers = new HttpHeaders();

headers.setContentType(MediaType. APPLICATION_OCTET_STREAM);

headers.setContentDispositionFormData( "attachment", "dict.txt" );

String downloadDataString = "download success!" ;

return new ResponseEntity<byte[]>( downloadDataString.getBytes(),

headers, HttpStatus. CREATED);

}

客户端代码:

public static void download() {

HttpClient client = new DefaultHttpClient();

HttpGet httpGet = new HttpGet("http://127.0.0.1:8080/download/" );

try {

HttpResponse response  = client.execute( httpGet);

HttpEntity entity = response.getEntity();

InputStream in = entity.getContent();

FileOutputStream out = new FileOutputStream(new File("D:\\temp\\download.txt" ));

byte[] b = new byte[1000];

int len = 0;

while((len =in .read(b ))!= -1){

out.write( b,0, len);

}

in.close();

out.close();

catch (IOException e ) {

e.printStackTrace();

finally{

httpGet.releaseConnection();

}

System. out.println("download, success!!" );

}

时间: 2024-10-27 07:48:34

spring boot MVC作为服务器端, apache.httpclient作为客户端的文件传输模式(demo代码)的相关文章

干货分享:ASP.NET CORE(C#)与Spring Boot MVC(JAVA)异曲同工的编程方式总结

目录 C# VS JAVA 基础语法类比篇: 一.匿名类 二.类型初始化 三.委托(方法引用) 四.Lambda表达式 五.泛型 六.自动释放 七.重写(override) ASP.NET CORE VS Spring Boot 框架部署类比篇: 一.引用依赖(包) 二.依赖注入 DI (IOC容器) 三.过滤器.拦截器 AOP 四.配置读取 五.发布.部署.运行 我(梦在旅途,http://zuowj.cnblogs.com; http://www.zuowenjun.cn)最近发表的一篇文章

Apache Camel 与 Spring Boot 集成,通过FTP定时采集、处理文件

1.概要: 本项目主要是通过在Spring平台上配置Camel.FTP,实现定时从FTP服务器下载文件到本地.解析文件.存入数据库等功能. 2.搭建空项目: Spring Boot有几种自动生成空项目的机制:CLI.Spring tool suite.网站Spring Initializr,我们选择第三个. 访问网站http://start.spring.io/,如下图 在dependencies添加依赖包的时候,在框中输入camle.jdbc.mysql会自动弹出提示,确认即为选中,如下图:

曹工说Spring Boot源码(5)-- 怎么从properties文件读取bean

写在前面的话 相关背景及资源: 曹工说Spring Boot源码(1)-- Bean Definition到底是什么,附spring思维导图分享 曹工说Spring Boot源码(2)-- Bean Definition到底是什么,咱们对着接口,逐个方法讲解 曹工说Spring Boot源码(3)-- 手动注册Bean Definition不比游戏好玩吗,我们来试一下 曹工说Spring Boot源码(4)-- 我是怎么自定义ApplicationContext,从json文件读取bean de

spring boot集成mybatis 自动生成实体类和mapper文件、Dao层

1.创建spring boot集成mybatis请见 2.在resources目录下新键mybatis-generator文件夹,并在文件夹中新键mybatis-generatorConfig.xml文件和mybatis-generatorinit.properties两个文件 mybatis-generatorinit.properties jdbc_driver=oracle.jdbc.driver.OracleDriver jdbc_url=jdbc:oracle:thin:@loclho

MVC从服务器端返回js到客户端的方法(总结)

1.利用ViewBag,从服务器端创建一个显示js开关的ViewBag,然后到View中去做判断. Controller端 [HttpPost] public ActionResult Index(hk_Admin model) { if (model.UserName != "xiaojie") { ModelState.AddModelError("UserName", "用户名不正确."); } if (!ModelState.IsVali

Spring Boot——2分钟构建spring web mvc REST风格HelloWorld

之前有一篇<5分钟构建spring web mvc REST风格HelloWorld>介绍了普通方式开发spring web mvc web service.接下来看看使用spring boot如何快速构建一个. Spring Boot使我们更容易去创建基于Spring的独立和产品级的可以”即时运行“的应用和服务.支持约定大于配置,目的是尽可能快地构建和运行Spring应用. 之前我们创建基于Spring的项目需要考虑添加哪些Spring依赖和第三方的依赖.使用Spring Boot后,我们可

Spring Boot 实践折腾记(五):自定义配置,扩展Spring MVC配置并使用fastjson

每日金句 专注和简单一直是我的秘诀之一.简单可能比复杂更难做到:你必须努力理清思路,从而使其变得简单.但最终这是值得的,因为一旦你做到了,便可以创造奇迹.--源自乔布斯 题记 前两天有点忙,没有连续更新,今天接着聊.金句里老乔的话说得多好,但能真正做到的人又有多少?至少就我个人而言,我还远远没有做到这样,只是一个在朝着这个方向努力的人,力求简明易懂,用大白话让人快速的明白理解,简单的例子上手,让使用的人更多的去实战使用扩展,折腾记即是对自己学习使用很好的一次总结,对看的人也是一个参考的方法,希望

Spring Boot 官方文档入门及使用

个人说明:本文内容都是从为知笔记上复制过来的,样式难免走样,以后再修改吧.另外,本文可以看作官方文档的选择性的翻译(大部分),以及个人使用经验及问题. 其他说明:如果对Spring Boot没有概念,请先移步上一篇文章 Spring Boot 学习.本篇原本是为了深入了解下Spring Boot而出现的. 另外,Spring Boot 仍然是基于Spring的,建议在赶完工之后深入学习下Spring,有兴趣可以看看我的 Spring 4 官方文档学习(十一)Web MVC 框架 .欢迎探讨,笑~

android+spring boot 选择,上传,下载文件

1 概述 前端android,上传与下载文件,使用OkHttp处理请求,后端使用spring boot+MVC,处理android发送来的上传与下载请求.这个其实不难,就是特别多奇奇怪怪的坑,因此,希望看到的,不要像笔者这样踩的那么痛苦了... 2 环境 win10 Spring Boot 2.2.2 RELEASE IDEA 2019.3.1 Android Studio 3.6RC1 Tomcat 9.0.30 3 android 3.1 准备工作 3.1.1 新建工程 这次用一个全新的例子