java restful文件传输_Java 上传文件到 Restful API

摘要:Java 上传文件

这个方法是从网络上学来的

包装成自己使用的方法

大部分好像是用来写在Android手机上,Android手机使用RestApi上传文件时需要用到。(上传照片之类的)

我将一般字段的key,value及文件字段的key,value分开,分别使用data_map及file_map保存(类HashMap)

file_map则是control_name ,file_path 为key,value型式。

data_map则是control_name,control_value为key,value型式。

我使用的是HttpsURLConnection 做connection 连线上传。

Content-Type需设为"multipart/form-data; boundary = " + BOUNDARY

BOUNDARY是自定,这里定的是 "=================================="

用来分辨不同的control数据,一个区段为一个control 数据

每个区段开始以HYPHENS + BOUNDARY来分辨

HYPHENS= "--";

如果我传输两个control资讯到api的话(control_name,control_name2),file control 为file_control

则传输数据如下

--==================================

Content-isposition: form-data; name=control_name

control_value

--==================================

Content-isposition: form-data; name=control_name2

control_value2

--==================================

Content-isposition: form-data; name=file_control;filename=D:file.txt

Content-Type: text/plain

file_content

以下是Java Code Funtion ,并回传Responsepublic String post_file(String rest_api_url,HashMap data_map,HashMap file_map) throws Exception

{

String result = "";

try

{

final String BOUNDARY = "==================================";

final String HYPHENS = "--";

final String CRLF = "rn";

URL url = new URL(rest_api_url);

HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();

conn.setRequestMethod("POST");

conn.setDoOutput(true);

conn.setDoInput(true);

conn.setUseCaches(false);

conn.setRequestProperty("Content-Type","multipart/form-data; boundary="+BOUNDARY);

DataOutputStream dataOS = new DataOutputStream(conn.getOutputStream());

//传数据

for(String key:data_map.keySet())

{

// 写--==================================

dataOS.writeBytes(HYPHENS+BOUNDARY+CRLF);

dataOS.writeBytes("Content-Disposition: form-data; name= ""+key+"""+CRLF);

dataOS.writeBytes(CRLF);

dataOS.writeBytes(data_map.get(key)+CRLF);

}

//传文件===============================================================================

for(String key:file_map.keySet())

{

FileInputStream fileInputStream = new FileInputStream(new File(file_map.get(key)));

// 写--==================================

dataOS.writeBytes(HYPHENS+BOUNDARY+CRLF);

dataOS.writeBytes("Content-Disposition: form-data; name=""+key+""; filename=""+file_map.get(key)+"""+CRLF); // 写(Disposition)

dataOS.writeBytes("Content-Type: text/plain"+CRLF); // 写(Content Type)

dataOS.writeBytes(CRLF);

int iBytesAvailable = fileInputStream.available();

byte[] byteData = new byte[iBytesAvailable];

int iBytesRead = fileInputStream.read(byteData, 0, iBytesAvailable);

while (iBytesRead > 0) {

dataOS.write(byteData, 0, iBytesAvailable); // 开始写内容

iBytesAvailable = fileInputStream.available();

iBytesRead = fileInputStream.read(byteData, 0, iBytesAvailable);

}

dataOS.writeBytes(CRLF);

fileInputStream.close();

}

// (结束)写--==================================--

dataOS.writeBytes(HYPHENS+BOUNDARY+HYPHENS);

dataOS.flush();

dataOS.close();

//取得响应

// 定义BufferedReader输入流来读取URL的响应

BufferedReader reader = new BufferedReader( new InputStreamReader(conn.getInputStream()));

String line = null ;

StringBuilder sb = new StringBuilder();

while ((line = reader.readLine()) != null ) {

sb.append(line);

}

if (conn != null) {

conn.disconnect();

}

conn =null;

result = sb.toString();

sb.setLength(1);

sb = null;

}catch (Exception ex)

{

ex.printStackTrace();

}

return result;

},string>,>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java RESTful API接口是一种基于Java的编程语言和RESTful架构风格的接口。它的设计目的是提供一种轻量级、灵活、可伸缩和易于理解的接口,使客户端和服务器之间的通信更加简单和高效。 一个简单的Java RESTful API接口实例可以是一个用于创建、读取、更新和删除用户数据的接口。通过这个接口,客户端可以发送HTTP请求来执行不同的操作,比如创建新用户、获取特定用户的信息、更新用户的信息或者删除用户。 在这个实例中,我们可以使用Java语言和相关的框架(比如Spring Boot)来实现RESTful接口。我们可以通过创建一个Controller类来定义不同的URL路径和相应的操作(比如GET、POST、PUT、DELETE),并且使用相关的注解来标识这些操作的行为。我们还可以使用Java对象来表示用户数据,通过JSON格式来输数据到客户端和服务器端。 在实现Java RESTful API接口的过程中,我们还可以考虑到一些安全性和性能的问题。比如使用HTTPS来加密通信、使用认证和授权机制来保护接口的访问、使用缓存来提高接口的访问速度等等。 总之,Java RESTful API接口是一种有效的方式来实现客户端和服务器端之间的通信,并且它可以帮助我们设计出简洁、可维护和可扩展的接口。通过这种接口,我们可以更加灵活地构建各种不同类型的应用程序,比如移动应用、Web应用、物联网应用等等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值