【问题标题】:Sending base64 image to server将base64图像发送到服务器
【发布时间】:2013-03-13 13:21:34
【问题描述】:

在我的应用程序中,我需要将 base64 格式的图像发送到服务器。目前我正在做的是,我只是将base64图像字符串发送到服务器,当我从服务器检索该字符串时,我无法显示图像,我收到错误:图像损坏。发送和获取 base64 格式图像的确切方法是什么?我使用的代码如下:发送base64图片源的JS:

var imageObj = $("#target")[0];
var canvas = $("#preview")[0];
var context = canvas.getContext("2d");
context.drawImage(imageObj, c.x, c.y, c.w, c.h, 0, 0, canvas.width, canvas.height);
vData = canvas.toDataURL();
$('#crop_result').attr('src', vData);

function saveCroppedImage()
{
   var params='image_name='+vData;
    $.post('localhost/PHP/addImage.php',params,
    function(details){
   }, "json")
  .error(function(jqXHR, textStatus, errorThrown) {
    alert('err');
  });   
}

PHP源码:

 <?php

include("config.php");

$clip_Name = $_REQUEST['image_name'];
$artist_Name ="ash";

$sql = "INSERT INTO tblImageSave (fldImageSource)
       VALUES('$base64Img')";

$retval = mysql_query( $sql, $conn );
if(! $retval )
{
  die('Could not enter data: ' . mysql_error());
}

?>

【问题讨论】:

  • fldImageSource 字段是什么数据类型?
  • 查看您的代码,您使用的是 MySQL 而不是 SQL Server。对吗?
  • @Sebastian Meine : varchar(700) 抱歉,是 MySQL
  • 您的数据库是否知道您正在存储 Base64 数据?它可能会以某种方式将其转换为二进制形式。使用 PHPMyAdmin 或其他工具查看数据库中的数据,并确保它与您发送的数据完全相同。

标签: php javascript mysql image base64


【解决方案1】:

700 个字符很可能不足以存储您的图像,尤其是在 Base64 编码的情况下。如果您为此列插入一个太大的值,MySQL 会默默地截断它,从而导致损坏。

解决方案:检查您可能要存储的图像的最大尺寸是多少,然后相应地调整列的大小。在对列进行更改时,您可能还应该考虑将图像存储为二进制值以保护一些空间。但似乎没有本地 MySQL 函数可以帮助解决这个问题。

只是重复其他人已经提到的内容:您的代码中有一个巨大的安全漏洞。您应该采取措施防止 SQL 注入攻击。 @Andreas 的链接是一个很好的起点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-17
    • 2015-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多