2013-03-13 104 views
-1

在我的應用程序中,我需要將base64格式的映像發送到服務器。目前我正在做的是,我只是將base64圖像字符串發送到服務器,並且當我從服務器取回該字符串時,我無法顯示圖像,我收到錯誤:圖像已損壞。發送和獲取base64格式圖像的確切方式是什麼?我使用的代碼如下:JS發送的base64圖片來源:發送base64映像到服務器

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()); 
} 

?> 
+0

什麼數據類型是fldImageSource字段? – 2013-03-13 13:28:52

+0

http://stackoverflow.com/questions/60174/how-to-prevent-sql-injection-in-php – Andreas 2013-03-13 13:29:36

+0

看着你的代碼,你正在使用MySQL而不是使用SQL Server。正確? – 2013-03-13 13:29:53

回答

0

700個字符是最有可能沒有足夠的儲存圖像,特別是如果Base64編碼。如果你爲這個列插入一個很大的值,MySQL會自動截斷它導致損壞。

解決方案:檢查您可能希望存儲的圖像的最大大小,然後相應地調整列大小。在對列進行更改時,您可能還應該考慮將圖像存儲爲二進制值以安全地存放一些空間。但似乎沒有本地MySQL的功能,將有助於這一點。

只需重複其他人已經提到的內容:您的代碼中存在一個嚴重的安全漏洞。您應該採取措施防止SQL注入攻擊。 @Andreas的鏈接是一個很好的起點。