javascript - 使用 Guzzle 和 Ajax 从 Dropbox 下载文件

标签 javascript php ajax laravel-5.1 guzzle

我正在尝试使用 Guzzle3 和 Ajax 从 Dropbox 下载文件。当我使用 Guzzle 发送发布请求时,我在控制台上收到以下原始代码:

HTTP/1.1 200 OK
Server: nginx
Date: Mon, 28 Dec 2015 09:34:20 GMT
Content-Type: application/octet-stream
Content-Length: 546000
Connection: keep-alive
pragma: no-cache
cache-control: no-cache
original-content-length: 546000
dropbox-api-result: {"name": "picture.jpg", "path_lower": "/box/mazedulislamkhan@gmail.com/picture.jpg", "id": "id:QzsqO9c4vG0AAAAAAAABzw", "client_modified": "2015-12-27T20:58:19Z", "server_modified": "2015-12-27T20:58:19Z", "rev": "4db24d66f17", "size": 546000, "media_info": {".tag": "metadata", "metadata": {".tag": "photo", "dimensions": {"height": 1281, "width": 1032}}}}
X-Server-Response-Time: 231
X-Dropbox-Request-Id: 3d610dd4a84f6717edd06dc5a2983a81
X-Robots-Tag: noindex, nofollow, noimageindex

����ExifII*��Duckyd��,http://ns.adobe.com/xap/1.0/<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.5-c014 79.151481, 2013/03/13-12:09:15        "> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#" xmp:CreatorTool="Adobe Photoshop CC (Macintosh)" xmpMM:InstanceID="xmp.iid:D0AC9B83656611E49FF7AB801A4B82BC" xmpMM:DocumentID="xmp.did:D0AC9B84656611E49FF7AB801A4B82BC"> <xmpMM:DerivedFrom stRef:instanceID="xmp.iid:D0AC9B81656611E49FF7AB801A4B82BC" stRef:documentID="xmp.did:D0AC9B82656611E49FF7AB801A4B82BC"/> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end="r"?>��Adobed���������   
    !1AQa"  q��2������BR#3
�br$��CS���s4%�c��T���Dt�d�5u���6'(!1AQaq"2�������BR#3��br$�4C���S%�Ds56��?�̋�_��<�=�,R���L���k�������b�5�E��?���"?��G��������?�'���#��E�Q��A�!�>h�Q��I/o������j)ϭG1/l�H��1�K��5��8p�TStjM��;ܯ��c��H�p�t}ʂ[�"Hgd���!p?ҏ��o��(�YJ����a��>�Y4].����������Y�?��Me��ߚ^���������ffl�19f�(>���~>(�P���>�~���,3���8�YC���r�X���F����,������3d�E���?�߸��������Q}i���?�[>A!�Ӛ�S��v'�����(�b�S�̸|���<�IJ� x@T��H�0}m��$��\��  ��wa,�Ȓ�(Ve9w��Ș��?�S�9�}I���!�p��t�K8�}a���8|"���T��Q8%Fg��2����o��JH���rH��g4��G�8O�����ـ�`�5��s�3�U�Bws�y$�$��s�3�Q?�0}d�$��W���g��H_��?��&�����g��H>�\Ѩ��J���G��K����E�s�3�T���̣QC�s�7����2�QC���=�?�W.e�?5����>�\�j)?P���{%� ��(�Q��<V�;{!>�_ԁ2�~w�N0��<�]c�����4���<�ME ��W�a>���Ѩ�y���_ި>��?4j(TL����?8>��?4j(����/կ���3?4��j�ux�<J��    �<  o4��_���X�ά;����1��QDW����������$�y�QI�c����J�])s?4��p���9a�0��P����P�������b�[ĥԋ:��?���[ģQ�C9���cWģR<��q�%��0�Px�j(���?�_�
c�  ����5�ht&����N���x�O��`�9��N?c�)#ǿ��N�Q�V'�������>�\�F�,��q���a
ZC��H�����#��!��U�#�����r�"����+Q���wB�%?M|��"p�V����5H9#M~�8e���!����JZp��I9�H���a9�����3)� �#{ߵk�v�9����n��75+{f.hkZ&����l�}�k�   q����}\���9Yo#����چ
�����È�ĕa���$ x%��Tp$��(OO�Q���9��'��?���G�1_w���R���   +�3�?�``�!  +�3�?HV`���3�?�a#H@������BCȦ�����?]�St���?p�@�@��J�����?(M!;@�Bk��A�x�D|P��%i=��i�gQ���O,�J�s����o ���Ss�w��`�,rJ)�)2r|���8��'B�rp�|?XIU�����X�C��  �ZB��e+��   ����Y��h@�@���
�>H餅�@�����e�`�[�W14��� Фdy�<[8��|`�.����y�a4��gV2l}��`҃��s���0�<SY8y�/��a��������A���v7���sC#��_��<PG$<��������Dg�0���&�2YY����B��,�!I*�h��0���S�����T�&C$��NG��0�+"G��

这是我正在使用的 Guzzle3 代码:

$client = new Client();
        $request = $client->post('https://content.dropboxapi.com/2/files/download');
        $request->setHeaders([
            'Authorization' => 'Bearer ' . self::getAccessToken(),
            'Dropbox-API-Arg' => '{"path": "/Box/' . $dropboxPath . '/' . $fileName . '"}'
        ]);

        try {
            $response = $request->send();

            return $response;
        } catch (BadResponseException $e) {

            return $e->getResponse();
        }

这是我正在使用的 Ajax 代码:

$.ajax({
    type: 'POST',
    url: '/downloaddropbox/' + filePath + '/' + fileName,
    data: 'filePath=' + filePath + '&fileName=' + fileName,
    beforeSend: function () {
        Materialize.toast('Please, wait while we\'re processing your download request.', 4000);
        $('.progress').show();
            },
    complete: function () {
        $('.progress').hide();
    },
    success: function (data) {
        console.log(data);
            },
    error: function () {
        Materialize.toast('Something goes wrong. Please, try again later!', 4000);
    }
});

任何人都可以帮助我如何从 Ajax 请求下载文件。我也尝试过使用 base64_encode 结果,但它仍然不起作用,因为我不仅要下载图像文件。

最佳答案

我建议使用 dropbox API相反。

如文档下载部分所示,通过身份验证后,您可以使用类似以下内容读取(下载)文件:

$localFile = fopen("working-draft.txt", "w+b");
$fileMetadata = $dbxClient->getFile("/file-in-dropbox.txt", $localFile);
fclose($localFile);
print_r($fileMetadata);

附言 正如下面评论中所建议的,使用 API 或任何其他方法,您必须适本地设置 header (根据您正在下载的文件类型)

关于javascript - 使用 Guzzle 和 Ajax 从 Dropbox 下载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34491068/

相关文章:

javascript - 如何检索位于不同文件中的 JSON 数据

javascript - 如何在点击时使用 jQuery 动态加载 WordPress 自定义帖子类型数据?

php - 使用 PHP/MySQL 显示一周内发生的生日

php - 获取 PHP openssl_encrypt 方法/模式列表

javascript - 根据选择选项制作动态 JSON

php - php中如何通过ajax调用时加载评论

javascript - 在 DIV 上按下按键以引用某个位置

javascript - 敌人 Sprite 以奇怪的方式走向玩家

PHP TZ 设置长度

javascript - 无法使用 AJAX 下载 TCPDF 生成的 PDF