И вот
Я пытался создать PHP-скрипт для загрузки файлов в корневой каталог моего onedrive в течение двух недель.
РЕДАКТИРОВАТЬ: попробуйте без SDK Graph, но с Curl
но с Graph это не сработало..... поэтому я попробую с Curl. теперь я получаю еще один сбой, но аутентификация. работает отлично.
вот скрипт загрузки небольших файлов:
$createSessionUrl = "https://api.onedrive.com/v1.0/me/drive/ ... oadSession";
$headers = [
"Authorization: Bearer $accessToken",
"Content-Type: application/json"
];
$postData = json_encode([
'item' => [
'@microsoft.graph.conflictBehavior' => 'rename',
'name' => $fileName
]
]);
$ch = curl_init($createSessionUrl);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
$responseArray = json_decode($response, true);
if ($httpCode >= 200 && $httpCode < 300) {
return $responseArray;
} else {
echo "Failed to create upload session: HTTP $httpCode - " . json_encode($responseArray);
return null;
}
не удалось:
Failed to upload small file: HTTP 400 - {"error":{"code":"invalidRequest","message":"API not found","innerError":{"date":"2024-05-23T12:04:53","request-id":"ea8707ae-5b1e-4092-84f9-7f429f85a270","client-request-id":"ea8707ae-5b1e-4092-84f9-7f429f85a270"}}}.
Запрос на скручивание выглядит так:
cURL Request: Array ( => https://graph.microsoft.com/v1.0/me ... rl-get-onl
Загрузите большие файлы (более 10 МБ) на onedrive через PHP. РЕДАКТИРОВАТЬ: попробуйте CURL, получите только BadRequest. ⇐ Php
Кемеровские программисты php общаются здесь
1716466222
Anonymous
И вот
Я пытался создать PHP-скрипт для загрузки файлов в корневой каталог моего onedrive в течение двух недель.
РЕДАКТИРОВАТЬ: попробуйте без SDK Graph, но с Curl
но с Graph это не сработало..... поэтому я попробую с Curl. теперь я получаю еще один сбой, но аутентификация. работает отлично.
вот скрипт загрузки небольших файлов:
$createSessionUrl = "https://api.onedrive.com/v1.0/me/drive/root:/$fileName:/createUploadSession";
$headers = [
"Authorization: Bearer $accessToken",
"Content-Type: application/json"
];
$postData = json_encode([
'item' => [
'@microsoft.graph.conflictBehavior' => 'rename',
'name' => $fileName
]
]);
$ch = curl_init($createSessionUrl);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
$responseArray = json_decode($response, true);
if ($httpCode >= 200 && $httpCode < 300) {
return $responseArray;
} else {
echo "Failed to create upload session: HTTP $httpCode - " . json_encode($responseArray);
return null;
}
не удалось:
Failed to upload small file: HTTP 400 - {"error":{"code":"invalidRequest","message":"API not found","innerError":{"date":"2024-05-23T12:04:53","request-id":"ea8707ae-5b1e-4092-84f9-7f429f85a270","client-request-id":"ea8707ae-5b1e-4092-84f9-7f429f85a270"}}}.
Запрос на скручивание выглядит так:
cURL Request: Array ( [url] => https://graph.microsoft.com/v1.0/me/drive/root:/test.txt:/content [method] => POST [headers] => Array ( [0] => Authorization: Bearer sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssotPaUrLgzwdYbJFVIutDFcYjYfD9WJa9iYQOmC8zkwAib/LsdI4uDJlKmMslDNBnExCTzWts/oAEhPbIRjiy4YtybZ4gf/NE+hJ1np+8XSibOiNc4sz/Jh4+wN5FRfcQTz+sKqZqvCCGRTfEnii9jgPvse69OYU5egkVLKzhK3F0jkJDpoEfCVnckJBboAqlBa99BCNq0P/ZEyq+Wv1U8EqeiIrtjagV+Imdj4ePUBPPX6mOAtTSuc12Ld7wmnBm3nmTkbGng0eOe5LM1htkZxYEnZCv5ggYgE+bbcjwkYBess6F/XBilST7izxm5qImHT7EkkQUeZKx+bmAzH0FJ65YN772D5vXqZ8sWOd4mVx4rYz95qlkmF6ImyTbuiHvoFOzGrg/xlhRVRU7Y0AwBC09XY24TWEwOCoHhL1hc+Ff6uf26yp2wyGzT9CZ0gWep0bIswSgobuANkNapMxuxfAMap0TRVTIpSEDUsGgouYOo0q2ff/Lv2N9EUN6dKJGR6Ag== [1] => Content-Type: application/octet-stream ) [body] => dsfdf )
СТАРЫЙ: Я использую SDK github, https://github.com/microsoftgraph/msgraph-sdk-php.
Я также пытался сделайте это с помощью руководства по PHP от Microsoft. https://learn.microsoft.com/en-us/graph/tutorials/php?tabs=aad&tutorial-step=1
но это заканчивается без загрузки файла.
Я некоторое время искал здесь по форуму и нашел кое-что многообещающее. В любом случае, это все равно не работает
Это сообщение об ошибке:
Uncaught League\OAuth2\Client\Provider\Exception\IdentityProviderException: invalid_grant
require_once 'vendor/autoload.php';
require_once 'vendor/guzzlehttp/psr7/vendor/autoload.php';
use GuzzleHttp\Client;
use GuzzleHttp\Handler\MockHandler;
use GuzzleHttp\Psr7\Response;
use League\OAuth2\Client\Token\AccessToken;
use Microsoft\Graph\Core\Authentication\GraphPhpLeagueAccessTokenProvider;
use Microsoft\Graph\Core\Authentication\GraphPhpLeagueAuthenticationProvider;
use Microsoft\Graph\Core\NationalCloud;
use Microsoft\Graph\GraphRequestAdapter;
use Microsoft\Graph\GraphServiceClient;
use Microsoft\Kiota\Abstractions\Authentication\AnonymousAuthenticationProvider;
use Microsoft\Kiota\Authentication\Cache\InMemoryAccessTokenCache;
use Microsoft\Kiota\Authentication\Oauth\AuthorizationCodeContext;
use Microsoft\Kiota\Authentication\Oauth\ClientCredentialContext;
use Microsoft\Kiota\Http\GuzzleRequestAdapter;
use PHPUnit\Framework\TestCase;
use Psr\Http\Message\RequestInterface;
use Psr\Http\Client\NetworkExceptionInterface;
use GuzzleHttp\Psr7;
use GuzzleHttp\Psr7\Stream;
use Microsoft\Graph\Model\Message;
use Microsoft\Graph\Core\Tasks\LargeFileUploadTask;
use Microsoft\Graph\Generated\Drives\Item\Items\Item\CreateUploadSession\CreateUploadSessionPostRequestBody as DriveItemCreateUploadSessionPostRequestBody;
use Microsoft\Graph\Generated\Models;
use Microsoft\Graph\Generated\Users\Item\Messages\Item\Attachments\CreateUploadSession\CreateUploadSessionPostRequestBody as AttachmentCreateUploadSessionPostRequestBody;
$client_id = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx4";
$client_secret = "xxxxxxxxxxxxxxxxxxraqR";
$tenat = "common";
//Authenticate
$guzzle = new \GuzzleHttp\Client();
$url = "https://login.microsoftonline.com/" . $tenat . "/oauth2/v2.0/token";
$token = json_decode($guzzle->post($url, array('form_params' => array('client_id' => $client_id, 'client_secret' => $client_secret, 'scope' => 'https://graph.microsoft.com/.default', 'grant_type' => 'client_credentials')))->getBody()->getContents());
$access_token = $token->access_token;
echo $access_token;
//ServerClient
$tokenRequestContext = new AuthorizationCodeContext('common',$client_id,$client_secret,$access_token ,'http://localhost/test1/src/test3/test.php');
$scopes = ['Files.ReadWrite.All'];
$graphServiceClient = new GraphServiceClient($tokenRequestContext, $scopes);
//upload
function uploadFileToOneDrive(GraphServiceClient $graphClient, string $filePath, string $itemPath): void {
//
// Create a file stream
$file = Psr7\Utils::streamFor(fopen($filePath, 'r'));
// Create the upload session request
$uploadProperties = new Models\DriveItemUploadableProperties();
$uploadProperties->setAdditionalData([
'@microsoft.graph.conflictBehavior' => 'replace'
]);
// use Microsoft\Graph\Generated\Drives\Item\Items\Item\CreateUploadSession\CreateUploadSessionPostRequestBody
// as DriveItemCreateUploadSessionPostRequestBody;
$uploadSessionRequest = new DriveItemCreateUploadSessionPostRequestBody();
$uploadSessionRequest->setItem($uploadProperties);
// Create the upload session
/** @var Models\Drive $drive */
$drive = $graphClient->me()->drive()->get()->wait();
$uploadSession = $graphClient->drives()
->byDriveId($drive->getId())
->items()
->byDriveItemId('root:/'.$itemPath.':')
->createUploadSession()
->post($uploadSessionRequest)
->wait();
$largeFileUpload = new LargeFileUploadTask($uploadSession, $graphClient->getRequestAdapter(), $file);
$totalSize = $file->getSize();
$progress = fn($prog) => print('Uploaded '.$prog[1].' of '.$totalSize.' bytes'.PHP_EOL);
try {
$largeFileUpload->upload($progress)->wait();
} catch (\Psr\Http\Client\NetworkExceptionInterface $ex) {
$largeFileUpload->resume()->wait();
}
//
// Added to remove warning about unused function
if (is_null($uploadSession)) {
LargeFileUpload::resumeUpload($largeFileUpload);
}
}
uploadFileToOneDrive($graphServiceClient, "test.txt", "test.txt");
Подробнее здесь: [url]https://stackoverflow.com/questions/78442787/upload-large-files-more-than-10mb-to-onedrive-via-php-edit-try-curl-get-onl[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия