Никогда не получайте загрузку данных в Google API для iOS -- iphone поле с участием ios поле с участием objective-c поле с участием ipad поле с участием google-drive-api пол Связанный проблема

Never getting uploading data progress in google API for ios


7
vote

проблема

русский

Я использую Googledrive API в своем приложении, чтобы загрузить файлы из моего приложения. До сих пор мне удалось найти хорошие результаты для загрузки всех типов файлов.

Я последовал за Пример Google для загрузки файлов.

Я пытаюсь показать прогресс, зависящий от размера файла при загрузке. Я прошел через многочисленные классы в указанном виде Google, но не так много результата.

Шаги с последующими, чтобы получить прогресс загрузки файла:

Я нашел ниже метода в gtlservices.m

 <код> - (void)setUploadProgressBlock:(GTLServiceUploadProgressBlock)block {   [uploadProgressBlock_ autorelease];   uploadProgressBlock_ = [block copy];    if (uploadProgressBlock_) {     // As above, we need the fetcher to call us back when bytes are sent.     SEL sentDataSel = @selector(objectFetcher:didSendBytes:totalBytesSent:totalBytesExpectedToSend:);     [[self objectFetcher] setSentDataSelector:sentDataSel];   } }   

После этого в myviewcontroller.m написано как это

 <код>  [self.driveService setUploadProgressBlock:^(GTLServiceTicket *ticket, unsigned long long numberOfBytesRead, unsigned long long dataLength) {   NSLog(@"uploading");   }];   

Выше NSLog никогда не оставляют из-за этого, я не могу получить загруженные байты данных. Отладка я сталкиваюсь с помощью uploadprogloglock _ всегда показывая ноль. Может быть, это Resone My Block Handler не выполняется.

Пожалуйста, предложите мне, если бы я сделал любую ошибку, чтобы разобраться. Если у кого-нибудь есть идея получить байты данных, загруженные в Google Drive для файла, пожалуйста, предложите мне. Ваши предложения более полезны для моей работы.

Спасибо заранее.

Консолидированный ответ, принимая наши ребята предложения:

Вот код, чтобы получить информацию о прогрессе загрузки

 <код> GTLServiceTicket *uploadTicket= [self.driveService executeQuery:query completionHandler:^(GTLServiceTicket *ticket,GTLDriveFile *updatedFile,NSError *error)         {             if (error == nil)             {                 [self.delegate completedFileUploadingToGoogleDrive];                 NSError *fileDeletionError=nil;                 [[NSFileManager defaultManager] removeItemAtPath:absalutePath error:&fileDeletionError];             } else             {                 [self.delegate errorOccoredWhileUploadingToGoogleDrive:error];             }         }];                  [uploadTicket setUploadProgressBlock:^(GTLServiceTicket *ticket, unsigned long long totalBytesWritten, unsigned long long totalBytesExpectedToWrite) {             [self.delegate uploadedFileInfoInKB:(float)totalBytesExpectedToWrite/1024 and:(float)totalBytesWritten/1024];         }];   

Счастливое кодирование !!

Английский оригинал

I am using GoogleDrive API in my application to upload files from my application. So far I succeeded and finding good results for uploading all types of files.

I followed Google example to upload files.

I am trying to show the progress, dependent on file size, while uploading. I have gone through many classes in the google given example code but there isn't much result.

Steps followed to get the file uploading progress :

I have found below method In GTLServices.m

- (void)setUploadProgressBlock:(GTLServiceUploadProgressBlock)block {   [uploadProgressBlock_ autorelease];   uploadProgressBlock_ = [block copy];    if (uploadProgressBlock_) {     // As above, we need the fetcher to call us back when bytes are sent.     SEL sentDataSel = @selector(objectFetcher:didSendBytes:totalBytesSent:totalBytesExpectedToSend:);     [[self objectFetcher] setSentDataSelector:sentDataSel];   } } 

After that in MyViewController.m written like this

 [self.driveService setUploadProgressBlock:^(GTLServiceTicket *ticket, unsigned long long numberOfBytesRead, unsigned long long dataLength) {   NSLog(@"uploading");   }]; 

Above NSLog never getting excused because of this I am unable to get uploaded data bytes. By debugging I come across as uploadProgressBlock_ always showing nil. may be this resone my block handler not getting executed.

Please suggest me if I did any mistake to work it out. If any one have idea to get the bytes of data uploaded to google drive for a file please suggest me. Your suggestions are more useful to my work.

Thanks in advance.

Consolidated Answer by taking our folks suggestions:

Here is the code to get upload progress information

GTLServiceTicket *uploadTicket= [self.driveService executeQuery:query completionHandler:^(GTLServiceTicket *ticket,GTLDriveFile *updatedFile,NSError *error)         {             if (error == nil)             {                 [self.delegate completedFileUploadingToGoogleDrive];                 NSError *fileDeletionError=nil;                 [[NSFileManager defaultManager] removeItemAtPath:absalutePath error:&fileDeletionError];             } else             {                 [self.delegate errorOccoredWhileUploadingToGoogleDrive:error];             }         }];                  [uploadTicket setUploadProgressBlock:^(GTLServiceTicket *ticket, unsigned long long totalBytesWritten, unsigned long long totalBytesExpectedToWrite) {             [self.delegate uploadedFileInfoInKB:(float)totalBytesExpectedToWrite/1024 and:(float)totalBytesWritten/1024];         }]; 

Happy Coding!!

</div
              
     
     

Список ответов

8
 
vote
vote
Лучший ответ
 
<Р> мне удалось с помощью блока загрузки обратного вызова ... Назначают его в <код> GTLServiceTicket объект вы получите от <код> executeQuery метод.

<сильный> Пример:

 <код> GTLServiceTicket *uploadTicket =  [self.driveService executeQuery:query  completionHandler:^(GTLServiceTicket *ticket,  GTLDriveFile *insertedFile, NSError *error)                                             { // completion                                             }];           [uploadTicket setUploadProgressBlock:^(GTLServiceTicket *ticket, unsigned long long totalBytesWritten, unsigned long long totalBytesExpectedToWrite)           {              // progress          }   
 

I have succeeded in using the upload block callback... assign it to the GTLServiceTicket object you obtain from the executeQuery method.

Sample:

GTLServiceTicket *uploadTicket =  [self.driveService executeQuery:query  completionHandler:^(GTLServiceTicket *ticket,  GTLDriveFile *insertedFile, NSError *error)                                             { // completion                                             }];           [uploadTicket setUploadProgressBlock:^(GTLServiceTicket *ticket, unsigned long long totalBytesWritten, unsigned long long totalBytesExpectedToWrite)           {              // progress          } 
</div
 
 
1
 
vote
<Р> Недавно я использовал ответ FabioL, но в Swift 2.3, выглядит следующим образом
 <код>     let serviceTicket = service.executeQuery(query, completionHandler:  { (ticket, insertedFile , error) -> Void in         let myFile = insertedFile as? GTLDriveFile          if error == nil {             alert.title = "Image Uploaded"             alert.message = "100%"             if progressView != nil {                 progressView!.progress = 1             }         } else {             print("An Error Occurred! (error)")             alert.title = "There was an error uploading"         }     })      //update UI on progress     serviceTicket.uploadProgressBlock = {(ticket, written, total) in         if progressView != nil {             let progressCalc: Float = (Float(written)/Float(total))             alert.message = "(progressCalc*100)%"             progressView!.progress = progressCalc         }     }   
<Р> Как происходит загрузка он обновляет ProgressView и по завершении он меняет название и послание к UIAlertViewController
 

I recently used FabioL's answer but in Swift 2.3, it looks like this

    let serviceTicket = service.executeQuery(query, completionHandler:  { (ticket, insertedFile , error) -> Void in         let myFile = insertedFile as? GTLDriveFile          if error == nil {             alert.title = "Image Uploaded"             alert.message = "100%"             if progressView != nil {                 progressView!.progress = 1             }         } else {             print("An Error Occurred! (error)")             alert.title = "There was an error uploading"         }     })      //update UI on progress     serviceTicket.uploadProgressBlock = {(ticket, written, total) in         if progressView != nil {             let progressCalc: Float = (Float(written)/Float(total))             alert.message = "(progressCalc*100)%"             progressView!.progress = progressCalc         }     } 

As the upload happens it updates a ProgressView and on completion it changes the title and message of an UIAlertViewController

</div
 
 
0
 
vote
<Р> Я подозреваю, что это, возможно, придется делать с отсутствием <код> NS_BLOCKS_AVAILABLE #define был установлен режим, в вашем проекте. Если это так, то вместо того, чтобы использовать <код> -setUploadProgressBlock: , я думаю, вам нужно определить метод, как:
 <код>         - (void)ticket:(GTLServiceTicket *)ticket  hasDeliveredByteCount:(unsigned long long)numberOfBytesRead       ofTotalByteCount:(unsigned long long)dataLength;   
<Р> А затем указать его в качестве обратного вызова для использования в вашем коде, как:
 <код>  [self.driveService setUploadProgressSelector:@selector(ticket:hasDeliveredByteCount:ofTotalByteCount:)];   
<Р> (Поиск <код> uploadProgressSelector в GTLService.h;. Есть комментарий, что там может быть полезно)
 

I suspect it may have to do with the lack of the NS_BLOCKS_AVAILABLE #define having been set in your project. If so, then instead of using -setUploadProgressBlock:, I think you need to define a method like:

        - (void)ticket:(GTLServiceTicket *)ticket  hasDeliveredByteCount:(unsigned long long)numberOfBytesRead       ofTotalByteCount:(unsigned long long)dataLength; 

And then specify it as the callback to use in your code, like:

 [self.driveService setUploadProgressSelector:@selector(ticket:hasDeliveredByteCount:ofTotalByteCount:)]; 

(Search for uploadProgressSelector in GTLService.h; there's a comment there that may be helpful.)

</div
 
 

Связанный проблема

0  Resumableupload с Google Drive API V2 .NET  ( Resumableupload with google drive api v2 net ) 
Я пытаюсь загрузить файл в Google Drive и отслеживать прогресс загрузки. Я использую .NET с API V2. Я использовал метод Driveservice.files.insert, который д...

8  Как использовать Google Picker для доступа к файлам, используя область «DRIVE.FILE»?  ( How do i use google picker to access files using the drive file scope ) 
Мой веб-приложение Google интегрированное в интеграцию Google, работает нормально с <t:RequestSecurityToken …>0 Scope, но с использованием такой широкой обл...

0  Google Drive Reftert / Обновить ранее выбованный файл  ( Google drive refetch refresh the previously fetched file ) 
Мы используем Google picker для получения файла в нашем приложении. Раньше это была однажды, но мы заметили, что, поскольку мы не допускаем манипулированием...

0  Google Drive API 500 Нулевые ошибки при копировании  ( Google drive api 500 null errors when copying ) 
Я получаю сообщение об ошибке (100% от времени) при копировании общего файла, используя последнюю версию библиотеки PHP. И я получаю тот же ответ через API Ex...

1  Загрузить презентации .pptx в Google Drive SDK  ( Upload presentations pptx in google drive sdk ) 
Когда я зарабатываю презентации .pptx, используя SDK, журналы показывают, что все байты отправляются, но чтобы открыть их в Google Drive Ths Slides появляется...

5  ReganalArgumentException: попытка установить иностранное cookie при загрузке электронной таблицы Google через API?  ( Illegalargumentexception trying to set foreign cookie while downloading google ) 
Я пытаюсь загрузить электронную таблицу Google, используя Download API версии 3 (v3). Я получаю «Java.lang.illegalargumentException: попытка установить сообще...

1  Google Drive: публиковать сайт  ( Google drive publish website ) 
Я создал небольшую HTML-страницу с помощью Angularjs, Twitter Bootstrap. Чтобы проверить функциональные возможности в разных браузерах и разных экранах, я хот...

30  Предупреждение: невозможно изменить разрешения для всех:  ( Warning unable to change permissions for everybody ) 
При запуске образец Java QuickStart Attps://developers.google.com/drive/web/quickstart/java?hl=hu"> https://developers.google.com/drive/ Web / QuickStart / Ja...

47  Могу ли я нажать / тянуть прямо из моего Google Drive в Интернете?  ( Can i push pull directly from my google drive online ) 
Есть методы синхронизации моего локального репозитория Git на мой Google Drive через приложение Windows Google через приложение Windows Google, но мне было ин...

2  Есть ли способ использовать аппаратные ресурсы Google Colab, не жертвуя моим редактором выбора?  ( Is there a way to utilize google colab hardware resources without sacrificing my ) 
Я ищу способ написать свой код в терминальной среде (в Vim или Emacs), и все же (временно) используйте аппаратные ресурсы Google Colab (например, GPU или TPU)...

1  Экспорт Google Drive / Docs файлов в Google Cloud Storage  ( Exporting google drive docs files to google cloud storage ) 
Нам нужно сканировать файлы с Google DLP. Однако сканирование Google DLP поддерживается только в GCS. ( https://cloud.google.com/blog/products/identive-securi...

5  Google Drive - Как перечислить все файлы в указанной папке  ( Google drive how to list all files in a specified folder ) 
Привет, я застрял здесь с этой ситуацией, я пробовал ряд разных подходов, но я не могу получить то, что я после. Ситуация: У меня большое количество файлов ...

2  Где хранить ключ P12 для аутентификации службы учетной записи в приложении MVC с помощью API Google Drive  ( Where to store p12 key for service account authentication in mvc app using googl ) 
Я хотел бы создать приложение MVC в Visual Studio, который подключается к Google Drive через службу. прямо сейчас я пытаюсь понять документацию и примеры зд...

10  Пусть анонимные пользователи загружают файлы на мой Google Drive, используя Google Drive SDK  ( Let anonymous users upload files to my google drive using the google drive sdk ) 
Я создаю веб-приложение, где мне нужно позволить пользователям загружать файлы. Я хочу хранить файлы, загруженные всеми пользователями в «Мой» центральный дис...

11  Добавление Google Objective-C API 'GTL' в проект iPhone  ( Adding google objective c api gtl to iphone project ) 
Как добавить API Google Drive в свой проект iPhone, чтобы я мог использовать его? До сих пор я перетащил проект GTL в мой текущий проект приложений (так что...

2  Как ограничить изображение, используемое в теге <IMG> в веб-приложении к «Кто-нибудь в корпорации»?  ( How to restrict an image used in an img tag in a web app to anyone within cor ) 
Я могу ограничить использование веб-приложения, но я не могу ограничить доступ к изображениям, упомянутым в & lt; img & gt; тег. Теперь я разрабатываю веб-п...

-1  Список файлов внутри папки Google Drive в таблицах  ( List files inside a google drive folder in spreadsheets ) 
У меня есть папка: https://drive.google.com/drive/Folders/ 1_70q4bpqrohcqu4euleeepuxbr0hpfhbb Эта папка имеет несколько файлов внутри. Я хочу создать Goog...

0  Google Spreadshient Secure Client Sharing Email Sharing?  ( Google spreadsheet secure client email sharing ) 
Я в настоящее время использую библиотеку GSPread Python для записи данных в электронную таблицу Google. Тем не менее, электронная таблица Google безопасна, и ...

11  Google Forms: Отправить данные в электронную таблицу  ( Google forms send data to spreadsheet ) 
Как я могу отправить данные из веб-файлов на электронную таблицу Google? Я сделал форму с Google Drive, но чтобы получить пользовательские CSS, мне нужно скоп...

2  Призывая API Google Drive из Nodejs Backend с авторизацией с переднего конца  ( Calling google drive api from nodejs backend with authorisation from front end ) 
У меня в настоящее время есть приложение, которое требует от меня позвонить в API Google Drive с клиента и сервера. Прямо сейчас я уже аутентифицировал пользо...

0  Как сохранить свои данные в облаке?  ( How to save my data in a cloud ) 
Я не знаю, возможно ли это, но я хотел бы сохранить некоторые данные о моем веб-сайте, например, изображения и документы в облаке, как Dropbox или Google Driv...

0  Сумма компенсации от MS Excel в Google Spreadsheet  ( Sum offset from ms excel to google spreadsheet ) 
Я сделал документ Excel из MS2013 (XLSX), который вычисляет все цифры над ним, поскольку я хочу, чтобы он динамически вычислял и настроить собственную формулу...

0  Как получить данные Excel из URL в листы Google, используя скрипт Apps Google?  ( How to get the excel data from a url into google sheets using google apps script ) 
Следуйте за вопросом к этому вопросу - Как исправить ошибку URL URL с помощью URLFetchApp? Это URL для загрузки данных Excel из: <Код> https://corvo-repor...

0  Как я могу проверить статус аутентификации Google в моем приложении iOS (Swift 5)  ( How can i check for google authentication status in my ios app swift 5 ) 
Когда пользователь аутентифицируется в Google, я хочу записать статус пользователя где-то. Когда пользователь нажимает на ячейку, я хочу, чтобы пользователь а...

4  Как получить идентификатор для папки в Google Drive в iOS?  ( How to get the identifier for a folder in google drive in ios ) 
Мне нужно загрузить файл в определенную папку на диске Google, используя мое приложение iOS. Я знаю имя папки, но для того, чтобы загрузить его в определенную...

Связанный проблема

0  Resumableupload с Google Drive API V2 .NET 
8  Как использовать Google Picker для доступа к файлам, используя область «DRIVE.FILE»? 
0  Google Drive Reftert / Обновить ранее выбованный файл 
0  Google Drive API 500 Нулевые ошибки при копировании 
1  Загрузить презентации .pptx в Google Drive SDK 
5  ReganalArgumentException: попытка установить иностранное cookie при загрузке электронной таблицы Google через API? 
1  Google Drive: публиковать сайт 
30  Предупреждение: невозможно изменить разрешения для всех: 
47  Могу ли я нажать / тянуть прямо из моего Google Drive в Интернете? 
2  Есть ли способ использовать аппаратные ресурсы Google Colab, не жертвуя моим редактором выбора? 
1  Экспорт Google Drive / Docs файлов в Google Cloud Storage 
5  Google Drive - Как перечислить все файлы в указанной папке 
2  Где хранить ключ P12 для аутентификации службы учетной записи в приложении MVC с помощью API Google Drive 
10  Пусть анонимные пользователи загружают файлы на мой Google Drive, используя Google Drive SDK 
11  Добавление Google Objective-C API 'GTL' в проект iPhone 
2  Как ограничить изображение, используемое в теге <IMG> в веб-приложении к «Кто-нибудь в корпорации»? 
-1  Список файлов внутри папки Google Drive в таблицах 
0  Google Spreadshient Secure Client Sharing Email Sharing? 
11  Google Forms: Отправить данные в электронную таблицу 
2  Призывая API Google Drive из Nodejs Backend с авторизацией с переднего конца 
0  Как сохранить свои данные в облаке? 
0  Сумма компенсации от MS Excel в Google Spreadsheet 
0  Как получить данные Excel из URL в листы Google, используя скрипт Apps Google? 
0  Как я могу проверить статус аутентификации Google в моем приложении iOS (Swift 5) 
4  Как получить идентификатор для папки в Google Drive в iOS?