先说本文主要的重点:

七牛云上传图片(包括从相机获取的和从相册获取的)    七牛云上传视频       8.0手机调起相机        都会进行描述    多图片和多视频上传    获取图片后缀   隐藏软键盘

1、导入七牛云的依赖

 //七牛云api 'com.qiniu:qiniu-android-sdk:7.3.+'api 'pub.devrel:easypermissions:0.4.3'api 'com.qiniu:happy-dns:0.2.13'api 'com.loopj.android:android-async-http:1.4.9'

2、添加七牛云的工具类

https://download.csdn.net/download/jing_80/10832747     可以下载,我已上传

3、因为出于保护数据   所以中间的字符用xxxxx代替,这两个变量在七牛云上可以获取到,这个很重要,这个是获取七牛云Token需要用到的,不过我们这里的token是我们的后台返给我的,所以各位小伙伴看情况而定

    public static final String AccessKey = "-lOgC9xxxxxxxxxxxxiHIBDSrIZ";public static final String SecretKey = "PYCGWxxxxxxxxxxxxxxxKw0F0v0B0Sty4m";

4、前面的准备工作做完之后,来吧,接下来我们要写真正的上传代码了,一步一步来

如果你是准备好了相机相册各种权限的 就不说了   直接看(2)

如果你是什么也没写,那就先添加上调用相机所用的权限吧! 先看(1)

(1)在res下创建xml文件

xml文件中的内容:

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android"><root-path path="" name="camera_photos" />
</paths>

再在AndroidManifest中添加代码和权限    权限可能不够    需要什么再添加

    <uses-permission android:name="android.permission.INTERNET" /><uses-feature android:name="android.hardware.camera" /><!-- 相机权限 --><uses-permission android:name="android.permission.CAMERA" /><!-- 写入SD卡的权限:如果你希望保存相机拍照后的照片 --><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><!-- 读取SD卡的权限:打开相册选取图片所必须的权限 --><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

在AndroidManifest中添加  这个provider和activity同级的

       <!-- 8.0相机 --><providerandroid:name="android.support.v4.content.FileProvider"android:authorities="${applicationId}.provider"android:exported="false"android:grantUriPermissions="true"><meta-dataandroid:name="android.support.FILE_PROVIDER_PATHS"android:resource="@xml/file_path" /></provider>

(2)七牛云上传代码

