zoukankan      html  css  js  c++  java
  • Android学习笔记--客户端上传图片到PHP服务器(带PHP端代码)

    本人新手一枚,昨天下午五点多的时候公司让我做一个上传图片,表示一脸蒙蔽,但是还是要很淡定的说好,没问题,下班回家研究弄到了后半夜总算搞定了,今天上午来了把图片上传搞定又做了一些优化,比如质量压缩图片,和缩小尺寸 之后在上传到服务器,下面贴代码

    这里是裁剪图片保存到本地的,方法,scPath是你要上传图片的路径

     1     /**
     2      * 裁剪图片,保存到本地
     3      * @param srcPath
     4      */
     5     private  void compressPicture(String srcPath) {
     6         //上传到服务器的图片名字
     7         long times = System.currentTimeMillis();
     8         //设置图片保存的路径
     9         String dir = Environment.getExternalStorageDirectory().getAbsolutePath() + "/tencent/MicroMsg/WeiXin/"+times+".jpg";
    10         //File一年
    11         file=new File(dir);//将要保存图片的路径
    12         FileOutputStream fos = null;
    13         BitmapFactory.Options op = new BitmapFactory.Options();
    14 
    15         // 开始读入图片,此时把options.inJustDecodeBounds 设回true了
    16         op.inJustDecodeBounds = true;
    17         Bitmap bitmap = BitmapFactory.decodeFile(srcPath, op);
    18         op.inJustDecodeBounds = false;
    19 
    20         // 缩放图片的尺寸
    21         float w = op.outWidth;
    22         float h = op.outHeight;
    23         float hh = 500f;//
    24         float ww = 500f;//
    25         // 最长宽度或高度1024
    26         float be = 1.0f;
    27         if (w > h && w > ww) {
    28             be = (float) (w / ww);
    29         } else if (w < h && h > hh) {
    30             be = (float) (h / hh);
    31         }
    32         if (be <= 0) {
    33             be = 1.0f;
    34         }
    35         op.inSampleSize = (int) be;// 设置缩放比例,这个数字越大,图片大小越小.
    36         // 重新读入图片,注意此时已经把options.inJustDecodeBounds 设回false了
    37         bitmap = BitmapFactory.decodeFile(srcPath, op);
    38         int desWidth = (int) (w / be);
    39         int desHeight = (int) (h / be);
    40         bitmap = Bitmap.createScaledBitmap(bitmap, desWidth, desHeight, true);
    41         try {
    42             fos = new FileOutputStream(dir);
    43             if (bitmap != null) {
    44                 bitmap.compress(Bitmap.CompressFormat.JPEG, 30, fos);
    45             }
    46             //图片保存成功之后调用上传方法
    47             getSetImage();
    48         } catch (FileNotFoundException e) {
    49             e.printStackTrace();
    50         }
    51     }

    上传到服务器的方法 主要是就是调用了一个工具类中的方法,然后通过handler来通知是否成功

     1     /**
     2      * 上传图片到服务器
     3      */
     4     private     void getSetImage(){
     5         System.out.println("图片压缩成功");
     6         Message msg = Message.obtain();
     7         UploadUtil uu = new UploadUtil();
     8         Map<String, String> params = new HashMap<String, String>();
     9         params.put("app_uid", "100017");
    10         try {
    11             String result = uu.doPost(url, params, file);
    12             msg.what = 0;
    13             msg.obj = result;
    14             mHandler.sendMessage(msg);
    15         } catch (Exception e) {
    16             e.printStackTrace();
    17             msg.what = 1;
    18             msg.obj = "图片上传失败";
    19             mHandler.sendMessage(msg);
    20         }
    21     }
      String result = uu.doPost(url, params, file); 
     这句是核心代码 下载来看下


     1     /**
     2      * 
     3      * 
     4      * @param url
     5      * @param param
     6      * @param file
     7      * @return
     8      * @throws Exception
     9      */
    10     public String doPost(String url, Map<String, String> param, File file) throws Exception {
    11         HttpPost post = new HttpPost(url);
    12 
    13         HttpClient client = new DefaultHttpClient();
    14         MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
    15         if (param != null && !param.isEmpty()) {
    16             for (Map.Entry<String, String> entry : param.entrySet()) {
    17                 entity.addPart(entry.getKey(), new StringBody(entry.getValue()));
    18 
    19                 Log.e(TAG, "key :: " + entry.getKey() + " | value :: " + entry.getValue());
    20 
    21             }
    22         }
    23         // 上传图片到服务器
    24         if (file != null && file.exists()) {
    25             entity.addPart("uploadedfile", new FileBody(file));
    26         }
    27         post.setEntity(entity);
    28         HttpResponse response = client.execute(post);
    29         int stateCode = response.getStatusLine().getStatusCode();
    30         StringBuffer sb = new StringBuffer();
    31         if (stateCode == HttpStatus.SC_OK) {
    32             HttpEntity result = response.getEntity();
    33             if (result != null) {
    34                 InputStream is = result.getContent();
    35                 BufferedReader br = new BufferedReader(new InputStreamReader(is));
    36                 String tempLine;
    37                 while ((tempLine = br.readLine()) != null) {
    38                     sb.append(tempLine);
    39                 }
    40             }
    41         }
    42         post.abort();
    43         return sb.toString();
    44     }

    下面贴上全部代码

      1 package org.lumia.load;
      2 
      3 import java.io.BufferedOutputStream;
      4 import java.io.ByteArrayInputStream;
      5 import java.io.ByteArrayOutputStream;
      6 import java.io.File;
      7 import java.io.FileNotFoundException;
      8 import java.io.FileOutputStream;
      9 import java.io.IOException;
     10 import java.util.HashMap;
     11 import java.util.Map;
     12 import java.util.UUID;
     13 
     14 import android.annotation.SuppressLint;
     15 import android.app.Activity;
     16 import android.content.Context;
     17 import android.content.Intent;
     18 import android.database.Cursor;
     19 import android.graphics.Bitmap;
     20 import android.graphics.BitmapFactory;
     21 import android.graphics.Color;
     22 import android.graphics.Matrix;
     23 import android.graphics.drawable.BitmapDrawable;
     24 import android.graphics.drawable.Drawable;
     25 import android.media.ExifInterface;
     26 import android.net.Uri;
     27 import android.os.Bundle;
     28 import android.os.Environment;
     29 import android.os.Handler;
     30 import android.os.Message;
     31 import android.provider.MediaStore;
     32 import android.util.Log;
     33 import android.view.Gravity;
     34 import android.view.LayoutInflater;
     35 import android.view.View;
     36 import android.view.View.OnClickListener;
     37 import android.view.ViewGroup;
     38 import android.view.WindowManager;
     39 import android.widget.Button;
     40 import android.widget.ImageView;
     41 import android.widget.PopupWindow;
     42 import android.widget.RelativeLayout;
     43 import android.widget.ScrollView;
     44 import android.widget.TextView;
     45 import android.widget.Toast;
     46 
     47 @SuppressLint("HandlerLeak")
     48 public class PhotoActivity extends Activity {
     49 
     50     protected static final String TAG = "PhontoActivity";
     51     private ImageView imageView;
     52     private Button btn_take_photo;
     53     private Bitmap bitmaps;
     54     private File file;
     55     private RelativeLayout view;
     56     private static final String url = "http://www.aiboyy.pw/images/receive_file.php";
     57     private static final int PHOTO_REQUEST_CAREMA = 1;// 拍照
     58     private static final int PHOTO_REQUEST_GALLERY = 2;// 从相册中选择
     59     private static final int PHOTO_REQUEST_CUT = 3;// 结果
     60     private String saveDir = Environment.getExternalStorageDirectory().getPath() + "/Photos";
     61 
     62     private Handler mHandler = new Handler() {
     63         public void handleMessage(Message msg) {
     64             switch (msg.what) {
     65                 case 1:
     66                     view.removeAllViews();
     67                     TextView textView1 = new TextView(PhotoActivity.this);
     68                     textView1.setText((String) msg.obj);
     69                     ScrollView scrollView = new ScrollView(PhotoActivity.this);
     70                     scrollView.addView(textView1);
     71                     scrollView.setBackgroundColor(Color.BLACK);
     72                     view.addView(scrollView);
     73                     Toast.makeText(PhotoActivity.this, (String) msg.obj + "", Toast.LENGTH_LONG).show();
     74                     break;
     75                 case 0:
     76                     TextView textView2 = new TextView(PhotoActivity.this);
     77                     textView2.setText((String) msg.obj);
     78                     ScrollView scrollView2 = new ScrollView(PhotoActivity.this);
     79                     scrollView2.addView(textView2);
     80                     scrollView2.setBackgroundColor(Color.BLACK);
     81                     view.addView(scrollView2);
     82                     Toast.makeText(PhotoActivity.this, (String) msg.obj + "", Toast.LENGTH_LONG).show();
     83                     System.out.println("返回的图片地址是:");
     84                     break;
     85                 default:
     86                     break;
     87             }
     88         };
     89     };
     90     private PopupWindow mPopWindow;
     91 
     92     @Override
     93     protected void onCreate(Bundle savedInstanceState) {
     94         super.onCreate(savedInstanceState);
     95         setContentView(R.layout.photo_activity);
     96 
     97         imageView = (ImageView) findViewById(R.id.iv_image);
     98         btn_take_photo = (Button) findViewById(R.id.bt_camera);
     99         view = (RelativeLayout) findViewById(R.id.view);
    100 
    101         btn_take_photo.setOnClickListener(new OnClickListener() {
    102 
    103             @Override
    104             public void onClick(View v) {
    105                 showPopupWindow();
    106             }
    107         });
    108 
    109     }
    110 
    111     @Override
    112     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    113         super.onActivityResult(requestCode, resultCode, data);
    114         if (requestCode == PHOTO_REQUEST_GALLERY) {
    115 
    116             // 从相册返回的数据
    117             if (data != null) {
    118                 // 得到图片的全路径
    119                 final Uri uris = data.getData();
    120                 System.out.println("==========" + uris);
    121                 //crop(uri);
    122                 Cursor cursor = this.getContentResolver().query(uris, null,
    123                         null, null, null);
    124                 if (cursor.moveToFirst()) {
    125                     //得到图片路径
    126                     final String videoPath = cursor.getString(cursor
    127                             .getColumnIndex("_data"));// 获取绝对路径
    128 
    129                     new Thread(new Runnable() {
    130                         @Override
    131                         public void run() {
    132                             compressPicture(videoPath);
    133                         }
    134                     }).start();
    135                 }
    136             }
    137         }
    138     }
    139 
    140 
    141     @Override
    142     protected void onDestroy() {
    143         destoryImage();
    144         super.onDestroy();
    145     }
    146 
    147     private void destoryImage() {
    148         if (bitmaps != null) {
    149             bitmaps.recycle();
    150             bitmaps = null;
    151         }
    152     }
    153 
    154     /**
    155      * 谈起布局
    156      */
    157     private void showPopupWindow() {
    158         btn_take_photo.setVisibility(View.GONE);
    159         //设置contentView
    160         View contentView = LayoutInflater.from(PhotoActivity.this).inflate(R.layout.music_popwindow, null);
    161         mPopWindow = new PopupWindow(contentView,
    162                 ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, true);
    163         mPopWindow.setContentView(contentView);
    164         //设置各个控件的点击响应
    165         Button tv1 = (Button) contentView.findViewById(R.id.pop_computer);
    166         Button tv2 = (Button) contentView.findViewById(R.id.pop_financial);
    167         Button tv3 = (Button) contentView.findViewById(R.id.pop_manage);
    168         tv1.setOnClickListener(new OnClickListener() {
    169             @Override
    170             public void onClick(View view) {
    171                 btn_take_photo.setVisibility(View.VISIBLE);
    172                 //destoryImage();
    173                 // 激活系统图库,选择一张图片
    174                 Intent intent1 = new Intent(Intent.ACTION_PICK);
    175                 intent1.setType("image/*");
    176                 // 开启一个带有返回值的Activity,请求码为PHOTO_REQUEST_GALLERY
    177                 startActivityForResult(intent1, PHOTO_REQUEST_GALLERY);
    178                 mPopWindow.dismiss();
    179             }
    180         });
    181         //显示PopupWindow
    182         View rootview = LayoutInflater.from(PhotoActivity.this).inflate(R.layout.activity_main, null);
    183         mPopWindow.showAtLocation(rootview, Gravity.BOTTOM, 0, 0);
    184         //setBackgroundAlpha(0.5f);//设置屏幕透明度
    185         mPopWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {
    186             @Override
    187             public void onDismiss() {
    188                 // popupWindow隐藏时恢复屏幕正常透明度
    189                 setBackgroundAlpha(1.0f);
    190             }
    191         });
    192     }
    193 
    194     /**
    195      * 设置添加屏幕的背景透明度
    196      *
    197      * @param bgAlpha
    198      *            屏幕透明度0.0-1.0 1表示完全不透明
    199      */
    200     public void setBackgroundAlpha(float bgAlpha) {
    201         WindowManager.LayoutParams lp = ((Activity) PhotoActivity.this).getWindow()
    202                 .getAttributes();
    203         lp.alpha = bgAlpha;
    204         ((Activity) PhotoActivity.this).getWindow().setAttributes(lp);
    205     }
    206 
    207     /**
    208      * 裁剪图片,保存到本地
    209      * @param srcPath
    210      */
    211     private  void compressPicture(String srcPath) {
    212         //上传到服务器的图片名字
    213         long times = System.currentTimeMillis();
    214         //设置图片保存的路径
    215         String dir = Environment.getExternalStorageDirectory().getAbsolutePath() + "/tencent/MicroMsg/WeiXin/"+times+".jpg";
    216         //File一年
    217         file=new File(dir);//将要保存图片的路径
    218         FileOutputStream fos = null;
    219         BitmapFactory.Options op = new BitmapFactory.Options();
    220 
    221         // 开始读入图片,此时把options.inJustDecodeBounds 设回true了
    222         op.inJustDecodeBounds = true;
    223         Bitmap bitmap = BitmapFactory.decodeFile(srcPath, op);
    224         op.inJustDecodeBounds = false;
    225 
    226         // 缩放图片的尺寸
    227         float w = op.outWidth;
    228         float h = op.outHeight;
    229         float hh = 500f;//
    230         float ww = 500f;//
    231         // 最长宽度或高度1024
    232         float be = 1.0f;
    233         if (w > h && w > ww) {
    234             be = (float) (w / ww);
    235         } else if (w < h && h > hh) {
    236             be = (float) (h / hh);
    237         }
    238         if (be <= 0) {
    239             be = 1.0f;
    240         }
    241         op.inSampleSize = (int) be;// 设置缩放比例,这个数字越大,图片大小越小.
    242         // 重新读入图片,注意此时已经把options.inJustDecodeBounds 设回false了
    243         bitmap = BitmapFactory.decodeFile(srcPath, op);
    244         int desWidth = (int) (w / be);
    245         int desHeight = (int) (h / be);
    246         bitmap = Bitmap.createScaledBitmap(bitmap, desWidth, desHeight, true);
    247         try {
    248             fos = new FileOutputStream(dir);
    249             if (bitmap != null) {
    250                 bitmap.compress(Bitmap.CompressFormat.JPEG, 30, fos);
    251             }
    252             //图片保存成功之后调用上传方法
    253             getSetImage();
    254         } catch (FileNotFoundException e) {
    255             e.printStackTrace();
    256         }
    257     }
    258 
    259     /**
    260      * 上传图片到服务器
    261      */
    262     private     void getSetImage(){
    263         System.out.println("图片压缩成功");
    264         Message msg = Message.obtain();
    265         UploadUtil uu = new UploadUtil();
    266         Map<String, String> params = new HashMap<String, String>();
    267         params.put("app_uid", "100017");
    268         try {
    269             String result = uu.doPost(url, params, file);
    270             msg.what = 0;
    271             msg.obj = result;
    272             mHandler.sendMessage(msg);
    273         } catch (Exception e) {
    274             e.printStackTrace();
    275             msg.what = 1;
    276             msg.obj = "图片上传失败";
    277             mHandler.sendMessage(msg);
    278         }
    279     }
    280 
    281 
    282 }

     就先这些 上传图片就做完了,PHP代码

     1 <?php
     2 $target = "./upload/";//接受图片的目录
     3 $target_path = $target . basename( $_FILES['uploadedfile']['name']);
     4 //么有目录则创建一个
     5 if (!file_exists($target)){
     6     mkdir($target , 0777);
     7 }
     8 if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) {
     9     echo "上传成功";
    10 } else {
    11     echo "上传失败";
    12 }
    13 ?>

    把这个放到服务器上,上传的url就是你的服务器地址

    放一张图效果图


    上传完成 看看服务器那边

      


    打开地址试试

    OK已经上传成功了,下载附带一个apk地址,可以上传图片 成功返回图片地址 看看能否打开 如果能就是成功,不能就是失败

    下载地址为:www.aiboyy.pw/images/apk.apk 下载安装即可


    已经完成了 本人新手 说的不够详细,我的目的只是让一些不会用的人会用起来 用起来以后才能继续更深的研究,谢谢大家
  • 相关阅读:
    java 在线网络考试系统源码 springboot mybaits vue.js 前后分离跨域
    springboot 整合flowable 项目源码 mybiats vue.js 前后分离 跨域
    flowable Springboot vue.js 前后分离 跨域 有代码生成器 工作流
    Flowable 工作流 Springboot vue.js 前后分离 跨域 有代码生成器
    java 企业 网站源码 后台 springmvc SSM 前台 静态化 代码生成器
    java 进销存 商户管理 系统 管理 库存管理 销售报表springmvc SSM项目
    基于FPGA的电子计算器设计(中)
    基于FPGA的电子计算器设计(上)
    FPGA零基础学习:SPI 协议驱动设计
    Signal tap 逻辑分析仪使用教程
  • 原文地址:https://www.cnblogs.com/langfei8818/p/7122070.html
Copyright © 2011-2022 走看看