react签名+上传base64图片接口入参处理

好久没更博啦,最近写项目需要实现将签名生成的url(base64图片格式)上传到upload接口。在这简要的记录下~~

背景:1.实现签名功能; 2.上传base64图片(格式自定义)

实现:1.签名功能

引入react-signature-canvas中的SignatureCanvas绘制:

import React, { useState } from 'react';
import SignatureCanvas from 'react-signature-canvas';

const Signature = props => {
  const { resetImg } = props;
  const [sign, setsign] = useState(null);
  const end = () => {
    resetImg(sign);
  };

    return (
        <>
          <SignatureCanvas
            canvasProps={{ width: 1264, height: 400, className: 'sigCanvas' }}
            penColor="#181818"
            ref={ref => {
              setsign(ref);
            }}
            onEnd={end}
            throttle={20}
            minWidth={1}
            maxWidth={4}
          />
            
        </>
    )

};

export default Signature;

在b页面引入signature组件:

import React, { useState } from 'react';
import Signature from '@/pages/Order/FlowPage/components/Signature';
const SignModal = props => {
  const [sigPad, setsigPad] = useState(null);
    
  const reset = value => {
    setsigPad(value);
    dispatch({
      type: 'global/save',
      payload: {
        showSignUrl: value,
      },
    });
  };

  const confirm = () => {
    setUrl(sigPad.getTrimmedCanvas().toDataURL('image/png'));
    props.clickOK(sigPad.getTrimmedCanvas().toDataURL('image/png'));
  };

  const resetSign = () => {
    sigPad && sigPad.clear();
  };

return (
    <div>
      <Modal
        visible={props.visible}
        title='modal'
        width={1296}
        onOk={handleOk}
        onCancel={handleCancel}
        footer={[
          <div key="signModal">
            <Button onClick={() => handleCancel()}>CANCEL</Button>
            <Button type="primary" loading={loading} onClick={() => handleOk()}>OK</Button>
            <Button onClick={() => resetSign()} >RESET</Button>
          </div>,
        ]}
      >
        <Signature resetImg={reset} />
      </Modal>
    </div>
  );
};
export default SignModal;

点击ok如下图所示:

2.上传图片操作:

  const submitSign = () => {
    // 重要三步骤
    const formData = new FormData();
    const fileImg = dataURLtoFile(showSignUrl);
    formData.append('file', fileImg, `${Date.now()}.png`); 

    dispatch({
      type: 'global/saveSignature',
      payload: formData,
    }).then(({ success, data, errMessage }) => {
      if (success) {
        console.log(success)
        }).then(({ success, errMessage }) => {
          if (success) {
            message.error(errMessage);
          }
        });
      }
    });
  };

 Last: 希望能帮到需要的小伙伴们~越努力越幸运

### 实现前端集成DeepSeek进行文件上传 为了在前端项目中集成DeepSeek并实现文件上传功能,开发者可以遵循一系列特定的技术实践来确保操作顺利执行。这不仅涉及到HTML表单的设计,还包括JavaScript或现代前端框架(如React、Vue.js等)的运用以及与后端服务的有效通信。 #### HTML 表单设计 创建一个简单的HTML页面用于文件选择和提交: ```html <form id="uploadForm"> <input type="file" name="file" /> <button type="submit">Upload</button> </form> <div id="response"></div> ``` 此部分负责提供用户界面以便于用户能够选择要上传至服务器的文件[^2]。 #### JavaScript 处理逻辑 利用原生JavaScript或是通过流行的库/框架编写脚本来处理用户的交互事件,并向后端发送请求。这里给出基于`fetch` API的一个简单例子: ```javascript document.getElementById('uploadForm').addEventListener('submit', function(event){ event.preventDefault(); const formData = new FormData(this); fetch('/api/upload', { method: 'POST', body: formData, }) .then(response => response.json()) .then(data => document.getElementById('response').innerText = JSON.stringify(data)) .catch(error => console.error('Error:', error)); }); ``` 上述代码片段展示了如何捕获表单提交动作,阻止默认行为,构建`FormData`对象并将之作为主体内容传递给指定URL路径下的API接口;同时定义了成功回调函数用来更新DOM显示返回的数据信息,失败则记录错误日志到浏览器控制台。 #### 使用 DeepSeek 进行增强 对于更复杂的场景,比如需要实时预览图片或者视频之前先经过某些智能化处理再决定是否真正上载,则可引像DeepSeek这样的AI平台所提供的能力。具体来说,在发起HTTP POST请求前调用一次额外的服务端点获取初步分析结果,依据这些反馈调整最终传输的内容形式或直接终止不必要的网络活动以节省带宽资源消耗。 假设存在这样一个RESTful风格的方法签名 `/deepseek/predict` 接受二进制流输并且回应JSON格式的对象描述预测类别标签及其置信度得分等等属性值列表。那么可以在现有基础上稍作修改如下所示: ```javascript // ... 上述相同的部分 ... const fileInput = this.querySelector('[name=file]'); if (!fileInput.files.length) return; let reader = new FileReader(); reader.onloadend = () => { let binaryData = reader.result; // 调用 DeepSeek 的预测服务 fetch('/deepseek/predict', { method: 'POST', headers: {'Content-Type': 'application/octet-stream'}, body: binaryData.slice(binaryData.indexOf(',') + 1), // 如果是 base64 编码的话去掉前面的 metadata 部分 }).then(res => res.json()).then(predictionResult => { // 根据 predictionResult 来判断是否继续上传原始文件或其他后续操作 if (predictionResult.label === 'desired_category') { // 替换成实际业务逻辑判定条件 // 继续原来的上传流程... } else { alert(`The uploaded content does not match the expected category (${predictionResult.label}).`); } }); }; reader.readAsDataURL(fileInput.files[0]); event.preventDefault(); // 可能已经不需要在这里防止默认行为了因为异步加载期间不会触发真正的提交 ``` 这段扩展后的版本增加了读取本地媒体的能力并通过FileReader API将其转换成适合远程调用的形式传送给专门为此目的而设的目标地址做进一步评估。之后根据得到的结果采取相应的措施——要么正常走完整个工作流直到完成存储环节;要么提前中断进程给予提示说明原因何在[^3]。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值