H5调取摄像头摄像上传的两种方式

转自大神文章,链接:https://blog.csdn.net/przlovecsdn/article/details/82256413

<!DOCTYPE html>
<html>
 
<head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>H5 Upload</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        
        .upload {
            position: relative;
            margin: 0 auto;
            width: 100%;
        }
        
        .upload button {
            display: block;
            width: 100%;
            height: 50px;
            background-color: orange;
            border: none;
        }
        
        .upload input {
            position: absolute;
            left: 0;
            top: 0;
            display: block;
            width: 100%;
            height: 50px;
            opacity: 0;
        }
        
        .upload img {
            margin: 0 auto;
            display: block;
            width: 100%;
        }
    </style>
</head>
 
<body>
    <div class="upload">
        <button>上传文件(base64)</button>
        <input type="file" accept="video/*" capture="camcorder" id="upload">
    </div>
    <div class="upload">
        <button>上传文件(二进制)</button>
        <input type="file" accept="video/*" capture="camcorder" id="upload1">
    </div>
    <script>
        var upload = {
            init: function() {
                this.event();
            },
            event: function() {
                var _this = this;
                // 方式一:采用FileReader方式
                document.getElementById('upload').addEventListener('change', function(event) {
                        var that = this;
                        var file = event.target.files[0];
                        var reader = new FileReader();
                        reader.onload = function(e) { //文件读取成功完成时触发
                            var video = document.createElement('video');
                            video.setAttribute('controls', true)
                            video.src = this.result; //this.result为base64文件路径
                            _this.insertAfter(video, that);
                        }
                        reader.readAsDataURL(this.files[0]); // 读出 base64
                    })
                    // 方式二:采用二进制形式
                document.getElementById('upload1').addEventListener('change', function(e) {
                    var that = this;
                    var file = e.target.files[0];
                    var blob = new Blob([file]), // 文件转化成二进制文件
                        url = URL.createObjectURL(blob); //转化成url
                    var video = document.createElement('video');
                    video.setAttribute('controls', true);
                    video.setAttribute('src', url);
                    _this.insertAfter(video, that);
                    video.onload = function(e) {
                        URL.revokeObjectURL(this.src); // 释放createObjectURL创建的对象
                    }
                })
            },
            insertAfter: function(newElement, targetElement) {
                var parent = targetElement.parentNode;
                if (parent.lastChild == targetElement) {
                    // 如果最后的节点是目标元素,则直接添加。因为默认是最后
                    parent.appendChild(newElement);
                } else {
                    parent.insertBefore(newElement, targetElement.nextSibling);
                    //如果不是,则插入在目标元素的下一个兄弟节点 的前面。也就是目标元素的后面
                }
            }
        }
 
        upload.init();
    </script>
</body>
 
</html>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
package com.example.camera; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.Calendar; import java.util.Locale; import android.annotation.SuppressLint; import android.app.Activity; import android.content.Intent; import android.graphics.Bitmap; import android.os.Bundle; import android.os.Environment; import android.provider.MediaStore; import android.text.format.DateFormat; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.ImageView; import android.widget.Toast; @SuppressLint("SdCardPath") public class MainActivity extends Activity { /** Called when the activity is first created. */ private Button button; private ImageView view; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button = (Button) findViewById(R.id.button1); view= (ImageView)findViewById(R.id.imageView1); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(intent, 1); } }); } @SuppressLint("SdCardPath") @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub super.onActivityResult(requestCode, resultCode, data); if (resultCode == Activity.RESULT_OK) { String sdStatus = Environment.getExternalStorageState(); if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) { // 检测sd是否可用 Log.i("TestFile", "SD card is not avaiable/writeable right now."); return; } new DateFormat(); String name = DateFormat.format("yyyyMMdd_hhmmss",Calendar.getInstance(Locale.CHINA)) + ".jpg"; Toast.makeText(this, name, Toast.LENGTH_LONG).show(); Bundle bundle = data.getExtras(); Bitmap bitmap = (Bitmap) bundle.get("data");// 获取相机返回的数据,并转换为Bitmap图片格式 FileOutputStream b = null; File file = new File("/sdcard/Image/"); file.mkdirs();// 创建文件夹 String fileName = "/sdcard/Image/"+name; try { b = new FileOutputStream(fileName); bitmap.compress(Bitmap.CompressFormat.JPEG, 100, b);// 把数据写入文件 } catch (FileNotFoundException e) { e.printStackTrace(); } finally { try { b.flush(); b.close(); } catch (IOException e) { e.printStackTrace(); } } try { view.setImageBitmap(bitmap);// 将图片显示在ImageView里 }catch(Exception e) { Log.e("error", e.getMessage()); } } } }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值