PHP将PDF上传到Google Drive API

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了PHP将PDF上传到Google Drive API脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我有PHP创建的网站.基本上它是一个发送文件类项目.它使用Azure中的文档存储我将调用并将其发送到Azure.现在我想发送邮件以及存储在GOOGLE端硬盘中.

因此应将其存储为具有公共访问权限的驱动器.我创建了以下代码.它工作正常我不希望用户输入任何内容.

$client->setAccessToken($_SESSION['accessToken']);
    $service = new Google_DriveService($client);
    $finfo = finfo_oPEn(FILeiNFO_MIME_TYPE);
    $file = new Google_DriveFile();
    foreach ($files as $file_name) {
        $file_path = 'files/'.$file_name;
        $mime_type = finfo_file($finfo,$file_path);
        $file->setTITle($file_name);
        $file->setDescription('This is a '.$mime_type.' document');
        $file->setMimeType($mime_type);
        $service->files->insert(
            $file,array(
                'data' => file_get_contents($file_path),'mimeType' => $mime_type
            )
        );
    }
    finfo_close($finfo);

我想使用cURL或使用API​​从Azure URL上传.邮件发送时,它会同时自动上传到驱动器.

问题更新

我有功能发送邮件这是完美的工作.我想将一个附件存储到谷歌驱动器并检索该路径到数据库的路径存储.

这一切都将基于API,无需用户交互.该文件是格式的PDF而不是特定的字节,它根据文件的数据而不同.

问题 :

当我将文件上传到Drive原始文件名时,重命名为无标题.这是代码.

function uploadFile($credentials,$filename,$targetPath)
{

    global $GAPIS;
    $ch = curl_init();
    curl_setopt($ch,CURLOPT_URL,$GAPIS . 'upload/drive/v2/files?uploadType=media');

    curl_setopt($ch,CURLOPT_BINARYtransfer,1);
    //curl_setopt($ch,CURLOPT_POSTFIELDS,array("title" =>"newfile.txt"));
    curl_setopt($ch,file_get_contents($filename));

    curl_setopt($ch,CURLOPT_POST,1);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
    curl_setopt($ch,CURLOPT_HTTPHEADER,array('Content-type : text/plain','Content-Length:' . filesize($filename),'Authorization: Bearer ' . getAccessToken($credentials))
    );

    $postResult = curl_exec($ch);
    curl_close($ch);

    return json_decode($postResult,true);
}

==========================================

更新的代码(添加代码的问题,但仍然在驱动器中遇到Untitle.pdf问题)

==========================================

<?PHP

$GAPIS = 'https://www.googleapis.COM/';
$GAPIS_AUTH = $GAPIS . 'auth/';
$GOAUTH = 'https://accounts.google.com/o/oauth2/';

$CLIENT_ID = '709846732498-xxxxxxxx';
$CLIENT_SECRET = 'XXXXXXXXXXXXXX';
$REDIRECT_URI = 'http' . ($_SERVER['SERVER_PORT'] == 80 ? '' : 's') . '://' . $_SERVER['SERVER_NAME'] . $_SERVER['SCRIPT_NAME'];
$SCOPES = array($GAPIS_AUTH . 'drive',$GAPIS_AUTH . 'drive.file',$GAPIS_AUTH . 'userinfo.email',$GAPIS_AUTH . 'userinfo.PRofile');
$Store_PATH = 'credentials.json';

function uploadFile($credentials,file_get_contents($filename));
    curl_setopt($ch,array('Content-Type : application/pdf',true);
}

function getStoredCredentials($path)
{

    $credentials = json_decode(file_get_contents($path),true);

    if (isset($credentials['refresh_token']))
        return $credentials;

    $expire_date = new DateTime();
    $expire_date->setTimestamp($credentials['created']);
    $expire_date->add(new DateInterval('PT' . $credentials['expires_in'] . 'S'));

    $current_time = new DateTime();

    if ($current_time->getTimestamp() >= $expire_date->getTimestamp())
    {
        $credentials = null;
        unlink($path);
    }

    return $credentials;
}

