首页 > 其他分享 >uniapp 手写签名上传服务器

uniapp 手写签名上传服务器

时间:2024-07-26 17:51:43浏览次数:17  
标签:uniapp const res blob file new 手写 上传 split

用的框架是yinghuo,上传用了封装的上传

<template>
    <view class="container">
        <jp-signature ref="signatureRef" :openSmooth="true"></jp-signature>
        
        <view class="dis-flex m-top20">
            <u-button type="error" size="medium" @click="clear">清空</u-button>
            <u-button type="warning" size="medium" @click="undo">撤消</u-button>
            <u-button type="success" size="medium" @click="save">保存</u-button>
        </view>
        
        <!-- <image :src="url" mode="" class="sign-img m-top20"></image> -->
    </view>
</template>

<script>
  import * as UploadApi from '@/api/upload'
    export default {
        data() {
            return {
                url: '',
                isload: false;
            }
        },
        methods: {
            save() {
                let that = this
                this.$refs.signatureRef.canvasToTempFilePath({
                    success: (res) => {
                        console.log(res)
                        // 是否为空画板 无签名
                        console.log(res.isEmpty)
                        if(res.isEmpty){
                            uni.showToast({
                                icon:'none',
                                title:'请先签名'
                            })
                            return
                        }
                        // 生成图片的临时路径
                        // H5 生成的是base64
                        // console.log("base64",res.tempFilePath)
                        this.url = res.tempFilePath
                        this.upload()
                    }                    
                })
            },
            clear() {
                this.$refs.signatureRef.clear()
            },
            undo() {
                this.$refs.signatureRef.undo()
            },
            upload(){
                let that = this
                let file = that.base64ToFile(that.url, 'signimg.png')
                
                UploadApi.image([file])
                  .then(fileIds => {
                        console.log('上传结果',fileIds)
                    // resolve(fileIds)
                  })
                  .catch(reject=>{
                        console.log('上传失败',reject)
                    })
            },
            // base64转文件
            base64ToFile(base64Data, filename) {
              // 将base64的数据部分提取出来
              const parts = base64Data.split(';base64,');
              const contentType = parts[0].split(':')[1];
              const raw = atob(parts[1]);
                
              
              // 将原始数据转换为Uint8Array
              const rawLength = raw.length;
              const uInt8Array = new Uint8Array(rawLength);
              for (let i = 0; i < rawLength; ++i) {
                uInt8Array[i] = raw.charCodeAt(i);
              }
              
              // 使用Blob和Uint8Array创建File对象
              const blob = new Blob([uInt8Array], {type: contentType});
                const path = URL.createObjectURL(blob);
              const file = new File([blob], filename, {type: contentType});
                Object.defineProperty(file,'path',{
                    get() {
                        return base64Data
                    }
                })
                
                return file
            },
            // 
            // base64ToFile2(base64String, fileName) {
            //   const byteString = atob(base64String.split(',')[1]);
            //   const mimeString = base64String.split(',')[0].split(':')[1].split(';')[0];
            //   const ab = new ArrayBuffer(byteString.length);
            //   const ia = new Uint8Array(ab);
            //   for (let i = 0; i < byteString.length; i++) {
            //     ia[i] = byteString.charCodeAt(i);
            //   }
            //   const blob = new Blob([ab], { type: mimeString });
            //   const file = new File([blob], fileName, { type: mimeString });
            //   // file.path = URL.createObjectURL(blob);
            //     file.path = this.url;
                
            //   return file;
            // },
            
        }
    }
</script>

<style scoped>
    .container,.sign-img{
        width: 100%;
        height: 400rpx;
        border: 1px solid gainsboro;
        box-sizing: border-box;
    }
</style>

如果用的uni本身的上传,可以自行研究一下,也比较简单

标签:uniapp,const,res,blob,file,new,手写,上传,split
From: https://www.cnblogs.com/zonglonglong/p/18325928

