html5上传图片-如何在移动端H5上调用相册和单反上传图片、音频和视频

2023-08-23 0 9,997 百度已收录

移动端上传图片的方法很简单,使用HTML5中的input:file进行文件上传。

“一”共同属性值:

1.accept:指定上传文件要提交的文件类型。 该属性只能与 type: file 一起使用

例如:

 // 这里规定了只接受GIF和JPEG格式图像

如果图像的格式不受限制,可以写成如下:

  // 不过其实应该避免使用该属性,应该在服务器端验证文件上传

2. 多个:上传多个文件,例如选择多张图片一次性上传

《2》上传图片、视频、音频

  // 调取图片
  // 调取视频
  // 调取音频

上传文件或图片时,IOS和Android的解释方法有点不同。 多环境测试如下:

安卓:

【微信】:  有capture,调相机;           无capture,相册相机一起调
【QQ】:    有captrue,相册相机一起调;   无capture,调相册
【浏览器】: 有capture,调相机;         无capture,相册相机一起调

html5上传图片-如何在移动端H5上调用相册和单反上传图片、音频和视频

iOS:

【微信】:  有capture,调相机;   无capture,相册相机一起调
【QQ】:    有capture,调相机;  无capture,相册相机一起调
【浏览器】: 有capture,调相机;  无capture,相册相机一起调

从上面可以看出,IOS的性能是一样的。 不添加拍照属性时,相册和单反会同时调用。

所以如果想要在任何环境下同时调用相册和单反,只需要在实际开发过程中判断是否是安卓联通设备以及是否处于QQ环境,然后自动添加抓图属性即可。

js判断当前页面是Android/IOS、微信/QQ环境...

【三】读取input上传的图片并显示

html5上传图片-如何在移动端H5上调用相册和单反上传图片、音频和视频

知识点:FileReader

// 构造方法
var reader = new FileReader();
// 读取文件中的数据,FileReader提供如下方法:
readAsText(file, encoding); // 以纯文本的形式读取文件,并将读取到文本保存在result属性中。第二个参数指定编码类型,可选
readAsDataURL(file); // 以数据URL的形式读取文件,并保存在result属性中
readAsBinaryString(file); // 读取文件并将一个字符串保存在result属性中,字符串中每一个字符表示一个字节
readAsArrayBuffer(file); // 将一个包含文件内容的ArrayBuffer保存在result中

所以,我们使用readDataURL(file)方法来显示图片:




    
    
    
    上传图片文件并回显


   
    
var input = document.getElementsByTagName('input')[0], showBox = document.getElementsByClassName('show-box')[0]; input.onchange = function () {        var len = this.files.length; // 对于input上传的图片,使用dom.files可以获取图片信息 for(let i = 0; i < len; i++) { let fileImg = new FileReader(); fileImg.readAsDataURL(this.files[i]); // readAsDataURL方法将图片转为base64格式存储于result中 fileImg.onload = function() { let oImg = new Image(); oImg.src = this.result; // 使用FileReader的result属性获取图片base64信息 showBox.appendChild(oImg); }           fileImg.onerror = function(e) {             console.log('error' + e);           } } }

《四》FormData结合ajax上传图片到服务器

知识点:FormData

html5上传图片-如何在移动端H5上调用相册和单反上传图片、音频和视频

FormData 对象用于将数据编译为通配符对,以便可以使用 XMLHttpRequest 发送数据。

主要用于发送表单数据,但也可以用于发送通配符对数据html5上传图片,其使用与表单无关,所以有两种方式:

1.不使用form表单,而是使用通配符对表单,在FormData对象中添加数组表单来上传文件

方法:FormData.append()

// append()两个重载函数
formData.append(name, value);
formData.append(name, value, filename); // filename可选
// 还有set()函数,它和append主要区别是:
// append 如果键已经存在,会将新值添加到已有的值集合后面
// set 如果键已经存在,会将新值覆盖原来的值

value值可以是Blob或Flie类型的值。

html5上传图片-如何在移动端H5上调用相册和单反上传图片、音频和视频

MDN 是这样说的:

其中Blob(binary large object),通俗地讲就是一个大型的二进制对象,可以是图片、音频html5上传图片,而Blob往往是数据库中用来存储二进制文件的数组类型,比如mysql数据库。

我们回到第三个参数。 只有当值为blob或file类型时,才可以添加第三个参数。 当第二个参数为字符串时,会报错:

回到案例,上面的案例我们没有使用form表单,所以我们在“三”的基础上添加了如下代码:

// 我们创建一个FormData对象,然后每获取一个文件,就使用append()方法添加字段
var formData = new FormData();
// ...
fileImg.onload = function () {
   // ...
   formData.append(files[i].name, files[i]); // 键值对形式 此处append()第二个参数传入的是文件对象File类型
}
// 然后再使用ajax将formData数据传送至服务器

2.使用

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 html html5上传图片-如何在移动端H5上调用相册和单反上传图片、音频和视频 https://www.wkzy.net/game/144563.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务