Я хочу создать файл MIME с открытым / текстовым типом, используя PHP и Google-API для Google Диска в Google App Engine.
Когда я использую:
'mimeType' => 'text/plain',
Контент не записывается в файл.
Если я использую:
'mimeType' => 'application/octet-stream', 'uploadType' => 'media'
содержимое добавляется в файл.
Этот код из документации Google :
Показывает строку кода для mimeType 'text / plain'
'mimeType' => 'text/plain',
Но, опять же, если я использую это, в файл не добавляется содержимое. Каковы настройки для создания простого текстового файла и добавления контента?
Мой полный код:
<?php /* You can NOT see the files created in a Service Account without doing some special stuff. You need to set some kind of permissions, and then you can see the files in your SHARED WITH ME section of Google Drive http://stackoverflow.com/questions/25302794/google-drive-api-services-account-view-uploaded-files-to-google-drive-using-java*/ session_start(); require_once realpath(dirname(__FILE__) . '/google-api-php-client/src/Google/autoload.php'); $client_id = 'your Client ID'; //Client ID $service_account_name = 'account name'; //Email Address $key_file_location = 'fileName.p12'; //key.p12 $theDateTime = date("Ymd h:i:sa"); echo "indexService - " . $theDateTime . '<br>'; $client = new Google_Client(); $client->setClientId($client_id); //$client->addScope("https://www.googleapis.com/service/drive"); $service = new Google_Service_Drive($client); if (isset($_SESSION['service_token'])) { $client->setAccessToken($_SESSION['service_token']); } $key = file_get_contents($key_file_location); //echo '$key: ' . $key. '<br>'; $cred = new Google_Auth_AssertionCredentials( $service_account_name, array('https://www.googleapis.com/auth/drive'), $key ); $client->setAssertionCredentials($cred); if ($client->getAuth()->isAccessTokenExpired()) { $client->getAuth()->refreshTokenWithAssertion($cred); } $_SESSION['service_token'] = $client->getAccessToken(); //Begin of code that is same for both service and web // If signed in, upload if ($client->getAccessToken()) { echo 'Got access token <br>'; $fileData = "This is the file Content: " . $theDateTime; $fileName = 'User123_Date'; echo '$fileName: ' . $fileName . '<br>'; echo '$fileData: ' . $fileData . '<br>'; //Upload file with metadata $file = new Google_Service_Drive_DriveFile(); $file->setTitle($fileName); $result2 = $service->files->insert( $file, array( 'data' => $fileData, 'mimeType' => 'application/octet-stream', 'uploadType' => 'media' ) ); $theId = $result2->getId(); $downloadUrl = $result2->getDownloadUrl(); echo 'the ID: ' . $theId . '<br>'; echo "Title: " . $result2->getTitle() . '<br>'; echo "MIME type: " . $result2->getMimeType() . '<br>'; echo '$downloadUrl: ' . $downloadUrl . '<br>'; // get the file info as a check try { echo 'try part <br>'; $result3 = $service->files->get($theId); echo "Title: " . $result3->getTitle() . '<br>'; //echo "Description: " . $result3->getDescription() . '<br>'; echo "MIME type: " . $result3->getMimeType() . '<br>'; } catch (Exception $e) { echo "An error occurred: " . $e->getMessage() . '<br>'; }; if ($downloadUrl) { echo 'there is a download url <br>'; $request = new Google_Http_Request($downloadUrl, 'GET', null, null); $httpRequest = $service->getClient()->getAuth()->authenticatedRequest($request); if ($httpRequest->getResponseHttpCode() == 200) { $theContentIs = $httpRequest->getResponseBody(); echo '$theContentIs: ' . $theContentIs . '<br>'; } else { // An error occurred. echo 'an error occurred getting file contents <br>'; } } else { // The file doesn't have any content stored on Drive. echo 'The file doesnt have any content stored on Drive. <br>'; } } echo "File Upload - Uploading a small file".'<br>'; ?> <?php echo 'end of code';
Если вам нужен текстовый файл с этим MimeType, создайте его с PHP не непосредственно на Диске. Вот почему этот миметик не распознается. fopen () может сделать трюк.