Dropbox API Support & Feedback
Find help with the Dropbox API from other developers.
Hi,
I am getting the error
DropboxBadInputError[{ ErrorContent = "Error in call to API function \"files/upload_session/finish_batch\": request body: entries.cursor: missing required field 'session_id'"; RequestId = 0af1f37eb6e9ebc3e7ea0695db52c593; StatusCode = 400; UserMessage = nil; }];
And
"DropboxClientError[{\n NSError = \"Error Domain=NSCocoaErrorDomain Code=3840 \\\"Garbage at end.\\\" UserInfo={NSDebugDescription=Garbage at end.}\";
Search for the
[[DBClientsManager authorizedClient].filesRoutes batchUploadFiles:uploadFilesUrlsToCommitInfo queue:nil
inside the code.
I posted the entire method because I was worried that some part of the method maybe affecting the the batch upload.
The begin upload method works like this
1) it finds the photos that are present in the dropbox,
2) it compares it with photos present in the app,
3) then it deletes photos and other files that are in dropbox that are not present in the app or need to be deleted
4) Finally through batchupload it uploads all the photos that are not present into dropbox.
I really need help to fix this , been searching through the internet and trying different approaches but can't find an answer. Hopping someone can help
Update:(easier to implement code for anyone who wants to help)
Here is the entire code
https://github.com/git-tyl/WineCellarProblemCode/blob/master/problemUploadingDropboxCode.m
Thanks Greg for helping.
I've edited the code to be easily tested, so you can lift it and put it in your app. All you need to do is:
1) In the documents directory of the iphone app make a photo and call it MainPhoto.db //yes change the extension to .db, this is to repiclicate the db file i transfer in the app
2) Next in the documents directory make a folder called photos, add about 20 or so pngs// you can just use cmd-d to duplicate one photo many times
3)Once you do that you should be able to run the method, this method will have "Garbage at end of file" then further use of this method will cause session_id errors
In addition, I've updated the dropbox api to 3.2 in the app, but the problems still occurs.
Here is the entire code
https://github.com/git-tyl/WineCellarProblemCode/blob/master/problemUploadingDropboxCode.m
You were right, it was the completetion code being put into the progressblock. Its now working. Many thanks.
I've updated the new code
I'm actually receiving the same error, but I've got the correct code in the response block (I think). It doesn't seem to happen on the first batch upload call during a run, but the second upload attempt seems to fail pretty consistently. Here's my code, if it helps.
[self.fileRoutes batchUploadFiles:filesToUpload queue:self.fileUploadQueue progressBlock:^(int64_t uploaded, int64_t uploadedTotal, int64_t expectedToUploadTotal) { if (fileSize.intValue > 0) { float progress = (float) uploadedTotal / fileSize.longLongValue; photo.uploadProgress = progress; } } responseBlock:^(NSDictionary<NSURL *, DBFILESUploadSessionFinishBatchResultEntry *> *fileUrlsToBatchResultEntries, DBASYNCPollError *finishBatchRouteError, DBRequestError *finishBatchRequestError, NSDictionary<NSURL *, DBRequestError *> *fileUrlsToRequestErrors) { DBFILESUploadSessionFinishBatchResultEntry *result = fileUrlsToBatchResultEntries[srcPath]; if (result.isSuccess) { [self uploadedFile:destPath from:srcPath.absoluteString metadata:result.success]; } else { NSMutableDictionary *userInfo = [[NSMutableDictionary new] autorelease]; userInfo[@"path"] = srcPath.absoluteString; if (fileUrlsToRequestErrors) { NSMutableDictionary<NSURL *, NSString *> *errors = [[NSMutableDictionary new] autorelease]; for (NSURL *key in fileUrlsToRequestErrors.allKeys) { errors[key] = fileUrlsToRequestErrors[key].errorContent; } userInfo[@"fileErrors"] = errors; } if (finishBatchRouteError) { userInfo[@"routeError"] = finishBatchRouteError.description; } if (finishBatchRequestError) { userInfo[@"requestError"] = finishBatchRequestError.errorContent; } // TODO Handle conflicts here if (result.failure.isPath){ if (result.failure.path.isConflict) { // TODO Handle This DLog(@"Conflicting filename: %@, %@", photo.filename, result.failure.path.conflict) } } NSError *err = [NSError errorWithDomain:@"my.app" code:0 userInfo:userInfo]; [self uploadFileFailedWithError:err]; } }];
Hi there!
If you need more help you can view your support options (expected response time for a ticket is 24 hours), or contact us on X or Facebook.
For more info on available support options for your Dropbox plan, see this article.
If you found the answer to your question in this Community thread, please 'like' the post to say thanks and to let us know it was useful!