You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Vue Signature Pad获取签名并将base64图片传到Laravel后端

问题排查&解决步骤

  • 问题1:参数名拼写错误
    你向FormData中添加参数时写的键名是signtaure(字母t和u顺序错误),后端使用$request->signature获取参数名称不匹配,自然取不到值。
  • 问题2:错误传递了完整返回对象
    this.$refs.signaturePad.saveSignature()返回的是包含isEmpty、data两个属性的对象,你直接把整个对象存入FormData,实际要传递的base64图片内容是返回值里的data字段。

修正代码(直接传base64字符串)

const { isEmpty, data } = this.$refs.signaturePad.saveSignature();
console.log(isEmpty);
console.log(data);

// 先判断签名非空再提交
if (isEmpty) {
  alert('请先完成签名');
  return;
}
let formData = new FormData();
// 修正拼写错误,传递实际base64内容
formData.append('signature', data);

axios.post('/api/employee/update/27141399-8?api_token='+App.apiToken, formData, config)
 .then(function (response) {
    currentObj.success = response.data.success;
 })

Laravel端直接用你原来的代码就能拿到值:

$base64Content = $request->signature;

可选优化:转成Blob文件传递(适配Laravel文件处理逻辑)

如果后端需要按文件格式接收,比如要存到存储目录,可以把base64转成Blob再提交:

const { isEmpty, data } = this.$refs.signaturePad.saveSignature();
if (isEmpty) {
  alert('请先完成签名');
  return;
}
// base64转Blob
const byteString = atob(data.split(',')[1]);
const mimeString = data.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 });

let formData = new FormData();
formData.append('signature', blob, 'signature.png');

axios.post('/api/employee/update/27141399-8?api_token='+App.apiToken, formData, config)
 .then(function (response) {
    currentObj.success = response.data.success;
 })

Laravel端可以直接用文件方法处理:

if ($request->hasFile('signature')) {
    $path = $request->file('signature')->store('signatures');
    // 后续存储路径到数据库等逻辑
}

内容的提问来源于stack exchange,提问作者Jis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 11:45:00