使用PHP WebService将图像插入MySQL数据库

时间:2014-03-24 02:18:21

标签: php android mysql blob

我搜索了很多关于这个问题但我没有找到任何直接答案。

我正在编写一个使用SQL来存储数据的Android应用程序。我通过SQL查询传递了一个简单的PHP Web服务。

Web服务代码是

<?php

if(isset($_GET['user'])) { $user = $_GET['user']; }
if(isset($_GET['pass'])) { $pass = $_GET['pass']; }
if(isset($_GET['query'])) { $query = $_GET['query']; }

if(isset($query)) {
    $link = mysql_connect('localhost',$user,$pass) or die('Connexion impossible au serveur SQL');
    mysql_select_db('dbi',$link) or die('Impossible de sélectionner la base de donnée');

    $result = mysql_query($query,$link) or die('Erreur dans la requete : '.$query);
    $count=0;
    while($row = mysql_fetch_row($result)){
    if ($count>0) echo ";";
        for($a=0;$a<count($row);$a++){
            echo $row[$a];
            if ($a<(count($row)-1)) echo ',';
        }
    $count++;
    }

    @mysql_close($link);
}
?>

一切正常(我实际上只使用webservice在数据库中插入数据(我将数据库转储到sqlite数据库以便与它一起工作))除非我尝试插入Blob。我得到非法字符,所以我尝试对查询进行编码,但blob已损坏。

private String executeQuery(String query){
        HttpClient client= new DefaultHttpClient();
        String encodedQuery=null;
        try {
            encodedQuery = URLEncoder.encode(query,"UTF-8");
        } catch (UnsupportedEncodingException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        try {
        HttpGet httpget = new HttpGet(serverURL+"?user="+username+"&pass="+password+"&query="+encodedQuery);
        ResponseHandler<String> responseHandler = new BasicResponseHandler();
        String result = client.execute(httpget, responseHandler);
        client.getConnectionManager().shutdown();
        return result;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }finally {
        }
    }

我执行那样的查询

executeQuery("INSERT INTO " + DBIDatabase.TABLE_signatures + " (name, job, signature) VALUES ('" + pm.signature.name + "','" + job_id + "','" + new String(pm.signature.sign.imageByteArray) + "')")

原始BLOB(由eclipse中的System.out.println打印):

�PNG


������
IHDR�����������d��������fw������sBIT|d�����RIDATx���=��D���oJ~�����DBB���OH��6B�QDP%�]��n�"����ڞ��3��G��};���������������������������������x��8�&������#9lě����۸ݪ8No���N}��؉t9u%�|��ح�jU\��㠽��f��T"��rp,������7_�
�G��]] L�*��������lK?L+P��+��;��x�I�z�r�+ؐ%���q3��ˆS��$��P�V���*���Ѷ�Dҗ$�ڟZ�b�k��'�!".#�����]So�d��-�k1���X��[�a�2�Y/#�;�~�Кx�J2�ڶ�PwݴОf,�ـ�su{��t��O�5��%��:�t�E�W�/2�?$AԸݠj[<��zEy��+�a�Wй��V̚�i��>]Pk��u���,QQM�2�
ɖ<�5�x�
d��R���wJ�����1��C����e�'K�ف�X�{��N�%'����V�ɐ����-���#V����iD|�1��xK��͋�%l�]�g�zXBܩָNP�v�l8�0נ��1�o��4��9��j�Jj*b��q�'U�،{�n`b5�x*�Ӧle�mZ��r%�GS�7G�}�Z�y�e)cyc����3����z�X���Z�����.��

��8s,��s���]~��d�v�GD|����0T�3��X�䴋��:�>�����("~�a�;�k���_s�(u:�ݒ��1�o�~x0��N�.�26Qy s��R��IC��TkaN���->��Ա�dPL�١OJ2��ؗ�N��g,s���..�ߩ�쓒Aq?�_�7��ʲv�c|��ѢHm�,e{S�q�X�l8���j3�ߕ�i�0I�%�*ۜ�s�0�2����<���!�"��u=x���rVK� �����}UE�N��F�E�YD|�#��y��G��/>G�<D����1�#�߈�+�z�m�{�>//@�����P�D��о8Z�1 ��1�z�Ÿ����!����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������P�����'3������������IEND�B`�')

数据库中的Blob:

�PNG


IHDR�d��fwsBIT|d��IDATx���=n�@��Q��s�4p��5�� N@�@�p (4�i�DB "��P�b�Zo�����y��VZ�^���xF��ĥ�`�I���Or��cLއ$G�?��~5���q�����k�W��M;`4��?uw*��.տ�낹V���T"�|O�o�`.���J��n��jI��=�V��
�N�`��>�%��R�N��I.�¤a��,H��47�=:m{�
e+������a�`.(��A�$ɳ���I�{����ł�X�1���)B���G����
�^�����t������0�S����T_�`P��� �,��}�S@�~f|O�uvv)�u?��}�`.�!�U[#�zN��,�?tf(7�f���R���T�s�-.��ÕY˼Iu_�`� ��w�dX�~�Fy�)�g�.u
�Y��Ƭ`.���WAM��Z��u�m6xL�k;�}�q������������$_rv��N�V(#L�E���j��e���k��X,��������K�>}�P>轺�fL��Ի��
���!v悡�%y�z�0v�p.OSos�T@��N����0L�S��(���ZK�u�ϱ�9U��@{����*J�YIEND�B`�

如果我把图片加载回来,可悲的是它是一张空白的图片。 我错过了什么吗?有没有其他方法可以将Blob传递给PHP Web服务?

THX

1 个答案:

答案 0 :(得分:0)

您需要对图像进行Base64编码,然后存储为String。这可确保您只在php,数据库和任何地方使用有效字符。