Forum Discussion

devolajide's avatar
devolajide
New member | Level 2
7 years ago

Dropbox API problem

I am developing an ap using Flutter framework. My app involves me using dropbox api to upload folders from my phone to my dropbox account. The problem I am having now is an error with content-type in the API. What content-type can I use for dropbox in my flutter app?

 

Thanks

4 Replies

  • h21's avatar
    h21
    Explorer | Level 4
    7 years ago

    Here's the code

     String token = API().token;
          var map = new Map<String, String>();
          map["Dropbox-API-Arg"] = '{"path": "/EasyBay/Project1/image.txt"}';
    
          Map<String, String> requestHeaders = {
            'Content-type': 'application/octet-stream', 
            'User-Agent': 'api-explorer-client',
           // 'Dropbox-API-Arg': '{"path": "/EasyBay/Project1/image.txt"}',
            'Authorization': 'Bearer' + token
          };
    
          var response = await http.post(new API().upload_link, body: map, headers: requestHeaders);
          print(response.statusCode);
          return parseChat(response.body);

    While this is the error

    Spoiler
    E/flutter ( 4498): [ERROR:flutter/lib/ui/ui_dart_state.cc(148)] Unhandled Exception: Bad state: Cannot set the body fields of a Request with content-type "application/octet-stream".
    E/flutter ( 4498): #0 Request.bodyFields= (package:http/src/request.dart:124:7)
    E/flutter ( 4498): #1 BaseClient._sendUnstreamed (package:http/src/base_client.dart:163:17)
    E/flutter ( 4498): <asynchronous suspension>
    E/flutter ( 4498): #2 BaseClient.post (package:http/src/base_client.dart:54:7)
    E/flutter ( 4498): #3 post.<anonymous closure> (package:http/http.dart:70:16)
    E/flutter ( 4498): #4 _withClient (package:http/http.dart:166:20)
    E/flutter ( 4498): <asynchronous suspension>
    E/flutter ( 4498): #5 post (package:http/http.dart:69:5)
    E/flutter ( 4498): #6 uploadFolder (package:eastbay/src/Api/uploadApi.dart:25:28)
    E/flutter ( 4498): <asynchronous suspension>
    E/flutter ( 4498): #7 _UploadFolderState.Upload (package:eastbay/src/ui/upload.dart:43:19)
    E/flutter ( 4498): #8 _UploadFolderState.build.<anonymous closure> (package:eastbay/src/ui/upload.dart:28:15)
    E/flutter ( 4498): #9 _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:654:14)
    E/flutter ( 4498): #10 _InkResponseState.build.<anonymous closure> (package:flutter/src/material/ink_well.dart:729:32)
    E/flutter ( 4498): #11 GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:182:24)
    E/flutter ( 4498): #12 TapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:365:11)
    E/flutter ( 4498): #13 TapGestureRecognizer.handlePrimaryPointer (package:flutter/src/gestures/tap.dart:275:7)
    E/flutter ( 4498): #14 PrimaryPointerGestureRecognizer.handleEvent (package:flutter/src/gestures/recognizer.dart:455:9)
    E/flutter ( 4498): #15 PointerRouter._dispatch (package:flutter/src/gestures/pointer_router.dart:75:13)
    E/flutter ( 4498): #16 PointerRouter.route (package:flutter/src/gestures/pointer_router.dart:102:11)
    E/flutter ( 4498): #17 GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:218:19)
    E/flutter ( 4498): #18 GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:198:22)
    E/flutter ( 4498): #19 GestureBinding._handlePointerEvent (package:flutter/src/gestures/binding.dart:156:7)
    E/flutter ( 4498): #20 GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:102:7)
    E/flutter ( 4498): #21 GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:86:7)
    E/flutter ( 4498): #22 _rootRunUnary (dart:async/zone.dart:1136:13)
    E/flutter ( 4498): #23 _CustomZone.runUnary (dart:async/zone.dart:1029:19)
    E/flutter ( 4498): #24 _CustomZone.runUnaryGuarded (dart:async/zone.dart:931:7)
    E/flutter ( 4498): #25 _invoke1 (dart:ui/hooks.dart:263:10)
    E/flutter ( 4498): #26 _dispatchPointerDataPacket (dart:ui/hooks.dart:172:5)
    E/flutter ( 4498):
  • Greg-DB's avatar
    Greg-DB
    Icon for Dropbox Community Moderator rankDropbox Community Moderator
    7 years ago

    Thanks! It looks like the error message is:

    "Bad state: Cannot set the body fields of a Request with content-type "application/octet-stream"."

    That's not an error message from the Dropbox API itself. It appears to be an error message from the HTTP client you're using. It looks like the problem is that you're attempting to set the "body" parameter to be a Map value, which isn't supported in this case.

    When uploading to Dropbox via an upload API endpoint, the request body should contain the file data. In your code you're attempting to set it to a Map contain the API parameters, which wouldn't work anyway.

    You should update your code to send the file data in the request body, and set the API parameters for the API call in a "Dropbox-API-Arg" request header, which would be in the "requestHeaders" variable you currently have (like the commented out line).

  • h21's avatar
    h21
    Explorer | Level 4
    7 years ago

    Thanks. I will check it out

About Dropbox API Support & Feedback

Node avatar for Dropbox API Support & Feedback
Find help with the Dropbox API from other developers.

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!