PHP ajax download PDF files remotely and save them on the local server

Sometimes we want to save some PDF files in ajax mode, especially if it is placed on a remote server and stored on our own server. At this time, we need to write a program to help us complete this work. This article introduces PHP downloads PDF files remotely and saves them locally on the local server. Friends who need it can refer to:

The html page code is as follows:

 

<!DOCTYPE html>
<html>

<head>
    <script data-require="[email protected]" data-semver="2.1.1" src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <link rel="stylesheet" href="style.css" />
    <script src="jquery.binarytransport.js"></script>
    <script src="script.js"></script>

</head>

<body>
<button>download pdf</button>
</body>
</html>

The script.js code is as follows:

$(function() {
    $("button").click(function() {
        $.ajax({
            url: "http://lch.bat.com/aa.pdf",
            type: "GET",
            dataType: 'binary',
            success: function(result) {
                var blob = new Blob([result], {type:"application/pdf"});
                var data = new FormData();
                data.append('file', blob);
                $.ajax({
                   type: 'POST',
                   url: 'http://lch.demo.com/read.php',
                   data: data,
                   processData: false,
                   contentType: false,
                   success: function (arg) {
                       alert('下载成功');
                   }
               })
            }
        });
    });
});

The jquery.binarytransport.js code is as follows:

/**
 *
 * jquery.binarytransport.js
 *
 * @description. jQuery ajax transport for making binary data type requests.
 * @version 1.0
 *
 */

// use this transport for "binary" data type
$.ajaxTransport("+binary", function(options, originalOptions, jqXHR){
    // check for conditions and support for blob / arraybuffer response type
    if (window.FormData && ((options.dataType && (options.dataType == 'binary')) || (options.data && ((window.ArrayBuffer && options.data instanceof ArrayBuffer) || (window.Blob && options.data instanceof Blob)))))
    {
        return {
            // create new XMLHttpRequest
            send: function(_, callback){
                // setup all variables
                var xhr = new XMLHttpRequest(),
                    url = options.url,
                    type = options.type,
                    // blob or arraybuffer. Default is blob
                    dataType = options.responseType || "blob",
                    data = options.data || null;

                xhr.addEventListener('load', function(){
                    var data = {};
                    data[options.dataType] = xhr.response;
                    // make callback and send data
                    callback(xhr.status, xhr.statusText, data, xhr.getAllResponseHeaders());
                });

                xhr.open(type, url, true);
                xhr.responseType = dataType;
                xhr.send(data);
            },
            abort: function(){
                jqXHR.abort();
            }
        };
    }
});

Let's take a look at my local code for reading pdf files:

<?php
/**
 * Created by PhpStorm.
 * User: LCA
 * Date: 2020/9/28
 * Time: 9:44
 */
//header('Access-Control-Allow-Origin: *');
// 响应类型
header('Access-Control-Allow-Methods:*');
// 响应头设置
header('Access-Control-Allow-Headers:content-type,token,id');
header("Access-Control-Request-Headers: Origin, X-Requested-With, content-Type, Accept, Authorization");

if(isset($_FILES['file'])){
    $fname = "cc.pdf";
    move_uploaded_file($_FILES['file']['tmp_name'], "/htdocs/demo/" . $fname);
    echo "写入成功";
}

Finally, the jquery library file is introduced. After remote downloading, it can be opened locally and the content of the original file is exactly the same, and there will be no garbled characters.

 

Guess you like

Origin blog.csdn.net/lchmyhua88/article/details/109263320