Загрузка и загрузка файлов на Onedrive через мой сайт с PHP - PullRequest
0 голосов
/ 16 февраля 2020

Я хочу, чтобы люди с моего сайта могли загружать файл в указанную папку c onedrive в моей учетной записи onedrive, давайте назовем эту папку «textdocuments». Я также хочу, чтобы люди могли загружать файл из указанной папки onedrive c "textdocuments".

Так что в основном моя папка onedrive будет действовать как хранилище для файлов, которые люди загружают на мой сайт, что другие люди могут тогда загрузить. До сих пор я зарегистрировал свое приложение в Microsoft Azure, но я, боже любви, не могу найти ничего о том, как загружать / скачивать файлы через PHP.

1 Ответ

0 голосов
/ 17 февраля 2020

Я предлагаю вам использовать msgraph-sdk- php для создания приложения.

Я создаю базовый c образец для вашей справки: PHP -MS-Graph . Чтобы запустить пример, вам нужно иметь одну активную учетную запись O365, которая может использовать службу OneDrive.

И затем следовать учебному руководству по readme msgraph-sdk- php по адресу:

  1. Зарегистрируйте вашу заявку
  2. Добавьте необходимые разрешения и предоставьте согласие администратора для своего арендатора, если это необходимо. В этом примере вы можете добавить Files.ReadWrite делегированное разрешение.
  3. Используйте свой собственный идентификатор клиента, идентификатор приложения, секретный код и учетные данные в php.

Загрузить . php

<?php
require __DIR__ . '/vendor/autoload.php';

use Microsoft\Graph\Graph;
use Microsoft\Graph\Model;
$guzzle = new \GuzzleHttp\Client();
$tenantId = 'your_tenanet_id, e4c9ab4e-****-****-****-230ba2a757fb';
$clientId = 'your_app_id_registered_in_portal, dc175b96-****-****-****-ea03e56da5e7';
$clientSecret = 'app_key_generated_in_portal, /pGggH************************Zr732';
$url = 'https://login.microsoftonline.com/' . $tenantId . '/oauth2/token';
$user_token = json_decode($guzzle->post($url, [
    'form_params' => [
        'client_id' => $clientId,
        'client_secret' => $clientSecret,
        'resource' => 'https://graph.microsoft.com/',
        'grant_type' => 'password',
        'username' => 'your_user_id, jack@***.onmcirosoft.com', 
        'password' => 'your_password'
    ],
])->getBody()->getContents());
$user_accessToken = $user_token->access_token;

$graph = new Graph();
$graph->setAccessToken($user_accessToken);

$graph->createRequest("PUT", "/me/drive/root/children/".$_FILES["fileToUpload"]["name"]."/content")
      ->upload($_FILES["fileToUpload"]["tmp_name"]);

// Save to uploads folder on server
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file);
echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has been uploaded.";

?>

Загрузка. php

<?php
require __DIR__ . '/vendor/autoload.php';

use Microsoft\Graph\Graph;
use Microsoft\Graph\Model;

$target_dir = "downloads/";

$guzzle = new \GuzzleHttp\Client();
$tenantId = 'your_tenanet_id, e4c9ab4e-****-****-****-230ba2a757fb';
$clientId = 'your_app_id_registered_in_portal, dc175b96-****-****-****-ea03e56da5e7';
$clientSecret = 'app_key_generated_in_portal, /pGggH************************Zr732';
$url = 'https://login.microsoftonline.com/' . $tenantId . '/oauth2/token';
$user_token = json_decode($guzzle->post($url, [
    'form_params' => [
        'client_id' => $clientId,
        'client_secret' => $clientSecret,
        'resource' => 'https://graph.microsoft.com/',
        'grant_type' => 'password',
        'username' => 'your_user_id, jack@***.onmcirosoft.com', 
        'password' => 'your_password'
    ],
])->getBody()->getContents());
$user_accessToken = $user_token->access_token;

$graph = new Graph();
$graph->setAccessToken($user_accessToken);

// Download to server
$target_dir = 'downloads/';
$graph->createRequest("GET", "/me/drive/root:/Capture.JPG:/content")
    ->download($target_dir.'Capture.JPG');

// Send download response to client
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.basename($target_dir.'Capture.JPG').'"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($target_dir.'Capture.JPG'));
flush(); 
readfile($target_dir.'Capture.JPG');
die();

?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...