function storeCredentials($path,$credentials)
{

    $credentials['created'] = (new DateTime())->getTimestamp();
    file_put_contents($path,json_encode($credentials));
    return $credentials;
}

function requestauthcode()
{

    global $GOAUTH,$CLIENT_ID,$REDIRECT_URI,$SCOPES;
    $url = sprintf($GOAUTH . 'auth?scope=%s&amp;redirect_uri=%s&response_type=code&client_id=%s&approval_prompt=force&access_type=offline',urlencode(implode(' ',$SCOPES)),urlencode($REDIRECT_URI),urlencode($CLIENT_ID)
    );
    header('Location:' . $url);
}

function requestAccessToken($access_code)
{

    global $GOAUTH,$CLIENT_SECRET,$REDIRECT_URI;
    $url = $GOAUTH . 'token';
    $post_fields = 'code=' . $access_code . '&client_id=' . urlencode($CLIENT_ID) . '&client_secret=' . urlencode($CLIENT_SECRET)
            . '&redirect_uri=' . urlencode($REDIRECT_URI) . '&grant_type=authorization_code';

    $ch = curl_init();
    curl_setopt($ch,$post_fields);
    curl_setopt($ch,true);

    curl_setopt($ch,$url);

    $result = curl_exec($ch);

    curl_close($ch);

    return json_decode($result,true);
}

function getAccessToken($credentials)
{

    $expire_date = new DateTime();
    $expire_date->setTimestamp($credentials['created']);
    $expire_date->add(new DateInterval('PT' . $credentials['expires_in'] . 'S'));

    $current_time = new DateTime();

    if ($current_time->getTimestamp() >= $expire_date->getTimestamp())
        return $credentials['refresh_token'];
    else
        return $credentials['access_token'];

}

function authenticate()
{

    global $STORE_PATH;

    if (file_exists($STORE_PATH))
        $credentials = getStoredCredentials($STORE_PATH);
    else
        $credentials = null;

    if (!(isset($_GET['code']) || isset($credentials)))
        requestAuthCode();

    if (!isset($credentials))
        $credentials = requestAccessToken($_GET['code']);

    if (isset($credentials) && isset($credentials['access_token']) && !file_exists($STORE_PATH))
        $credentials = storeCredentials($STORE_PATH,$credentials);

    return $credentials;
}

$credentials = authenticate();

$result = uploadFile($credentials,'example.pdf','');

if (!isset($result['id']))
    throw new Exception(print_r($result));
else
    echo 'File copied successfuly (file Id: ' . $result['id'] . ')';

echo '<pre>'; print_r($result);
https://developers.google.com/drive/api/v3/simple-upload,这应该工作:
<?PHP
$ch = curl_init ();
curl_setopt_array ( $ch,array (
        CURLOPT_URL => 'https://www.googleapis.com/upload/drive/v3/files?uploadType=media',CURLOPT_HTTPHEADER => array (
                'Content-Type: application/pdf',// todo: runtime detection?
                'Authorization: Bearer [YOUR_AUTH_TOKEN]' 
        ),CURLOPT_POST => 1,CURLOPT_POSTFIELDS => file_get_contents ( '/path/to/file.pdf' ),CURLOPT_RETURNTRANSFER => 1 
) );
try {
    if (false === ($resp = curl_exec ( $ch ))) {
        throw new \RuntimeException ( 'curl error ' . curl_errno ( $ch ) . ": " . curl_error ( $ch ) );
    }
    $parsed = json_decode ( $resp,true );
    if (! $parsed || $parsed ['code'] !== 200) {
        throw new \RuntimeException ( 'Google Api error: ' . $resp );
    }
} finally{
    curl_close ( $ch );
}
var_dump($resp);

脚本宝典总结

以上是脚本宝典为你收集整理的PHP将PDF上传到Google Drive API全部内容,希望文章能够帮你解决PHP将PDF上传到Google Drive API所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。