相关文章

  • 上传到 Microsoft 应用商店的 Python 应用在上传 MSIX 或 .exe 文件之前是否需要获得
    我刚刚完成了桌面应用程序的开发工作,我想开始在Microsoft应用商店上销售该应用程序。我不确定许可部分。我想实现一种解决方案,当一个人下载应用程序时,他通过商店付费,如果他在下载时没有安装它,他获得的安装文件将被锁定,只能安装在同一台计算机上。如果他尝试在另一台计算机上使......
  • 《最新出炉》系列入门篇-Python+Playwright自动化测试-54- 上传文件(input控件) - 上篇
    1.简介在实际工作中,我们进行web自动化的时候,文件上传是很常见的操作,例如上传用户头像,上传身份证信息等。所以宏哥打算按上传文件的分类对其进行一下讲解和分享。2.上传文件的API(input控件)Playwright是一个现代化的自动化测试工具,它支持多种浏览器和操作系统,可以帮助开发人员和......
  • 获取手写字体的全部字形图片
    获取手写字体的全部字形图片本教程由做字体网(www.zuoziti.com)友情提供!本教程是制作手写字体系列教程,建议从序言部分开始阅读学习!如需交流,请加QQ924268440本节视频教程版权登记前的准备手写字体版权登记的类别属于美术作品类,有些登记网站会在美术类别下面细分为字体......
  • 如何出售手写字体
    如何出售手写字体本教程由做字体网(www.zuoziti.com)友情提供!本教程是制作手写字体系列教程,建议从序言部分开始阅读学习!如需交流,请加QQ924268440本节视频教程销售渠道有哪些目前允许以个人名义参与的字体销售平台有小米、字客网、找字网等等,其他的如华为、VIVO、OPPO......
  • 手写字体制作的相关软件
    手写字体制作的相关软件本教程由做字体网(www.zuoziti.com)友情提供!本教程是制作手写字体系列教程,建议从序言部分开始阅读学习!如需交流,请加QQ924268440本节视频教程1.FontCreator这是一款很好用的字体设计软件,小白很容易上手,网上也有一些零散的关于FontCreator的教......
  • 手写模板的设计
    手写模板的设计本教程由做字体网(www.zuoziti.com)友情提供!本教程是制作手写字体系列教程,建议从序言部分开始阅读学习!如需交流,请加QQ924268440本节视频教程先看一下模板样子从这一节我们正式开始制作手写字体,制作手写字体的第一步就是制作手写字体模板,先看一下我的模......
  • 手写字稿扫描方法
    手写字稿扫描方法本教程由做字体网(www.zuoziti.com)友情提供!本教程是制作手写字体系列教程,建议从序言部分开始阅读学习!如需交流,请加QQ924268440本节视频教程写完的手写字稿是这样的前面我们设计好了手写模板,并选好了书写笔,剩下的就是工工整整地书写了,这个过程大约要......
  • 手写字体如何赚钱
    手写字体如何赚钱本教程由做字体网(www.zuoziti.com)友情提供!本教程是制作手写字体系列教程,建议从序言部分开始阅读学习!如需交流,请加QQ924268440本节视频教程手写字体也可以赚钱?是的,你没有看错,收入可看本文末收入截图。你之所以感到惊讶是因为你不了解这个行业。字体......
  • 什么是手写字体
    什么是手写字体本教程由做字体网(www.zuoziti.com)友情提供!本教程是制作手写字体系列教程,建议从序言部分开始阅读学习!如需交流,请加QQ924268440本节视频教程什么是手写字体百度百科的定义是这样的,字体是文字的外在形式特征。是文字的风格,是文字的外衣。字体的艺术性体......
  • 手写线程池
    手写线程池线程池解决的问题是避免线程创建、销毁的代价以及避免线程太多,内存耗尽。GCC编译时,必须通过指令引入线程库。gcc-othreadpoolthreadpool.c-pthread组件开发线程池最基本需要包含三个组件任务队列-添加任务管理组件-管理线程对立以及任务队列执行队列-线程......