将 base64 图像上传到 php 服务器并保存到 MySql

Upload base64 image to php server and save to MySql

来自我的 phone,我正在用 ngcordova 拍照并将其转换为 base64。这非常有效,可以在它之后显示在我的 phone 应用程序上。

现在,我正尝试使用来自 angularjs 的 $http 将 base64 字符串发送到我的 PHP 服务器,但由于某种原因,它没有收到它。这是代码。

var request = $http({
  method: "post",
  url: mainUrl + "spus.php",
  params: {
    action: "saveLocationPicture",
    locationPicture: spuInfo.locationPicture  <-- "data:image/png;base64,/9j/44AQSk..."
  }
});

我说的是php服务器没有收到,我觉得不是。为什么?因为如果我发送一个较短的字符串(少于 835 个字符),php 服务器会收到它并且我可以将它保存到 MySql 数据库中。为了测试,我在 MySql table 中创建了 2 列。一个是 LongBlob 类型,另一个是 LongText。它应该有足够的空间。 ;-)

首先,可以发送到$http的字符串有没有限制"params"?

如果可以,限制是多少?

也许是我的 PHP 服务器配置无法处理长 base64 字符串?你怎么看?

谢谢

******** 更新 *******

大家好,

到目前为止我找到了部分解决方案并想与您分享。

我现在可以通过这样做将我的大 base64 图像发送到我的 php 服务器:

    var request = $http({
      method: "post",
      url: mainUrl + "spus.php",
      data: {
        action: "saveLocationPicture",
        hw_id: spuInfo.hw_id,
        locationPicture: spuInfo.locationPicture
      }
    });

并且,在我的 php 代码中:

    $postdata = file_get_contents("php://input");
    $request = json_decode($postdata);

    $action2 = $request->action;
    $hw_id2 = $request->hw_id;
    $locationPicture = $request->locationPicture;

现在,我在 Chrome 调试控制台视图中看到的唯一问题是:

GET data:image/png;base64,/9j/4AAQSkZJRgABAgAAAQABAADFQWERTYUIOPHGJTIYKHMBFHTYF…kZJRgABAgAAAQABAAD//gAEKgD/4gIcSUNDX1BST0ZJTEUAAQEAAAIMbGNtcwIQFFFFFFFFFFF net::ERR_INVALID_URL

有人知道我为什么会这样吗?

谢谢

为什么不尝试 Cordova File Transfer Plugin 将图像文件上传到服务器,使用 $_FILE 检索文件,将其转换为 blob 对象并存储它。

我找到了出现该错误的原因!我使用的 base64 图像只是随机字符,这导致了问题。