Android进阶篇-上传/下载图片

/**
     * 上传图片到服务器
     * @param uploadFile 要上传的文件目录
     * @param actionUrl 上传的地址
     * @return String
     */
    public static HashMap<String, Object> uploadFile(String actionUrl,Drawable drawable){
      Log.info(TAG, "urlPath= " + actionUrl);

      String end ="\r\n";
      String twoHyphens ="--";
      String boundary ="*****";

      HttpURLConnection con = null;
      DataOutputStream ds = null;
      InputStream is = null;
      StringBuffer sb = null;
      HashMap<String, Object> map = null;

      try{
        URL url =new URL(actionUrl);
        con=(HttpURLConnection)url.openConnection();
        /* 允许Input、Output,不使用Cache */
        con.setDoInput(true);
        con.setDoOutput(true);
        con.setUseCaches(false);

        /* 设置传送的method=POST */
        con.setRequestMethod("POST");
        /* setRequestProperty */
        con.setRequestProperty("Connection", "Keep-Alive");
        con.setRequestProperty("Charset", "UTF-8");
        con.setRequestProperty("Content-Type","multipart/form-data;boundary="+boundary);
        /* 设置DataOutputStream */
        ds = new DataOutputStream(con.getOutputStream());
        ds.writeBytes(twoHyphens + boundary + end);
        ds.writeBytes("Content-Disposition: form-data; "+ "name=\"file1\";filename=\""+ MyAppActivity.FILENAME +"\""+ end);
        ds.writeBytes(end);  

        if(drawable != null){
            Bitmap bitmap = drawableToBitmap(drawable);
            byte[] buffer = Bitmap2Bytes(bitmap);
            ds.write(buffer);
        }

        ds.writeBytes(end);
        ds.writeBytes(twoHyphens + boundary + twoHyphens + end);
        /* close streams */
        ds.flush();
        /* 取得Response内容 */

        Log.info(TAG, "code= " + con.getResponseCode());
        if(con.getResponseCode() == 200){
            is = con.getInputStream();

            int ch;
            sb =new StringBuffer();
            while( ( ch = is.read() ) !=-1 ){
              sb.append( (char)ch );
            }
            ds.close();

            Log.info(TAG, "sb= " + sb.toString());
            if(!sb.toString().equals("") || sb.toString() != null){
                 map = new HashMap<String, Object>();
                 map = JsonUtil.parseJSON(sb.toString());
            }
        }

      }catch (MalformedURLException e) {
            Log.info("json","url error");
            e.printStackTrace();
        } catch(FileNotFoundException e){
            Log.info("json","file not found");
        }catch (IOException e) {
            Log.info("json","io error");
            e.printStackTrace();
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            try{
                if(ds != null){
                    ds.close();
                }
                if(is != null){
                    is.close();
                }
            }catch(IOException e){
                e.printStackTrace();
            }
        }
        return map;
    }

    /**
     * drawable转换为bitamp
     */
    private static Bitmap drawableToBitmap(Drawable drawable) {
        // 取 drawable 的长宽
        int w = drawable.getIntrinsicWidth();
        int h = drawable.getIntrinsicHeight();

        // 取 drawable 的颜色格式
        Bitmap.Config config = drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888: Bitmap.Config.RGB_565;
        // 建立对应 bitmap
        Bitmap bitmap = Bitmap.createBitmap(w, h, config);
        // 建立对应 bitmap 的画布
        Canvas canvas = new Canvas(bitmap);
        drawable.setBounds(0, 0, w, h);
        // 把 drawable 内容画到画布中
        drawable.draw(canvas);
        return bitmap;
    }

    private static byte[] Bitmap2Bytes(Bitmap bm) {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        bm.compress(Bitmap.CompressFormat.PNG, 100, baos);
        return baos.toByteArray();
    }

    public static void downLoadImage(String urlPath){
        String fileName = urlPath.substring(urlPath.lastIndexOf('/')+1,urlPath.length());//提取下载图片的文件名
        Bitmap bitmap=GetNetBitmap(urlPath);//得到bitmap
        File file = new File(MyAppActivity.DIRPATH);
        if(!file.exists()){
            file.mkdir();
        }    

        File file2 = new File(MyAppActivity.DIRPATH,fileName);
        if(!file2.exists()){
            //将网络上读取的图片保存到SDCard中
            try {
                FileOutputStream out=new FileOutputStream(new File(MyAppActivity.DIRPATH, fileName));//为图片文件实例化输出流
                if(bitmap.compress(Bitmap.CompressFormat.PNG, 100, out)){//对图片保存
                    out.flush();
                    Log.info("json","Success");
                    out.close();
                }
            }catch (FileNotFoundException e) {
                // TODO: handle exception
                Log.info("json","文件没发现!!");
                e.printStackTrace();
            }catch (IOException e){
                e.printStackTrace();
                Log.info("json","数据流错误!!");
            }
        }
    }

    /**
     * 取得网络上的图片
     * @param url 图片的URL
     */
    @SuppressWarnings("unused")
    private static Bitmap GetNetBitmap(String url){
        URL imageUrl = null;
        Bitmap bitmap=null;
        try {
            imageUrl = new URL(url);
        }
        catch (MalformedURLException e) {
            e.printStackTrace();
        }

        if (imageUrl != null) {
            try {
                HttpURLConnection conn = (HttpURLConnection)imageUrl.openConnection();
                conn.setDoInput(true);// 设置请求的方式
                conn.connect();

                InputStream is = conn.getInputStream();// 将得到的数据转化为inputStream
                bitmap = BitmapFactory.decodeStream(is);// 将inputstream转化为Bitmap
                is.close();// 关闭数据
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        else{
            Log.info("json", "json is null!!!");
        }
        return bitmap;
    }

    /**
     * 上传图片
     * @param uploadFile 要上传的文件目录
     * @param actionUrl 上传的地址
     * @return String
     */
    public static String uploadFile(String uploadFile,String actionUrl){
      String end ="\r\n";
      String twoHyphens ="--";
      String boundary ="*****";

      HttpURLConnection con = null;
      DataOutputStream ds = null;
      FileInputStream fStream = null;
      InputStream is = null;
      StringBuffer sb = null;

      try{
        URL url =new URL(actionUrl);
        con=(HttpURLConnection)url.openConnection();
        /* 允许Input、Output,不使用Cache */
        con.setDoInput(true);
        con.setDoOutput(true);
        con.setUseCaches(false);

        /* 设置传送的method=POST */
        con.setRequestMethod("POST");
        /* setRequestProperty */
        con.setRequestProperty("Connection", "Keep-Alive");
        con.setRequestProperty("Charset", "UTF-8");
        con.setRequestProperty("Content-Type","multipart/form-data;boundary="+boundary);
        /* 设置DataOutputStream */
        ds = new DataOutputStream(con.getOutputStream());
        ds.writeBytes(twoHyphens + boundary + end);
        ds.writeBytes("Content-Disposition: form-data; "+ "name=\"file1\";filename=\""+ MyAppActivity.FILENAME +"\""+ end);
        ds.writeBytes(end);
        /* 取得文件的FileInputStream */
        if(uploadFile != null){
            fStream =new FileInputStream(uploadFile);
            /* 设置每次写入1024bytes */
            int bufferSize =1024;
            byte[] buffer =new byte[bufferSize];
            int length =-1;
            /* 从文件读取数据至缓冲区 */
            while((length = fStream.read(buffer)) !=-1){
              /* 将资料写入DataOutputStream中 */
              ds.write(buffer, 0, length);
            }
        }

        ds.writeBytes(end);
        ds.writeBytes(twoHyphens + boundary + twoHyphens + end);
        /* close streams */
        ds.flush();
        /* 取得Response内容 */
        is = con.getInputStream();
        int ch;
        sb =new StringBuffer();
        while( ( ch = is.read() ) !=-1 ){
          sb.append( (char)ch );
        }
        ds.close();
      }catch (MalformedURLException e) {
            Log.info("json","url error");
            e.printStackTrace();
        } catch(FileNotFoundException e){
            Log.info("json","file not found");
        }catch (IOException e) {
            Log.info("json","io error");
            e.printStackTrace();
        }finally{
            try{
                if(ds != null){
                    ds.close();
                }
                if(is != null){
                    is.close();
                }
                if(fStream != null){
                    fStream.close();
                }
            }catch(IOException e){
                e.printStackTrace();
            }
        }
        return sb.toString();
    }
时间: 2024-09-20 09:10:08

Android进阶篇-上传/下载图片的相关文章

微信开发之调起摄像头、本地展示图片、上传下载图片实例_javascript技巧

之前那篇微信JS-SDK授权的文章实现了分享接口,那么这里总结一下如何在微信里面通过js调起原生摄像头,以及上传下载图片. 1.配置 页面引入通过jssdk授权后,传入wx对象,首先配置需要的接口 wx.config({ /* debug: true, */ appId: appid, timestamp: timestamp, nonceStr: nonceStr, signature: signature, jsApiList: [ 'chooseImage',//拍照或从手机相册中选图接口

Android中使用七牛云存储进行图片上传下载的实例代码

Android开发中的图片存储本来就是比较耗时耗地的事情,而使用第三方的七牛云,便可以很好的解决这些后顾之忧,最近我也是在学习七牛的SDK,将使用过程在这记录下来,方便以后使用. 先说一下七牛云的存储原理,上面这幅图片是官方给出的原理图,表述当然比较清晰了. 可以看出,要进行图片上传的话可以分为五大步: 1. 客户端用户登录到APP的账号系统里面: 2. 客户端上传文件之前,需要向业务服务器申请七牛的上传凭证,这个凭证由业务服务器使用七牛提供的服务端SDK生成: 3. 客户端使用七牛提供的客户端

淘宝上价值380元的网站源代码打包 上传下载篇

问题描述 淘宝上价值380元的网站源代码打包上传下载篇这里汇集了29套上传下载源代码[上传下载]56WA手机电影下载系统源码_xtdy.rar[上传下载]AjaxUpLoadFile多个大文件上传控件v1.15_ltajaxupfilecontrol.rar[上传下载]Asp.net+Flex实现网络硬盘_flex_up.rar[上传下载]ASP.NET同时上传多个文件_aspxcnup.rar[上传下载]ASPX多文件上传示例源码_51aspxuploads.rar[上传下载]Flash效果文

手机社交应用的图片上传下载功能分别使用ftp和http的优缺点是什么?

问题描述 手机社交应用的图片上传下载功能分别使用ftp和http的优缺点是什么? 手机上流行的社交应用,可以查看好友的拍照相册,也可以自己拍照上传和好友分享等,分别使用ftp和http技术实现上传下载的优缺点是什么?

ASP.NET2.0中全面实现文件图片上传下载处理

asp.net|上传|下载 1.最简单的单文件上传(没花头)2.多文件上传3.客户端检查上传文件类型(以上传图片为例)4.服务器端检查上传文件类型(以上传图片为例) 5.服务器端检查上传文件类型(可以检测真正文件名) 6.上传文件文件名唯一性处理(时间戳+SessionID)7.上传图片生成等比例缩略图8.上传图片加水印(文字水印,图片水印,文字+图片水印)9. 1.最简单的单文件上传(没花头) 效果图:说明:这是最基本的文件上传,在asp.net1.x中没有这个FileUpload控件,只有h

android的sqlite 上传数据库到ftp,再下载下来后,为什么打不开?

问题描述 android的sqlite 上传数据库到ftp,再下载下来后,为什么打不开? android的sqlite数据库,存在data/data/packagename/databases/下, 用org.apache.commons.net.ftp.FTPClient 上传数据库到ftp,再下载下来后,为什么提示损坏,打不开? 我测试过,ftp上的文件是正确的,下载也成功了,文件有更新,文件的大小和ftp上的也是一样的.但是为什么打不开呢?用sqlexpert打开sqlite,提示data

java实现文件上传下载和图片压缩代码示例_java

分享一个在项目中用的到文件上传下载和对图片的压缩,直接从项目中扒出来的:) 复制代码 代码如下: package com.eabax.plugin.yundada.utils; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.

使用Android的OkHttp包实现基于HTTP协议的文件上传下载_Android

OkHttp的HTTP连接基础虽然在使用 OkHttp 发送 HTTP 请求时只需要提供 URL 即可,OkHttp 在实现中需要综合考虑 3 种不同的要素来确定与 HTTP 服务器之间实际建立的 HTTP 连接.这样做的目的是为了达到最佳的性能. 首先第一个考虑的要素是 URL 本身.URL 给出了要访问的资源的路径.比如 URL http://www.baidu.com 所对应的是百度首页的 HTTP 文档.在 URL 中比较重要的部分是访问时使用的模式,即 HTTP 还是 HTTPS.这会

android使用webview上传文件(相册和拍照)怎么重新选择图片

问题描述 android使用webview上传文件(相册和拍照)怎么重新选择图片 android使用webview上传文件(相册和拍照),第一次选择图片的时候没问题,但第二次选择图片时不能覆盖第一次选择的图片,还是只能上传第一次选择的图片. 解决方案 http://blog.csdn.net/woshinia/article/details/19030437 解决方案二: 在选完照片后把存图片的把集合清空,然后第二次进来的时候重新赋值了 解决方案三: Android使用WebView从相册/拍照