在android开发中我们经常会实现例如一些图片等流文件的上传。接下来介绍一种转换为Base64 然后通过post的参数形式上传.

/**

* 图片文件转Base64字符串

* @param path 文件所在的绝对路径加文件名

* @return

*/

private String fileBase64String(String path){

try {

FileInputStream fis = new FileInputStream(path);//转换成输入流

ByteArrayOutputStream baos = new ByteArrayOutputStream();

byte[] buffer = new byte[1024];

int count = 0;

while((count = fis.read(buffer)) >= 0){

baos.write(buffer, 0, count);//读取输入流并写入输出字节流中

}

fis.close();//关闭文件输入流

String uploadBuffer = new String(Base64.encodeToString(baos.toByteArray(),Base64.DEFAULT)); //进行Base64编码

return uploadBuffer;

} catch (Exception e) {

return null;

}

}

我们首先可以通过此方法把文件转换成String 然后通过Post请求中的Params 传入。

map.put("image",fileBase64String(filePath+fileName));

private String requestPost(String urlPath, String params, OnJsonResponse onJsonResponse){

String bodyStr = fileBase64String(filePath+fileName);

byte[] data = bodyStr.getBytes();//获得请求体

try {

URL url = new URL(urlPath);

HttpURLConnection httpURLConnection = (HttpURLConnection)url.openConnection();

httpURLConnection.setConnectTimeout(timeoutMillis); //设置连接超时时间

httpURLConnection.setDoInput(true); //打开输入流,以便从服务器获取数据

httpURLConnection.setDoOutput(true); //打开输出流,以便向服务器提交数据

httpURLConnection.setRequestMethod("POST"); //设置以Post方式提交数据

httpURLConnection.setUseCaches(false); //使用Post方式不能使用缓存

//设置请求体的类型是文本类型

httpURLConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

//设置请求体的长度

httpURLConnection.setRequestProperty("Content-Length", String.valueOf(data.length));

//获得输出流,向服务器写入数据

OutputStream outputStream = httpURLConnection.getOutputStream();

outputStream.write(data);

int response = httpURLConnection.getResponseCode(); //获得服务器的响应码

if(response == HttpURLConnection.HTTP_OK) {

InputStream inputStream = httpURLConnection.getInputStream();

String result = dealResponseResult(inputStream);

if(onJsonResponse != null){

onJsonResponse.onJsonReceived(urlPath, request_success, result);

}

Log.w(TAG,"result = " + result);

return result; //处理服务器的响应结果

}else{

if(onJsonResponse != null){

onJsonResponse.onJsonReceived(urlPath, request_failure, "fail code : " + response);

}

}

} catch (IOException e) {

e.printStackTrace();

if(onJsonResponse != null){

onJsonResponse.onJsonReceived(urlPath, request_failure, "fail msg : " + e.getMessage());

}

}

return null;

}

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