java文件传输接口,HttpURLConnection将数据以文件流的形式传送给接口
public JSONObject transferFile(String urlStr, String filePath, String fileName) {
HttpURLConnection conn = null
//boundary是request请求头和上传文件内容的分割符
String boundary = java.util.UUID.randomUUID().toString()
String prefix = "##"
String lineEnd = "\r\n"
OutputStream out = null
InputStream is = null
InputStream inStream = null
InputStreamReader isReader = null
BufferedReader bReader = null
try {
//connection 配置连接参数,并写出
URL url = new URL(urlStr)
conn = (HttpURLConnection)url.openConnection()
conn.setConnectTimeout(5000)
conn.setReadTimeout(30000)
conn.setDoOutput(true)
conn.setDoInput(true)
conn.setUseCaches(false)
conn.setRequestMethod("POST")
conn.setRequestProperty("connection", "keep-alive")
conn.setRequestProperty("Content-Type","multipart/form-data
conn.setRequestProperty("x-client-token", "")
out = new DataOutputStream(conn.getOutputStream())
StringBuilder sb = new StringBuilder()
sb.append(prefix)
sb.append(boundary)
sb.append(lineEnd)
sb.append("Content-Disposition:form-data
sb.append("Content-Type:application/octet-stream
sb.append(lineEnd)
out.write(sb.toString().getBytes())
//写出文件内容的二进制信息
is = new FileInputStream(filePath)
byte[] bt = new byte[1024]
int len = 0
while ((len = is.read(bt)) != -1) {
out.write(bt, 0, len)
}
out.write(lineEnd.getBytes())
byte[] endData = (prefix + boundary + prefix + lineEnd).getBytes()
out.write(endData)
out.flush()
//返回响应code,并读入接口返回信息
int resCode = conn.getResponseCode()
inStream = conn.getInputStream()
isReader = new InputStreamReader(inStream)
bReader = new BufferedReader(isReader)
String line = ""
StringBuilder sb2 = new StringBuilder()
while ((line = bReader.readLine()) != null) {
sb2.append(line)
}
JSONObject result = JSONObject.parseObject(sb2.toString())
conn.disconnect()
return result
} catch(Exception e) {
e.printStackTrace()
return null
} finally {
if (bReader != null) {
try{
bReader.close()
}catch(Exception e){
e.printStackTrace()
}
}
if (isReader != null) {
try{
isReader.close()
}catch(Exception e){
e.printStackTrace()
}
}
if (inStream != null) {
try{
inStream.close()
}catch(Exception e){
e.printStackTrace()
}
}
if (is != null) {
try{
is.close()
}catch(Exception e){
e.printStackTrace()
}
}
if (out != null) {
try{
out.close()
} catch (Exception e){
e.printStackTrace()
}
}
if (conn != null) {
conn.disconnect()
}
}
}