PHP传输base64数据不完整的解决方法

 更新时间:2024年05月29日 10:02:16   作者:德宏大魔王  
最近在做OCR增值税务处理时,接口是通过图片转base64提交处理然后返回数据的,通过在线工具进行测试,发现传递过去的数据可以使用,接收到的数据却提示损坏,所以本文给大家介绍了PHP传输base64数据不完整的解决方法,需要的朋友可以参考下

前言

最近在做OCR增值税务处理时,接口是通过图片转base64提交处理然后返回数据的,我通过前端将图片转换为base64提交到后端接收时,通过在线工具进行测试,发现传递过去的数据可以使用,接收到的数据却提示损坏

解决办法

<?php
header('Content-Type: text/html; charset=utf-8');
header('Access-Control-Allow-Origin: *'); // 允许任何网址请求
header('Access-Control-Allow-Methods: POST, GET, OPTIONS, DELETE'); // 允许请求的类型
header('Access-Control-Allow-Credentials: true'); // 设置是否允许发送 cookies
header('Access-Control-Allow-Headers: Content-Type, Content-Length, Accept-Encoding, X-Requested-with, Origin'); // 设置允许自定义请求头的字段


// 接收POST数据

$base64=$_POST['base'];

替换为以下代码:

<?php
header('Content-Type: text/html; charset=utf-8');
header('Access-Control-Allow-Origin: *'); // 允许任何网址请求
header('Access-Control-Allow-Methods: POST, GET, OPTIONS, DELETE'); // 允许请求的类型
header('Access-Control-Allow-Credentials: true'); // 设置是否允许发送 cookies
header('Access-Control-Allow-Headers: Content-Type, Content-Length, Accept-Encoding, X-Requested-with, Origin'); // 设置允许自定义请求头的字段


// 接收POST数据
$postData = file_get_contents('php://input');
$base64=urldecode($postData);
$new_base64 = substr($base64, 27); 

即可解决

拓展知识

BASE64解码后的图片显示不完整问题

BASE64解码后的图片显示不完整

从前端获取base64信息就后用以下代码进行处理,发现解析出来的图片会损坏。

StringBuffer filePathStr=new StringBuffer();
			for(int i=0;i<fileList.size();i++){
				JSONObject fileObj = fileList.getJSONObject(i);
				if(null!=fileObj){
					String fileContent=fileObj.getString("FileContent");
					String fileName=fileObj.getString("FileName");
					//Base64解码  
					byte[] bytes=Base64.decodeBase64(fileContent);
					  for (int j = 0; j < bytes.length; ++j) {  
					        if (bytes[j] < 0) {// 调整异常数据  
					        	bytes[j] += 256;  
					        }  
					  }

导致损坏可能为以下原因

一:需要去掉如下头部信息。

二:

因为ajax在传输过程中加号会变成空格而base64里是有加号的,所以在ajax传输前先要对base64进行编码,把加号替换成%2B的url编码。
var img = imageData.replace(/+/g,"%2B");
imageData就是原始的base64码

以上就是PHP传输base64数据不完整的解决方法的详细内容,更多关于PHP base64数据不完整的资料请关注脚本之家其它相关文章!

相关文章

  • php 全文搜索和替换的实现代码

    php 全文搜索和替换的实现代码

    方便替换和全文索引
    2008-07-07
  • PHP读取和写入CSV文件的示例代码

    PHP读取和写入CSV文件的示例代码

    CSV(逗号分隔值)文件是使用逗号分隔信息的文本文件。该文件的每一行都是一条数据记录,也就意味着它可以用于以表格的形式展现信息。本文主要介绍了PHP读取和写入CSV文件的方法,需要的可以参考一下
    2023-04-04
  • 深入理解PHP之require/include顺序 推荐

    深入理解PHP之require/include顺序 推荐

    在大型的Web项目中, include_path是一个模块化设计的根本中的根本(当然,现在也有很多基于autoload的设计, 这个不影响本文的探讨), 但是正是因为include_path, 经常会让我们遇到一些因为没有找到正确的文件而导致的看似”诡异”的问题.
    2011-01-01
  • 深入解析phpCB批量转换的代码示例

    深入解析phpCB批量转换的代码示例

    本篇文章是对phpCB批量转换的代码示例进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • php动态生成版权所有信息的方法

    php动态生成版权所有信息的方法

    这篇文章主要介绍了php动态生成版权所有信息的方法,实例分析了php时间与字符串的操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03
  • php简单实现无限分类树形列表的方法

    php简单实现无限分类树形列表的方法

    这篇文章主要介绍了php简单实现无限分类树形列表的方法,实例分析了php通过数组实现树形列表的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03
  • PHP缓存工具XCache安装与使用方法详解

    PHP缓存工具XCache安装与使用方法详解

    这篇文章主要介绍了PHP缓存工具XCache安装与使用方法,较为详细的分析了缓存工具XCache在Windows及Linux平台安装与Xcache操作封装类实例,需要的朋友可以参考下
    2018-04-04
  • 浅谈ThinkPHP中initialize和construct的区别

    浅谈ThinkPHP中initialize和construct的区别

    下面小编就为大家带来一篇浅谈ThinkPHP中initialize和construct的区别。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • php反弹shell实现代码

    php反弹shell实现代码

    遇到一个BT的网站,上传php文件成功之后,每访问一次,文件名就会随机改变一次,并且你访问当前文件如果点其他操作项,文件仍然会改名。
    2009-04-04
  • 一文详解php中.env实现原理

    一文详解php中.env实现原理

    在PHP中,.env文件是一种常见的配置文件格式,用于存储应用程序的环境变量,本文将给大家大家详细的介绍一下php中.env实现原理,文中给出了简单的示例代码,需要的朋友可以参考下
    2024-01-01

最新评论