Your workflow is unique 👨‍💻 -  tell us how you use Dropbox here.

Forum Discussion

Craig S.28's avatar
Craig S.28
New member | Level 2
9 years ago

Upload failing on iOS9.3 (Expecting a file upload)

Just started getting customer reports that uploads from my app are failing.

Tried it myself and it works ok on iOS9.2 but not on iOS9.3 ?

The error I'm getting from Dropbox is 400 and JSON containing the following:

"Expecting a file upload"

I receive this AFTER apparently uploading the whole file (I see all the callback indications after each lump of data has been sent.)

Not sure if this is related to iOS9.3 or something at the Dropbox end (my app has not changed in years....)

Anyone else seeing the same.

Thanks.

PS: Using the core api v2 and NSURLConnection

 

10 Replies

Replies have been turned off for this discussion
  • Greg-DB's avatar
    Greg-DB
    Icon for Dropbox Community Moderator rankDropbox Community Moderator
    9 years ago

    Can you share some sample code to reproduce the issue? Thanks in advance! 

  • Freddie L.2's avatar
    Freddie L.2
    New member | Level 1
    9 years ago

    Experiencing the same error since this morning (8 AM UTC+01:00 to be exact), nothing changed on our part. We also receive an "Expecting a file upload" on every upload. We are using the API on a Linux PHP system so it probably has nothing to do with iOS.

  • Greg-DB's avatar
    Greg-DB
    Icon for Dropbox Community Moderator rankDropbox Community Moderator
    9 years ago

    Thanks for the additional report Freddie. Can you share the relevant code? That would help us reproduce the track down the issue.

  • Freddie L.2's avatar
    Freddie L.2
    New member | Level 1
    9 years ago

    Here is the object, hope this helps.

    Dropbox_OAuth_PHP Object
    (
    [oAuth:protected] =>
    [authorizeCallbackUrl] =>
    [oauth_token:protected] => *****
    [oauth_token_secret:protected] => *****
    [lastResponse:protected] => Array
    (
    )

    [inFile:protected] =>
    [inFileSize:protected] =>
    [putSupported:protected] =>
    [OAuth] => OAuth Object
    (
    [debug] => 1
    [sslChecks] => 0
    [debugInfo] => Array
    (
    [sbs] => POST&https%3A%2F%2Fapi-content.dropbox.com%2F1%2Ffiles%2Fsandbox%2Fleku%2F%2F&file%3Dtest.txt%26oauth_consumer_key%3D********%26oauth_nonce%3D********%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1459072553%26oauth_token%3D*****%26oauth_version%3D1.0
    [headers_sent] => Content-Type: multipart/form-data; boundary=R50hrfBj5JYyfR3vF3wR96GPCC9Fd2q2pVMERvEaOE3D8LZTgLLbRpNwXek3
    [headers_recv] => HTTP/1.1 400 Bad Request
    Server: nginx
    Date: Sun, 27 Mar 2016 09:55:54 GMT
    Content-Type: application/json
    Connection: close
    X-Dropbox-Request-Id: 059d14f9ba8fbae16e903f2eaa271fe6
    X-Robots-Tag: noindex, nofollow, noimageindex
    [body_sent] => --R50hrfBj5JYyfR3vF3wR96GPCC9Fd2q2pVMERvEaOE3D8LZTgLLbRpNwXek3
    Content-Disposition: form-data; name=file; filename=test.txt
    Content-type: application/octet-stream

    roelandtest
    --R50hrfBj5JYyfR3vF3wR96GPCC9Fd2q2pVMERvEaOE3D8LZTgLLbRpNwXek3--
    [body_recv] => {"error": {"file": "Expecting a file upload"}}
    )

    )

    )

  • Craig S.28's avatar
    Craig S.28
    New member | Level 2
    9 years ago

    I found the issue - and it looks the same as reported by Freddie also. 

    For some installs I am using OAuth1 and the POST /1/files/dropbox/ method to upload. This doesn't seem to work anymore.

    For other installs I am using the (recommended) OAuth2 and PUT /1/files_put/dropbox method to upload. This works ok.

    The reason I do things differently for different installs is that I use the (unsupported?) dbapi-2:// URL method to launch the Dropbox app (if installed) in order to get it to authorise the user. It then returns me the OAuth1 fields. I guess I could use OAuth1 and the files_put method, but I could get that to work and it always worked the old way.

    So my conclusion is that Dropbox have stopped supporting OAuth1 and the POST /1/files/dropbox method recently? Or perhaps they stopped supporting it a while ago and it's only now that it's actually stopped working? Nothing to do with iOS9.3 or even iOS.

     

  • Freddie L.2's avatar
    Freddie L.2
    New member | Level 1
    9 years ago

    We've resolved the issue by using cURL instead of PHP to communicate and this works as well. We are still using OAuth1 though. It appears Dropbox changed something that causes this to happen since both Craig and I didn't change anything and it suddenly stopped working. It's weird though that there are not that many complaints/solutions for this problem on the internet (so far).

  • Greg-DB's avatar
    Greg-DB
    Icon for Dropbox Community Moderator rankDropbox Community Moderator
    9 years ago

    Thanks for the additional information, it's very helpful.

    The /1/files (POST) endpoint is an old upload method on the Core API, a.k.a. API v1. That endpoint is technically supported, and it looks like its behavior did change, which we're looking in to. However, we do strongly recommend using /1/files_put instead, as it's generally easier to implement and debug. Most apps use this endpoint instead.

    Further, API v1, including both of these upload endpoints, supports both OAuth 1 and OAuth 2, with OAuth 2 being preferred.

    The dbapi-2:// URL scheme on iOS isn't directly related to this. That's an undocumented URL scheme used by the official iOS Core SDK to handle the OAuth app authorization on iOS. We generally don't recommend using that manually, as it's not documented. If you do use it though, it will return a normal OAuth 1 access token to your app. You can also get OAuth 2 tokens from OAuth 1 tokens using /oauth2/token_from_oauth1.

  • Craig S.28's avatar
    Craig S.28
    New member | Level 2
    9 years ago

    I've updated my app to use the files_put method just gotta wait for Apple approval now :-(

    Thanks for the info regarding converting OAuth1 to 2 tokens - didn't know that!

  • Greg-DB's avatar
    Greg-DB
    Icon for Dropbox Community Moderator rankDropbox Community Moderator
    9 years ago

    The /files (POST) endpoint should be working again now. Please let me know if you're still seeing any issues.

  • Freddie L.2's avatar
    Freddie L.2
    New member | Level 1
    9 years ago

    We will be using cURL for now on and will not be testing the previous way. Fixing this was a pain and messed up our Easter holiday.

About Dropbox API Support and Feedback

Node avatar for Dropbox API Support and Feedback
Get help with the Dropbox API from fellow developers and experts.

The Dropbox Community team is active from Monday to Friday. We try to respond to you as soon as we can, usually within 2 hours.

If you need more help you can view your support options (expected response time for an email or ticket is 24 hours), or contact us on X, Facebook or Instagram.

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!