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>,>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值