代码之家  ›  专栏  ›  技术社区  ›  Naveed

zend/php:在mysql的blob字段中上传/下载文件时出现问题

  •  3
  • Naveed  · 技术社区  · 14 年前

    我上传的文件(现在是pdf)是这样的:(在MySQL的blob字段上传文件的内容)

    $organizationModel = new Model_Organization_Object( organizationId );
    $myFile = file_get_contents( '../path/to/my/file/filename.ext' );
    $organizationModel->setOrganizationProfile( $myFile );
    $organizationModel->save();
    

    现在我想从数据库中获取该文件并下载。我在控制器的操作中这样做:(我在这里对PDF文件进行了划分,因此在下面对其进行了硬编码。但将来我想从blob字段下载任何文件)

    $organizationModel = new Model_Organization_Object( $organizationId );
    $content = $organizationModel->getOrganizationProfile();
    
    header('Content-Type: application/octet-stream');
    header("Content-Length: " . strlen($content) );
    header('Content-Disposition: attachment; filename=orgProfile.pdf');
    
    $this->view->organizationProfile = $content;
    

    现在在视图文件中,我正在执行以下操作:

    echo $this->organizationProfile; 
    

    但上述下载过程打印(echo)文件的内容以firbug格式,不下载原始格式的文件。Firebug中的回声输出如下:

    %PDF-1.3
    %����
    84 0 obj
    << 
    /Linearized 1 
    /O 86 
    /H [ 541 212 ] 
    /L 958398 
    /E 11238 
    /N 27 
    /T 956600 
    >> 
    endobj
                                                            xref
    84 7 
    0000000016 00000 n
    0000000486 00000 n
    0000000753 00000 n
    0000000982 00000 n
    0000001102 00000 n
    0000000541 00000 n
    0000000732 00000 n
    trailer
    <<
    /Size 91
    /Info 83 0 R 
    /Root 85 0 R 
    /Prev 956590 
    /ID[<0a8d7035bf08791da591e8cae39b8c49><0a8d7035bf08791da591e8cae39b8c49>]
    >>
    startxref
    0
    %%EOF
    
    85 0 obj
    << 
    /Type /Catalog 
    /Pages 82 0 R 
    >> 
    endobj
    89 0 obj
    << /S 151 /Filter /FlateDecode /Length 90 0 R >> 
    stream
    H�b```f``�e`b`�f`@\0�.����\\I~aV$�Xƈ�dǪ����bA�Az�lv1o#�{-����1+�ʪG�����N`�b�
    >�-��
    \0\0D40
    endstream
    endobj
    90 0 obj
    106 
    endobj
    86 0 obj
    << 
    /Type /Page 
    /Contents 87 0 R 
    /Parent 79 0 R 
    /Resources << /XObject << /img0 88 0 R >> /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] >> 
    /MediaBox [ 0 0 612 792 ] 
    /CropBox [ 0 0 612 792 ] 
    /Rotate 0 
    >> 
    endobj�@.\0���
    endstream
    endobj
    88 0 obj
    << /Filter /FlateDecode \0\0\0\0\0\0\0\0\0\\
    \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\\
    \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\\
    \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\\
    \0\0\0\0\0\0\0\0\0\0\\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\\
    \0\0\0\0\0\0\0\0|n�FT*,�
    ��
    �j#Q��uT~r:}\\�_؛�ҵ��v��ϭ8Q�&� ���T�S�I\"�(>Y�ܾ����}H��aj�3��u�h�T�X�Z�-~��c\'P�^��d�ם�ߔ?����]_�ڿ�z��O]�q�����7寋�|�mN%�����̖T�����o�ߓ�sUzT���m�v8ͯq�
    ��e]�wS���C~Ta���.��[%!������2x]n~�7�Ϫ����6.����K��;c
    }����r�)V��
    u���*�7�$c\\���m�~���r��)U{�λ�廳˺��ԟ�R��
    ��D1L_����WUog�>��/������ߦ��~�%���M���}\'�� ;���y��K`�����O�,�߫����<�,0���;3    #��m�v���aZ=�N�u�J`��dwnm;��.Ѣ�k�n�K1-M�7����H&��ʨ���s�C?��
    �}Z�1����c�(0�q�_1��7�%���G7U/��h9I������S�Q��4nc�Lq��H6��;�꺒c(/O��2�٫�-�*_����%�I؏/?�I�o����ô�k��<����q��\'��]v�\"��+�˗ݯ�,��ɏ�qxgk�\\\\�6���7��Y���.G��ҽY��8��.��*���M_��J�hu1����z��W�o_��F�/���s�:�Y~��>0�g\\E�l�K5e���&L�/����k$����{ں:\\>�̥Fs?-��l�>c�亪o���Λ�9�V+�2;��}q�4
    �zS�|u�A`dK���n~�sΛ��K�hiY�j��#p���S�M\\���0P2䗶\\*�m+?L5Er����[W�>9|�̑�iY�u�j�M�_���n&��7O�f��s��z`.`�,W��#�l��n���s�՛\'�����=��&#�z�M7_����s���x��y�
    ��u�p�G���0ͨe�G���۸8]{�䓷N�1}��}~Q�[)�XF��_��*?  p7iQ����M�(�l���������׏��f��6����*��Ų;@~\\k�i��w_��*�#�Ւ�^�j�\\�L��/�}�Y�[��V��t~�w�n��a���m�O�(.�n;��ji:��W�ZnQ[9�n=�^��sE9��;�.��u3\"ږ��<�Ļ��y8�<H���g��u��\\�q��Ȥ71p�U��}ם��f`�Y��m3b*C�t{�SX��7m<��6��8K��[Qs��&_��(M��:�Z���W��Հ��W寚
    ��4d��4�Aڔ�ɪ�lw�e�d�>�
    �pCV��h�ŜS�Z�T��4�NӴ,�� �8=-�%ߜ��4�p�a��~��R눥L芈�=J��j}��ʺ��,�(�x����
    �]��l�)L��� I8eG#r�dC��;�͹/C���l���rm�ɽ��͆��e�6�M��fP�4�r��)�!�\\sڹ�?{��!cN��h�֗>�� ��o>��m�dO=&<ɻ�P��xΔ=�͌CC?�M��W[ϟ�v<���S14�����\\C�Z
        ��g��ݡq:�ǔ�C�k�vc�K�;��\"Y͙t�r]��G�z����w���rӹ����ަ0������e�:��/f�*^�W�Q8WsN��9}*ۥ|��~x)�N�=6J�l����M�b��Ƿ���M45�C�k]��r�uߍ�����r
    ]
    

    Firebug中的响应头:

    Date    Thu, 15 Apr 2010 06:21:03 GMT
    Server  Apache/2.2.11 (Ubuntu) PHP/5.2.6-3ubuntu4.2 with Suhosin-Patch
    X-Powered-By    PHP/5.2.6-3ubuntu4.2
    Expires Thu, 19 Nov 1981 08:52:00 GMT
    Cache-Control   no-store, no-cache, must-revalidate, post-check=0, pre-check=0
    Pragma  no-cache
    Content-Length  65535
    Content-Disposition attachment; filename=evidence.pdf
    Keep-Alive  timeout=15, max=71
    Connection  Keep-Alive
    Content-Type    application/octet-stream
    

    有人能帮我下载文件吗?或者我在上传过程中出了什么问题。setOrganizationProfile()和getOrganizationProfile()函数由我们的团队创建,在存储/获取数据库中的数据时工作正常。

    谢谢

    2 回复  |  直到 10 年前
        1
  •  1
  •   Tomasz Struczyński    14 年前

    好的,我认为您的问题是您使用Ajax下载文件。

    使用Ajax(或者更确切地说是-js)以正常方式下载文件是不可能的。你知道,漏洞太大了,不允许这样做(我想是这样),反正也没有这样的可能性。

    不过,还有一些解决办法。其中之一是在页面上动态创建隐藏的iframe,然后将其位置更改为下载脚本。然后,您就不用JS来下载了,只需要简单的浏览器功能。

    本页介绍了另一种方法:

    http://www.filamentgroup.com/lab/jquery_plugin_for_requesting_ajax_like_file_downloads/

    我会帮你的。

        2
  •  0
  •   Luke Rehmann    10 年前

    您希望内容类型是application/pdf,而不是application/octet流。这将呈现PDF文件,而不是显示其“源”。

    干杯