android 文件上传工具类,Android上传图片工具类

/**

* 图片上传

*/

public class UpLoadUtil {

private static final String TAG ="uploadFile";

private static final int TIME_OUT =10 *1000; // 超时时间

private static final String CHARSET ="utf-8"; // 设置编码

/**

* Android上传文件到服务端

*

* @param file 需要上传的文件

* @param RequestURL 请求的rul

* @return 返回响应的内容

*/

public static String uploadFile(File file, String RequestURL) {

String result =null;

String BOUNDARY = UUID.randomUUID().toString(); // 边界标识 随机生成

String PREFIX ="--", LINE_END ="\r\n";

String CONTENT_TYPE ="multipart/form-data"; // 内容类型

try {

URL url =new URL(RequestURL);

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

conn.setReadTimeout(TIME_OUT);

conn.setConnectTimeout(TIME_OUT);

conn.setDoInput(true); // 允许输入流

conn.setDoOutput(true); // 允许输出流

conn.setUseCaches(false); // 不允许使用缓存

conn.setRequestMethod("POST"); // 请求方式

conn.setRequestProperty("Charset", CHARSET); // 设置编码

conn.setRequestProperty("connection", "keep-alive");

conn.setRequestProperty("Content-Type", CONTENT_TYPE +";boundary=" + BOUNDARY);

if (file !=null) {

/**

* 当文件不为空,把文件包装并且上传

*/

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

StringBuffer sb =new StringBuffer();

sb.append(PREFIX);

sb.append(BOUNDARY);

sb.append(LINE_END);

/**

* 这里重点注意: name里面的值为服务端需要key 只有这个key 才可以得到对应的文件

* filename是文件的名字,包含后缀名的 比如:abc.png

*/

sb.append("Content-Disposition: form-data; name=\"uploadfile\"; filename=\""

+ file.getName() +"\"" + LINE_END);

sb.append("Content-Type: application/octet-stream; charset=" + CHARSET + LINE_END);

sb.append(LINE_END);

dos.write(sb.toString().getBytes());

InputStream is =new FileInputStream(file);

byte[] bytes =new byte[1024];

int len =0;

while ((len = is.read(bytes)) != -1) {

dos.write(bytes, 0, len);

}

is.close();

dos.write(LINE_END.getBytes());

byte[] end_data = (PREFIX + BOUNDARY + PREFIX + LINE_END).getBytes();

dos.write(end_data);

dos.flush();

/**

* 获取响应码 200=成功 当响应成功,获取响应的流

*/

int res = conn.getResponseCode();

Log.e(TAG, "response code:" + res);

// if(res==200)

// {

Log.e(TAG, "request success");

InputStream input = conn.getInputStream();

StringBuffer sb1 =new StringBuffer();

int ss;

while ((ss = input.read()) != -1) {

sb1.append((char) ss);

}

result = sb1.toString();

Log.e(TAG, "result : " + result);

// }

// else{

// Log.e(TAG, "request error");

// }

}

}catch (MalformedURLException e) {

e.printStackTrace();

}catch (IOException e) {

e.printStackTrace();

}

return result;

}

/**

* 通过拼接的方式构造请求内容,实现参数传输以及文件传输

*

* @param url Service net address

* @param params text content

* @param files pictures

* @return String result of Service response

* @throws IOException

*/

public static String post(String url, Map params, Map files)

throws IOException {

String BOUNDARY = UUID.randomUUID().toString();

String PREFIX ="--", LINEND ="\r\n";

String MULTIPART_FROM_DATA ="multipart/form-data";

String CHARSET ="UTF-8";

URL uri =new URL(url);

HttpURLConnection conn = (HttpURLConnection) uri.openConnection();

conn.setReadTimeout(10 *1000); // 缓存的最长时间

conn.setDoInput(true);// 允许输入

conn.setDoOutput(true);// 允许输出

conn.setUseCaches(false); // 不允许使用缓存

conn.setRequestMethod("POST");

conn.setRequestProperty("connection", "keep-alive");

conn.setRequestProperty("Charsert", "UTF-8");

conn.setRequestProperty("Content-Type", MULTIPART_FROM_DATA +";boundary=" + BOUNDARY);

// 首先组拼文本类型的参数

StringBuilder sb =new StringBuilder();

for (Map.Entry entry : params.entrySet()) {

sb.append(PREFIX);

sb.append(BOUNDARY);

sb.append(LINEND);

sb.append("Content-Disposition: form-data; name=\"" + entry.getKey() +"\"" + LINEND);

sb.append("Content-Type: text/plain; charset=" + CHARSET + LINEND);

sb.append("Content-Transfer-Encoding: 8bit" + LINEND);

sb.append(LINEND);

sb.append(entry.getValue());

sb.append(LINEND);

}

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

outStream.write(sb.toString().getBytes());

// 发送文件数据

if (files !=null)

for (Map.Entry file : files.entrySet()) {

StringBuilder sb1 =new StringBuilder();

sb1.append(PREFIX);

sb1.append(BOUNDARY);

sb1.append(LINEND);

sb1.append("Content-Disposition: form-data; name=\"uploadfile\"; filename=\""

+ file.getValue().getName() +"\"" + LINEND);

sb1.append("Content-Type: application/octet-stream; charset=" + CHARSET + LINEND);

sb1.append(LINEND);

outStream.write(sb1.toString().getBytes());

InputStream is =new FileInputStream(file.getValue());

byte[] buffer =new byte[1024];

int len =0;

while ((len = is.read(buffer)) != -1) {

outStream.write(buffer, 0, len);

}

is.close();

outStream.write(LINEND.getBytes());

}

// 请求结束标志

byte[] end_data = (PREFIX + BOUNDARY + PREFIX + LINEND).getBytes();

outStream.write(end_data);

outStream.flush();

// 得到响应码

int res = conn.getResponseCode();

InputStream in = conn.getInputStream();

StringBuilder sb2 =new StringBuilder();

if (res ==200) {

int ch;

while ((ch = in.read()) != -1) {

sb2.append((char) ch);

}

}

outStream.close();

conn.disconnect();

return sb2.toString();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android 上传至服务器和下载至本地,亲测有效,只需传入相关参数即可。/** * android上传到服务器 * * @param file * 需要上传 * @param RequestURL * 请求的rul * @return 返回响应的内容 */ public static String uploadFile(Map<String,String>params,File file, String RequestURL) { String BOUNDARY = UUID.randomUUID().toString(); // 边界标识 随机生成 String PREFIX = "--", LINE_END = "\r\n"; String CONTENT_TYPE = "multipart/form-data"; // 内容类型 try { URL url = new URL(RequestURL); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setReadTimeout(TIME_OUT); conn.setConnectTimeout(TIME_OUT); conn.setDoInput(true); // 允许输入流 conn.setDoOutput(true); // 允许输出流 conn.setUseCaches(false); // 不允许使用缓存 conn.setRequestMethod("POST"); // 请求方式 conn.setRequestProperty("Charset", CHARSET); // 设置编码 conn.setRequestProperty("connection", "keep-alive"); conn.setRequestProperty("Content-Type", CONTENT_TYPE + ";boundary=" + BOUNDARY); if (file != null) { Log.i(TAG, "====file is"+file); /** * 当不为空,把包装并且上传 */ OutputStream outputSteam = conn.getOutputStream(); DataOutputStream dos = new DataOutputStream(outputSteam); StringBuffer sb = new StringBuffer(); /************************上传表单的一些设置信息***********************************/ if (params != null) for (String key : params.keySet()) { sb.append("--" + BOUNDARY + "\r\n"); sb.append("Content-Disposition: form-data; name=\"" + key + "\"" + "\r\n"); sb.append("\r\n"); sb.append(params.get(key) + "\r\n"); } /************************上传的一些设置信息***********************************/ sb.append(PREFIX); sb.append(BOUNDARY); sb.append(LINE_END); /** * 这里重点注意: name里面的值为服务器端需要key 只有这个key 才可以得到对应的 * filename是的名字,包含后缀名的 比如:abc.p

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值