public class UploadDynamicActivity implements View.OnClickListener {private static final int REQUEST_CODE_VIDEO = 0x00000012;private static final int REQUEST_CODE_CAMERA = 0x00000011;private static final int REQUEST_CODE_ALBUM = 0x00000010;private String upPath,videoThumb;private String headpicPath;private Uri uri;private File file;@SuppressLint("HandlerLeak")private Handler handler = new Handler() {@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);if (msg.what == 12) {String headpicPaths = (String) msg.obj;if (headpicPaths != null) {//                    headpicPaths是七牛云返回的地址    这里写自己的处理}}}};@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);switch (requestCode) {case REQUEST_CODE_CAMERA:if (resultCode == RESULT_OK) {upPath = file.getAbsolutePath();break;}case REQUEST_CODE_ALBUM:if (resultCode == RESULT_OK) {Uri uriAlbum = data.getData();upPath = fromImageUriGetPath(uriAlbum);break;}case REQUEST_CODE_VIDEO:if (resultCode == RESULT_OK) {//从相册选取视频Uri selectedVideo = data.getData();upPath = fromVideoUriGetPath(selectedVideo);break;}break;}}//    利用获取到的图片Uri  在获取到图片对应的pathprivate String fromImageUriGetPath(Uri uri) {String[] filePathColumn = {MediaStore.Images.Media.DATA};Cursor cursor = getContentResolver().query(uri,filePathColumn, null, null, null);cursor.moveToFirst();int columnIndex = cursor.getColumnIndex(filePathColumn[0]);//picturePath就是图片在储存卡所在的位置String picturePath = cursor.getString(columnIndex);cursor.close();return picturePath;}//    利用获取到的视频Uri  在获取到视频对应的pathprivate String fromVideoUriGetPath(Uri uri) {String[] filePathColumn = {MediaStore.Images.Media.DATA};Cursor cursor = getContentResolver().query(uri,new String[]{MediaStore.Video.Media.DATA}, null, null, null);cursor.moveToFirst();int columnIndex = cursor.getColumnIndex(filePathColumn[0]);//picturePath就是图片在储存卡所在的位置String picturePaths = cursor.getString(columnIndex);//这个videoThumb是获取该视频缩略图的地址    至于怎么获取的缩略图   我的博客里有    获取网络的  获取本地的 只需要视频地址就可以Bitmap netVideoBitmap = VideoFrameUtils.getLocalVideoBitmap(picturePaths);videoThumb = VideoFrameUtils.saveBitmap(UploadDynamicActivity.this, netVideoBitmap);cursor.close();return picturePaths;}//上传图片或视频到七牛云的方法private void uploadInfoToQiNiu(final String path) {new Thread(new Runnable() {@Overridepublic void run() {String picSuffix = getPicSuffix(path);String randomNumCode = getRandomNumCode();// 设置图片名字SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");String key = "icon_" + sdf.format(new Date()) + randomNumCode + "." + picSuffix;UploadManager uploadManager = new UploadManager();//这个getQNToken需要从后台获取 或者是自己从七牛云上找方法获取uploadManager.put(path, key, getQNToken, new UpCompletionHandler() {@Overridepublic void complete(String key, ResponseInfo info, JSONObject res) {if (info.isOK()) {//这个是你将图片上传之后七牛云给你返回的地址    这个需要传给你们的后台headpicPath = "http://qiniu.bjmocang.com/" + key;Message message = handler.obtainMessage(12, headpicPath);handler.sendMessage(message);} else {Log.e("tagxx", info.error);}}}, null);}}).start();}//调取相机private void fromCamera() {file = new File(Environment.getExternalStorageDirectory(), SystemClock.uptimeMillis() + ".jpg");if (Build.VERSION.SDK_INT >= 24) {uri = FileProvider.getUriForFile(this, BuildConfig.APPLICATION_ID + ".provider", file);} else {uri = Uri.fromFile(file);}Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);startActivityForResult(intent, REQUEST_CODE_CAMERA);}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.相机:fromCamera();break;case R.id.相册:Intent intentAlbum = new Intent(Intent.ACTION_PICK);intentAlbum.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");startActivityForResult(intentAlbum, REQUEST_CODE_ALBUM);break;case R.id.视频:Intent intentVideo = new Intent(Intent.ACTION_PICK);intentVideo.setDataAndType(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, "video/*");startActivityForResult(intentVideo, REQUEST_CODE_VIDEO);break;}}@AfterPermissionGranted(1)//添加注解,是为了首次执行权限申请后,回调该方法private void methodRequiresTwoPermission() {String[] perms = {Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE};if (EasyPermissions.hasPermissions(this, perms)) {//已经申请过权限,直接调用相机// openCamera();} else {EasyPermissions.requestPermissions(this, "需要获取权限", 1, perms);}}//生成四位随机数public static String getRandomNumCode() {String codeNum = "";int[] numbers = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};Random random = new Random();for (int i = 0; i < 4; i++) {int next = random.nextInt(10000);codeNum += numbers[next % 10];}return codeNum;}/*** 获取图片后缀** @param img_path 图片或者视频路径* @return*/public static String getPicSuffix(String img_path) {if (img_path == null || img_path.indexOf(".") == -1) {return ""; //如果图片地址为null或者地址中没有"."就返回""}return img_path.substring(img_path.lastIndexOf(".") + 1).trim().toLowerCase();}//设置点击任意空白处隐藏键盘@Overridepublic boolean dispatchTouchEvent(MotionEvent ev) {if (ev.getAction() == MotionEvent.ACTION_DOWN) {// 获得当前得到焦点的View,一般情况下就是EditText(特殊情况就是轨迹求或者实体案件会移动焦点)View v = getCurrentFocus();if (HideInputUtil.isShouldHideInput(v, ev)) {hideSoftInput(v.getWindowToken());}}return super.dispatchTouchEvent(ev);}/*** 隐藏软键盘 ** @param token*/private void hideSoftInput(IBinder token) {if (token != null) {InputMethodManager im = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);im.hideSoftInputFromWindow(token, InputMethodManager.HIDE_NOT_ALWAYS);}}}

5、补充一下,看很多小伙伴都说找不到这个工具类,在这里添加上。

public class VideoFrameUtils {public VideoFrameUtils() {}public static Bitmap getNetVideoBitmap(String videoUrl) {Bitmap bitmap = null;MediaMetadataRetriever retriever = new MediaMetadataRetriever();try {retriever.setDataSource(videoUrl, new HashMap());bitmap = retriever.getFrameAtTime(-1L);} catch (IllegalArgumentException var7) {var7.printStackTrace();} finally {retriever.release();}return bitmap;}public static Bitmap getLocalVideoBitmap(String localPath) {MediaMetadataRetriever media = new MediaMetadataRetriever();media.setDataSource(localPath);Bitmap bitmap = media.getFrameAtTime(1L, 2);return bitmap;}public static Bitmap compressImage(Bitmap image) {ByteArrayOutputStream baos = new ByteArrayOutputStream();image.compress(CompressFormat.JPEG, 100, baos);int options = 90;while(baos.toByteArray().length / 1024 > 800) {baos.reset();image.compress(CompressFormat.JPEG, options, baos);if (options > 10) {options -= 10;}}ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());Bitmap bitmap = BitmapFactory.decodeStream(isBm, (Rect)null, (Options)null);return bitmap;}public static String saveBitmap(Context context, Bitmap mBitmap) {String savePath = context.getApplicationContext().getFilesDir().getAbsolutePath();File filePic;try {filePic = new File(savePath + "/image/map.jpg");if (!filePic.exists()) {filePic.getParentFile().mkdirs();filePic.createNewFile();}FileOutputStream fos = new FileOutputStream(filePic);mBitmap.compress(CompressFormat.JPEG, 100, fos);fos.flush();fos.close();} catch (IOException var5) {var5.printStackTrace();return null;}return filePic.getAbsolutePath();}
}

6、好了,到这里就结束了。希望能帮助到各位博友

七牛云上传图片和视频相关推荐

