Я хочу поделиться файлами диска Google с идентификатором электронной почты другого пользователя учетной записи Google с помощью API Google Диска PHP. Иногда этот человек обменивается файлом, и он может просматривать / читать этот файл на своем диске, но иногда я не могу поделиться с ним файлом. Я не могу найти причину этого несоответствия. Если файл не используется, я получаю следующую ошибку:
An error occurred: {
"error": {
"errors": [
{
"domain": "global",
"reason": "internalError",
"message": "Internal Error. User message: \"An internal error has occurred which prevented the sharing of these item(s): 1544784669.1.junkfile.pdf\""
}
],
"code": 500,
"message": "Internal Error. User message: \"An internal error has occurred which prevented the sharing of these item(s): 1544784669.1.junkfile.pdf\""
}
}
@Tanaike Да, я хочу поделиться файлом с пользователем «A», и он успешно отправляется, и пользователь «A» может получить доступ к этому файлу также со своего диска. Но предположим, что я хочу снова поделиться еще одним файлом с тем же пользователем, тогда он не предоставляется этому пользователю, это означает, что пользователь получает {"code": 500, "message": "Internal Error. User message: \" Internal error произошла, что помешало совместному использованию этих элементов} эта ошибка. Почему это не согласовано, есть ли какая-то конфигурация, которую мне не хватает или что?
Спасибо за ответ. Заметил, что ответ уже опубликован. Думаю, это решит ваш вопрос.






Если вы пытаетесь загрузить файл и одновременно поделиться им с другой учетной записью, вам нужно подождать несколько секунд, прежде чем выполнять запрос разрешений. Я мог бы добиться этого в своем приложении для Android следующим образом (используя Kotlin и RxJava):
private fun uploadFile(accessToken: String, fileName: String, fileContent: String) {
Observable.just(Unit)
.subscribeOn(Schedulers.io())
.subscribe({
val httpTransport = NetHttpTransport()
val credential = Credential.Builder(BearerToken.authorizationHeaderAccessMethod())
.build()
credential.accessToken = accessToken
val service = Drive.Builder(httpTransport, JacksonFactory.getDefaultInstance(),
credential)
.setApplicationName("Your App Name")
.build()
val fileMetadata = File()
fileMetadata.name = fileName
val localFile = createFile(fileName, fileContent)
val mediaContent = InputStreamContent("text/plain", localFile);
val file = service.files().create(fileMetadata, mediaContent)
.setFields("id")
.execute()
Log.d(TAG, "File ID: " + file.id)
Observable.interval(10, TimeUnit.SECONDS)
.take(1)
.subscribe {
val callback = object : JsonBatchCallback<Permission>() {
@Throws(IOException::class)
override fun onFailure(e: GoogleJsonError, responseHeaders: HttpHeaders) {
Log.d(TAG, "error: ${e.message}")
}
@Throws(IOException::class)
override fun onSuccess(permission: Permission, responseHeaders: HttpHeaders) {
Log.d(TAG, "Permission ID: ${permission.id}")
}
}
val batch = service.batch()
val userPermission = Permission()
.setType("user")
.setRole("writer")
.setEmailAddress("[email protected]")
service.permissions().create(file.id, userPermission)
.setFields("id")
.queue(batch, callback)
batch.execute()
}
}) {
Log.d(TAG, "error: ", it)
}
}
private fun createFile(fileName: String, fileContent: String): InputStream? {
try {
val outputStreamWriter = OutputStreamWriter(
application.openFileOutput(fileName, Context.MODE_PRIVATE))
outputStreamWriter.write(fileContent)
outputStreamWriter.close()
return application.openFileInput(fileName)
} catch (e: IOException) {
Log.e(TAG, "File write failed: ", e)
}
return null
}
Я использую PHP для API Google Dive. Итак, вы хоть представляете, как работает php google drive api?
API Google Диска в конечном итоге одинаков для Android или Интернета, поэтому я думаю, что то же самое может случиться и с вами. Но это твоя проблема? Загружаете файл и делитесь им? Или вы пытаетесь поделиться файлом, который уже загружен в вашу учетную запись Google Диска?
У меня есть ответ на свой вопрос: после загрузки файла на диск мы получим $ file_google_id, и мы должны подождать 10 секунд, используя sleep (10), тогда только мы сможем поделиться этим файлом с кем угодно.
sleep(10);
$permission=insertPermission($service,$file_google_id,$email_id,'user','reader');
function insertPermission($service,$fileId,$value,$type,$role) {
$newPermission = new Google_Service_Drive_Permission();
$newPermission->setEmailAddress($value);
$newPermission->setType($type);
$newPermission->setRole($role);
try {
return $service->permissions->create($fileId, $newPermission);
} catch (Exception $e) {
print "An error occurred: " . $e->getMessage();
}
return NULL;
}
Спасибо
Не могли бы вы предоставить подробную информацию о
sometimes I'm unable to share file with him.? Несмотря на то, что вы предоставили доступ к файлу пользователю «A», к файлу не предоставили общий доступ, и пользователь «A» не смог получить к нему доступ. Я правильно понимаю?