2015-06-16 2 views
-2

Я использовал базовый метод 64 для вставки изображения в базу данных.Изображение не сохраняется из приложения в базу данных

Клиент сторона:

NSData *data = nil; 
NSString *imageData = nil; 

if (insertimageview.image != nil) { 
      UIImage *image = insertimageview.image; 
      data = UIImagePNGRepresentation(image); 
      imageData = [data base64EncodedStringWithOptions:0]; 
      NSString *url=[[NSString alloc]initWithFormat:@"http://localhost/rk.php?sr=%@",imageData]; 
      NSData *dat=[[NSData alloc]initWithContentsOfURL:[NSURL URLWithString:url]]; 
      NSString *echoo=[[NSString alloc]initWithData:dat encoding:NSUTF8StringEncoding]; 
      NSLog(@"%@",echoo); } 

В моей стороне сервера я расшифровал строку с функцией base64.

стороне сервера:

<?php 
$host="localhost"; // Host name 
$username="root"; // Mysql username 
$password=""; // Mysql password 
$db_name="q"; // Database name 
     \ 
// Connect to server and select databse. 
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB"); 
$cat=$_GET["sr"]; 
$catt="rrrr"; 
$img = @imagecreatefromstring(base64_decode($cat)); 
     if($img != false){ 

     imagejpeg($img, "htdocs/".$catt.""); 
     } 
     else{ 
     echo falsss; 
} 

$qu="INSERT INTO q(id,q)VALUES(5,'$catt')"; 
$res=mysql_query($qu); 
if($res){ 
echo "success"; 
} 
else{ 
echo mysql_error(); 
?> 

Проблема: Изображение не загрузки в базу данных. Может ли кто-нибудь объяснить?

+1

насколько велики эти base64 «изображения»? URL-адреса ограничены по длине, и вы рискуете потерять/испортить изображение ... и 'echo falsss'? что это за «фальс»? –

+0

Если вы можете, вы должны [прекратить использование 'mysql_ *' функций] (http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php). Они больше не поддерживаются и [официально устарели] (https://wiki.php.net/rfc/mysql_deprecation). Узнайте о [подготовленном] (http://en.wikipedia.org/wiki/Prepared_statement) [заявлениях] (http://php.net/manual/en/pdo.prepared-statements.php) и рассмотрите возможность использования PDO , [это действительно не сложно] (http://jayblanchard.net/demystifying_php_pdo.html). –

+0

Да, я сделаю это с подготовленными заявлениями @JayBlanchard Спасибо за ваш совет. –

ответ

1

Кодирование Base64 должно быть экранировано, чтобы быть частью URL-адреса. Base64 использовал проблемные символы: «+», «=» и «/».

Есть также ограничение длины, из RFC7230:

Различных ограничения специальных по длине линии запроса встречается на практике. РЕКОМЕНДОВАНО, что все HTTP-отправители и получатели поддерживают, как минимум, длину строки запроса 8000

Реалистично 2000 символов - это хороший максимум.

URL-адреса не предназначены для передачи данных, используйте POST или PUT.

Смежные вопросы