  1. 根据后台返回地址实现图片展示_微信小程序 - 前端接入七牛云上传图片和视频...

    相信小程序开发者在开发过程中都会遇到上传代码包遇到大小限制这个问题,因为微信现在规定代码不能超过 2 MB 大小,但我们实际开发过程中难免会有业务需求要使用一些图片和视频等媒体文件,这样的话会导致上传 ...

  2. uniapp七牛云上传图片or视频

    // 上传视频 videoUpload() {var _this = this;var timestamp = Date.parse(new Date());var date = new Date(t ...

  3. 后台:七牛云上传图片,视频,文件

    vue方式 上传图片(通过base64进行上传图片) <div id="myDiv"></div><script>let base64 = 'i ...

  4. 使用七牛云上传图片时出现Network error during preQuery和运行时出现okhttp的问题

    问题描述 1.使用七牛云上传图片时出现Network error during preQuery,但网络正常 原因分析:排除网络原因,尝试网络配置方向调整 Configuration configur ...

  5. 七牛云 上传图片到七牛云并返回图片URL

    七牛云 上传图片到七牛云并返回图片URL 鸣谢'追逐盛夏流年':https://blog.csdn.net/j1231230/article/details/80061834 在开发项目的时候,经常会 ...

  6. Java实现七牛云上传图片、读取图片链接

    Java后端实现七牛云上传图片.读取图片链接 添加依赖 <!--七牛云sdk--><dependency><groupId>com.qiniu</groupI ...

  7. 七牛云上传图片报错处理

    {ResponseInfo:com.qiniu.http.Response@62bd765,status:400, reqId:d4kAAACMt2hWMSEW, xlog:X-Log, xvia:, ...

  8. python对接七牛云上传图片代码,可运行

    python对接七牛云上传图片,可运行 一.准备工作 注册七牛云获取: 1.Access Key(注册认证后自动生成) 2.Secret Key(注册认证后自动生成) 3.空间名称:ihome(创建空 ...

  9. 小程序调用阿里云身份证识别OCR(附带七牛云上传图片)

    写在前面: 实现的逻辑是拍照上传调用后端封装好的身份证接口,然后同时调用七牛云接口把照片传过去以便后台管理系统审核看 1:首选需要这么一张页面 接下来就写我是怎么做的 首先是布局(以下是wxml) & ...

最新文章

  1. ios xib 四等分_ios Xib的几种用法[转]
  2. suse linux ssh connerc failed
  3. 02.Python网络爬虫第二弹《http和https协议》
  4. python爬虫成果_Python爬虫(小练习)
  5. 了解Master Pages库
  6. 自然语言处理在医学领域的应用
  7. secureCRT按回车键全屏的解决方法
  8. LeetCode 1441. 用栈操作构建数组
  9. java中为按钮添加图片_如何在Java中为字符串添加双引号?
  10. java求sum的前n项和_【LeetCode-面试算法经典-Java实现】【015-3 Sum(三个数的和)】...
  11. 周立功-成功心法(1):低年级大学生如何查资料写论文
  12. STM8单片机串口同时识别自定义协议和Modbus协议
  13. XSS-Game Level 4
  14. Java实验8 T6.绘制一个二叉树
  15. Java 基础 之 变量
  16. GSM 网络系统介绍
  17. rest api如何创建_我的宝宝走了一步,创建了一个REST API并进行了码头化
  18. 【C语言】实现简单的五子棋
  19. web前端移动端课程之canvas教程系列
  20. win7系统ftp服务器密码修改,win7 ftp服务器密码

热门文章

  1. CnOpenData中国各省份专利申请统计
  2. 计算机故障维修智能检测平台管理系统,计算机检测维修与数据恢复技能大赛竞赛设备采购项目.doc...
  3. 计算机协会见面会游戏,计算机协会新会员见面大会会长演讲稿
  4. Windows 安装 Windows 版 iCloud 之后我的电脑里多了个 iCloud 照片图标
  5. 盒子模型有时候会出现设置背景、边框无法撑大和设置内外间距异常,一般来说此类问题的原因是什么?
  6. [global::]是什么形式?什么意思?
  7. win7笔记本外接显示器html,笔记本接显示屏如何设置_笔记本外接显示屏的图文教程-win7之家...
  8. Zynq-Linux移植学习-通过IIC访问RXS2448交换芯片
  9. 比ownCloud/Nextcloud更好用的免费私有企业网盘
  10. 2019届计算机专业-上海国企单位(银行、证券、通信)秋招经验大杂烩