文档章节

android 上传/下载 图片

c
 chao.liu
发布于 2014/04/03 17:13
字数 421
阅读 3054
收藏 14

public class HttpAssist {

  
     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"; 
    
     //上传文件
     public static String uploadFile(File file) {
      
      
         String BOUNDARY = UUID.randomUUID().toString(); // 边界标识 随机生成 
         String PREFIX = "--", LINE_END = "\r\n"; 
         String CONTENT_TYPE = "multipart/form-data"; // 内容类型  
         //请求URL
         String RequestURL = "http://192.168.0.100:7080/YkyPhoneService/Uploadfile1";  
         //String RequestURL = "http://www.hong3.com/Fortest/getfiles";
         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); // 允许输出流 
             // Post 请求不能使用缓存
             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) { 
                 /**
                  * 当文件不为空,把文件包装并且上传
                  */ 
                 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 才可以得到对应的文件 ,也就是此处的uploadfile,
                  * filename是文件的名字,包含后缀名的 比如:abc.png
                  */ 
                
                 sb.append("Content-Disposition: form-data; name=\"uploadedfile\"; 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(); 
                 if (res == 200) { 
                     return SUCCESS; 
                 } 
             } 
         } catch (MalformedURLException e) { 
             e.printStackTrace(); 
         } catch (IOException e) { 
             e.printStackTrace(); 
         } 
         return FAILURE; 
     } 
  
     /**
      * 从服务器取图片
      * @param url
      * @return
      */
      public static Bitmap getHttpBitmap(String url) {
       
           URL myFileUrl = null;
           Bitmap bitmap = null;
         
           try {
                myFileUrl = new URL(url);
            //myFileUrl = new URL(s);
           } catch (MalformedURLException e) {
                e.printStackTrace();
           }
           try {
          
                HttpURLConnection conn = (HttpURLConnection) myFileUrl.openConnection();
                conn.setConnectTimeout(0);
                conn.setDoInput(true);
                conn.setDoOutput(true);
                conn.setUseCaches(false);
                conn.connect();
                System.setProperty("http.keepAlive", "false"); 
                InputStream is = conn.getInputStream();
                bitmap = BitmapFactory.decodeStream(is);
                is.close();
                return bitmap;
           } catch (IOException e) {
                e.printStackTrace();
                return null;
           }
          
      }

}

© 著作权归作者所有

c
粉丝 0
博文 3
码字总数 758
作品 0
西安
私信 提问
加载中

评论(1)

艾-莎
艾-莎
找了好久
迈绝伦团队工作汇总

项目负责人:余志恒 up_java后台:无 mz_java后台:修改同城下载文件名,完善论坛功能 bwk后台:无 项目负责人:季景胜 up_Android:无 upzg_Android:无 mzqk_Android:登陆界面重写,地图选...

风化的骆驼
2017/01/16
2
0
六款值得推荐的android(安卓)开源框架简介【转】

1、volley 项目地址 https://github.com/smanikandan14/Volley-demo (1) JSON,图像等的异步下载; (2) 网络请求的排序(scheduling) (3) 网络请求的优先级处理 (4) 缓存 (5) 多级别取消请求...

hkstar35
2014/07/11
290
0
六款值得推荐的android(安卓)开源框架简介【转】

1、volley 项目地址 https://github.com/smanikandan14/Volley-demo (1) JSON,图像等的异步下载; (2) 网络请求的排序(scheduling) (3) 网络请求的优先级处理 (4) 缓存 (5) 多级别取消请求...

火蚁
2014/07/09
668
1
Android--快速开发框架 afinal

版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/chaoyu168/article/details/51014398 Afinal简介 Afinal 是一个android的sqlite orm 和 ioc 框架。同时封装了andro...

sealin
2016/03/30
0
0
Flutter基础(二)Flutter开发环境搭建和Hello World

本文首发于公众号「刘望舒」 关联系列 ReactNative入门系列 React Native组件 Flutter基础系列 前言 其实没想写Flutter的相关文章的,因为这些看官方文档就够了,但是有不少同学就想看我写的...

刘望舒
08/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Android 图片加载带进度条的ImageView

https://blog.csdn.net/shu_quan/article/details/79975578

shzwork
16分钟前
6
0
关于XAMPP默认端口80 和443被占用的问题

本文转载于:专业的前端网站➩关于XAMPP默认端口80 和443被占用的问题 关于安装xampp-win32-1.8.1-VC9-installer.zip后启动时候报端口80和443被占用的问题解决 xampp-win32-1.8.1-VC9-instal...

前端老手
18分钟前
6
0
错误Setting the parent of a transform which resides in a Prefab Asset is...

错误日志 Setting the parent of a transform which resides in a Prefab Asset is disabled to prevent data corruption 原因1 用Resouce.Load加载一个prefab,没有实例化直接设置parent ......

XBlock
19分钟前
9
0
Spring boot 配置mybatis

当然任何模式都需要首先引入mybatis-spring-boot-starter的pom文件,现在最新版本是1.1.1(刚好快到双11了 :)) <dependency>    <groupId>org.mybatis.spring.boot</groupId>    <......

雷开你的门
19分钟前
9
0
云栖干货回顾 | 更强大的实时数仓构建能力!分析型数据库PostgreSQL 6.0新特性解读

阿里云 AnalyticDB for PostgreSQL 为采用MPP架构的分布式集群数据库,完备支持SQL 2003,部分兼容Oracle语法,支持PL/SQL存储过程,触发器,支持标准数据库事务ACID。AnalyticDB PG通过行存...

开源中国小二
31分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部