使用form-data表单上传图片
2016-06-23 14:32
459 查看
这是参考的大神的文章,链接忘了,这是很早的参考文章写出来的。只需改动几个地方,就OK
public class FileImageUpload {
private static final String TAG = “uploadFile”;
private static final int TIME_OUT = 10*10000000; //超时时间
private static final String CHARSET = “utf-8”; //设置编码
public static final String SUCCESS=”1”;
public static final String FAILURE=”0”;
/* android上传文件到服务器
* @param file 需要上传的文件
* @param RequestURL 请求的rul
* @return 返回响应的内容
*/
public static String uploadFile(File file,String RequestURL,Context mcontext) {
String BOUNDARY = UUID.randomUUID().toString(); //边界标识 随机生成
String PREFIX = “–” , LINE_END = “\r\n”;
String CONTENT_TYPE = “multipart/form-data”; //内容类型
try {
}
public class FileImageUpload {
private static final String TAG = “uploadFile”;
private static final int TIME_OUT = 10*10000000; //超时时间
private static final String CHARSET = “utf-8”; //设置编码
public static final String SUCCESS=”1”;
public static final String FAILURE=”0”;
/* android上传文件到服务器
* @param file 需要上传的文件
* @param RequestURL 请求的rul
* @return 返回响应的内容
*/
public static String uploadFile(File file,String RequestURL,Context mcontext) {
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.setRequestP //设置编码 conn.setRequestProperty("connection", "keep-alive"); conn.setRequestProperty("Content-Type", CONTENT_TYPE + ";boundary=" + BOUNDARY); if(file!=null) { /** * 当文件不为空,把文件包装并且上传 */ OutputStream outputSteam=conn.getOutputStream(); DataOutputStream dos = new DataOutputStream(outputSteam); StringBuffer sb = new StringBuffer(); sb.append(PREFIX); sb.append(BOUNDARY); sb.append(LINE_END); /** * 这里重点注意: * name里面的值为服务器端需要key 只有这个key 才可以得到对应的文件 * filename是文件的名字,包含后缀名的 比如:abc.png * name对应的属性是 图片的格式 自己是什么就填什么 如: pic jseg * Content-Type 值 需要上网查查,对应相应的值 */ sb.append("Content-Disposition: form-data; name=\"pic\"; filename=\""+file.getName()+"\""+LINE_END); sb.append("Content-Type: image/png; 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(); String s=conn.getContent().toString(); if(res==200) { BufferedReader input = new BufferedReader(new InputStreamReader(conn.getInputStream())); StringBuilder response = new StringBuilder(); String oneLine; while((oneLine = input.readLine()) != null) { response.append(oneLine + LINE_END); } return response.toString(); } } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return FAILURE; }
}
相关文章推荐
- php匿名函数,参数及怎么掉的问题,终极大揭秘
- 博客序言
- 74. Search a 2D Matrix && 240. Search a 2D Matrix II
- 错误
- edgesForExtendedLayout属性
- 网络请求框架
- Leetcode 131 Palindrome Partitioning
- Android安全开发之ZIP文件目录遍历
- Intent Flag实际项目 -- 超时跳转登录界面并清理前面所有activity
- [LeetCode]problem 148. Sort List
- Java开发工具集---Guava
- JVM内部结构
- 欧拉路径 LeetCode 332
- 整数划分
- Material Design Library系列之CoordinatorLayout
- string 的简单实现
- Android中线程那些事儿
- 【css 效果】边沿打孔的优惠券
- Flink 另外一个分布式流式和批量数据处理的开源平台
- mac tool