IOS上传相册图片没有反应

2019-12-27  本文已影响0人  紫荆峰

一、前言

  有段时间没有写博客了,正好今天在写项目时出现出现一个问题,在此记录一下,希望以后不会再反同样的错误。

二、问题描述

  在项目开发中我们不免会遇到图片上传的问题,我们会和后端开发人员上联以何种图片方式上传图片(base64、File文件流等),这里我们公司用的是File文件流的方式上传的图片。

1.修改前

  在上传图片之前,最后进行一下图片压缩,提高上传速度,这是很有必要的。个人推荐使用\color{#ea4335}{lrz}图片压缩插件,方便简洁、易操作。

1.安装

npm install lrz --save

2.文件调用

import lrz from "lrz";
import { dataURLtoFile } from "@/util/util.js";
/* 此处省略 */
lrz(所选文件的file)
      .then(res => {
          /* 调用自定义的base64转file的方法 */
          let resultFile = dataURLtoFile(res.base64, "file");
          console.log(resultFile )
          /*后续执行上传接口,再次省略,根据自己的业务需求,自行编写*/
        })
        .catch(error => {
          errorToast(error);
        });

注意:在调用lrz压缩成功之后,我再次调用了一个自定义的base64转file的方法dataURLtoFile()

3.dataURLtoFile()

// 将base64转换为文件
export const dataURLtoFile = (dataurl, filename) => {
  console.log(filename);
  var arr = dataurl.split(","),
    mime = arr[0].match(/:(.*?);/)[1],
    bstr = atob(arr[1]),
    n = bstr.length,
    u8arr = new Uint8Array(n);
  while (n--) {
    u8arr[n] = bstr.charCodeAt(n);
  }
  return new File([u8arr], filename, { type: mime });
};

4.运行结果
  我们在ios11以上版本运行正常,android版本也运行正常,但是在ios11以下发现能够正常调起相册,但是就是不执行我的上传接口,好气人哦o(╥﹏╥)o。经过我多次的求证,发现只要修改dataURLtoFile()里面的方法即可。

2.修改后

export const dataURLtoFile = (dataurl, filename) => {
  console.log(filename);
  var arr = dataurl.split(","),
    mime = arr[0].match(/:(.*?);/)[1],
    bstr = atob(arr[1]),
    n = bstr.length,
    u8arr = new Uint8Array(n);
  while (n--) {
    u8arr[n] = bstr.charCodeAt(n);
  }
  //return new File([u8arr], filename, { type: mime });
  return new Blob([u8arr], { type: mime });    //兼容低版本的ios系统
};

完美解决,各版本的ios系统均可调起上传接口()。

三、总结

  希望对大家有所帮助,谢谢

上一篇下一篇

猜你喜欢

热点阅读