Dropbox Upload and Dropbox Download Methods

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

Dropbox Upload and Dropbox Download Methods

4D Tech mailing list
A few weeks ago I posted a message asking if anyone had written code to upload and download files to Dropbox. Got no responses other than “the API looks like it is easy to do”.

Today I spent time writing a couple of methods to allow uploading and downloading files from Dropbox with native 4D commands using the Dropbox v2 API. And people were right, it was not too difficult. The v2 API is implemented very nicely and documented fairly well. I found a few documentation errors, but they were easily dealt with.

4D v17 provided all the commands needed to make it all work with very little code. Doing this with NTK would easily take 3 times the amount of code.

My current needs are very simple. I want to upload a file to Dropbox and replace any existing file if necessary. Dropbox maximum file size for a single upload operation is 150MB. That’s more than enough for my needs. But if you want to upload larger files — up to the Dropbox API max size of 350MB — you’ll have to implement an “upload session”.

Download requirements are also simple. Just download a file from a Dropbox path to a path on your hard drive. Dropbox paths are in POSIX format.

The Dropbox v2 API uses OAuth 2, but that basically boils down to creating an “App” and getting an “access token” the you use with all the API calls. I’ll leave it up to you to go read the docs and set that all up. It’s easy.

The code uses dot notation, but with a little work it could be ported to work with older versions for 4D probably back to v14. Code is cross-platform without any extra effort needed.

Here is me giving back to the group so you don’t have to spend a day developing and testing code. If others implement more of the Dropbox v2 API, please post it to the iNUG to help others.

  // ===========================================
  // PROJECT METHOD: Dropbox_UploadFile

  // PARAMETERS: $0 = results object
  // $1 = dropbox access token
  // $2 = dropbox path
  // $3 = file path

  // DESCRIPTION: Uploads a file to Dropbox using the v2 API
  // Max upload size in a single transfer is 150MB.

  // https://www.dropbox.com/developers/documentation/http/documentation

  // CREATED BY: Tim Nevels, Innovative Solutions ©2019
  // DATE: 3/8/19
  // LAST MODIFIED:
  // ============================================

C_OBJECT($0;$results_o)
C_TEXT($1;$dropboxAccessToken_t)
C_TEXT($2;$dropboxPath_t)
C_TEXT($3;$filePath_t)
$dropboxAccessToken_t:=$1
$dropboxPath_t:=$2
$filePath_t:=$3

  // declare local variables
C_TEXT($headerValue_t;$requestURL_t;$response_t)
C_LONGINT($statusCode_l)
C_BLOB($content_x)
C_OBJECT($headerValue_o;$response_o)
ARRAY TEXT($headerName_at;0)
ARRAY TEXT($headerValue_at;0)

  // setup http header
APPEND TO ARRAY($headerName_at;"Authorization")
APPEND TO ARRAY($headerValue_at;"Bearer "+$dropboxAccessToken_t)

  // set upload header values
APPEND TO ARRAY($headerName_at;"Content-Type")
APPEND TO ARRAY($headerValue_at;"application/octet-stream”)

APPEND TO ARRAY($headerName_at;"Dropbox-API-Arg")
$headerValue_o:=New object(\
"path";$dropboxPath_t;\
"mode";"add";\
"autorename";False)  // overwrite any existing file
$headerValue_t:=JSON Stringify($headerValue_o)
APPEND TO ARRAY($headerValue_at;$headerValue_t)

  // set url
$requestURL_t:="https://content.dropboxapi.com/2/files/upload"

  // load the file
DOCUMENT TO BLOB($filePath_t;$content_x)

  // check file size
If (BLOB size($content_x)>(1024*1024*149))  // over 149MB, too close to limit to try
        $results_o:=New object(\
        "success";False;\
        "statusCode";408;\
        "errorMessage";"File is to large to upload in one piece")
Else
          // upload the file
        HTTP SET OPTION(HTTP compression;1)  // do compression
        HTTP SET OPTION(HTTP timeout;60*10)  // 10 minute timeout
        $statusCode_l:=HTTP Request(HTTP POST method;$requestURL_t;$content_x;$response_t;$headerName_at;$headerValue_at)
       
          // build results object
        Case of
                : ($statusCode_l=200)  // upload was a success
                        $results_o:=New object(\
                        "success";True;\
                        "statusCode";$statusCode_l;\
                        "errorMessage";"File upload was successful")
                       
                : ($statusCode_l=409)  // endpoint specific problem
                        $response_o:=JSON Parse($response_t)
                        $results_o:=New object(\
                        "success";False;\
                        "statusCode";$statusCode_l;\
                        "errorMessage";$response_o.error_summary)
                       
                Else   // other problem
                        $results_o:=New object(\
                        "success";False;\
                        "statusCode";$statusCode_l;\
                        "errorMessage";"HTTP Request failed"+Char(Carriage return)+Char(Carriage return)+\
                        $response_t)
        End case
End if

  // return results
$0:=$results_o


  // ===========================================
  // PROJECT METHOD: Dropbox_DownloadFile

  // PARAMETERS:  $0 = results object
  // $1 = dropbox access token
  // $2 = dropbox path
  // $3 = file path

  // DESCRIPTION: Downloads a file from Dropbox using the v2 API

  // https://www.dropbox.com/developers/documentation/http/documentation

  // CREATED BY: Tim Nevels, Innovative Solutions ©2019
  // DATE: 3/8/19
  // LAST MODIFIED:
  // ============================================

C_OBJECT($0;$results_o)
C_TEXT($1;$dropboxAccessToken_t)
C_TEXT($2;$dropboxPath_t)
C_TEXT($3;$filePath_t)
$dropboxAccessToken_t:=$1
$dropboxPath_t:=$2
$filePath_t:=$3

  // declare local variables
C_TEXT($headerValue_t;$requestURL_t;$content_t;$response_t)
C_LONGINT($statusCode_l)
C_BLOB($response_x)
C_OBJECT($response_o;$headerValue_o)
ARRAY TEXT($headerName_at;0)
ARRAY TEXT($headerValue_at;0)

  // setup http header
APPEND TO ARRAY($headerName_at;"Authorization")
APPEND TO ARRAY($headerValue_at;"Bearer "+$dropboxAccessToken_t)

  // set download header value
APPEND TO ARRAY($headerName_at;"Dropbox-API-Arg")
$headerValue_o:=New object(\
"path";$dropboxPath_t)
$headerValue_t:=JSON Stringify($headerValue_o)
APPEND TO ARRAY($headerValue_at;$headerValue_t)

  // set url
$requestURL_t:="https://content.dropboxapi.com/2/files/download"

  // download the file
HTTP SET OPTION(HTTP compression;1)  // do compression
HTTP SET OPTION(HTTP timeout;60*10)  // 10 minute timeout
$statusCode_l:=HTTP Request(HTTP POST method;$requestURL_t;$content_t;$response_x;$headerName_at;$headerValue_at)

  // build results object
Case of
        : ($statusCode_l=200)  // download was a success
                $results_o:=New object(\
                "success";True;\
                "statusCode";$statusCode_l;\
                "errorMessage";"File download was successful")
               
        : ($statusCode_l=409)  // endpoint specific problem
                $response_t:=BLOB to text($response_x;UTF8 text without length)
                $response_o:=JSON Parse($response_t)
                $results_o:=New object(\
                "success";False;\
                "statusCode";$statusCode_l;\
                "errorMessage";$response_o.error_summary)
               
        Else   // other problem
                $results_o:=New object(\
                "success";False;\
                "statusCode";$statusCode_l;\
                "errorMessage";"HTTP Request failed"+Char(Carriage return)+Char(Carriage return)+\
                $response_t)
End case

  // convert response to a file
If ($statusCode_l=200)
        BLOB TO DOCUMENT($filePath_t;$response_x)
End if

  // return results
$0:=$results_o



Tim

*****************************************
Tim Nevels
Innovative Solutions
785-749-3444
[hidden email]
*****************************************

**********************************************************************
4D Internet Users Group (4D iNUG)
Archive:  http://lists.4d.com/archives.html
Options: https://lists.4d.com/mailman/options/4d_tech
Unsub:  mailto:[hidden email]
**********************************************************************
Reply | Threaded
Open this post in threaded view
|

Re: Dropbox Upload and Dropbox Download Methods

4D Tech mailing list
Tim,
Thanks for sharing this.

On Fri, Mar 8, 2019 at 3:55 PM Tim Nevels via 4D_Tech <[hidden email]>
wrote:

> A few weeks ago I posted a message asking if anyone had written code to
> upload and download files to Dropbox. Got no responses other than “the API
> looks like it is easy to do”.
>
> Today I spent time writing a couple of methods to allow uploading and
> downloading files from Dropbox with native 4D commands using the Dropbox v2
> API. And people were right, it was not too difficult. The v2 API is
> implemented very nicely and documented fairly well. I found a few
> documentation errors, but they were easily dealt with.
>
> 4D v17 provided all the commands needed to make it all work with very
> little code. Doing this with NTK would easily take 3 times the amount of
> code.
>
> My current needs are very simple. I want to upload a file to Dropbox and
> replace any existing file if necessary. Dropbox maximum file size for a
> single upload operation is 150MB. That’s more than enough for my needs. But
> if you want to upload larger files — up to the Dropbox API max size of
> 350MB — you’ll have to implement an “upload session”.
>
> Download requirements are also simple. Just download a file from a Dropbox
> path to a path on your hard drive. Dropbox paths are in POSIX format.
>
> The Dropbox v2 API uses OAuth 2, but that basically boils down to creating
> an “App” and getting an “access token” the you use with all the API calls.
> I’ll leave it up to you to go read the docs and set that all up. It’s easy.
>
> The code uses dot notation, but with a little work it could be ported to
> work with older versions for 4D probably back to v14. Code is
> cross-platform without any extra effort needed.
>
> Here is me giving back to the group so you don’t have to spend a day
> developing and testing code. If others implement more of the Dropbox v2
> API, please post it to the iNUG to help others.
>
>   // ===========================================
>   // PROJECT METHOD: Dropbox_UploadFile
>
>   // PARAMETERS: $0 = results object
>   // $1 = dropbox access token
>   // $2 = dropbox path
>   // $3 = file path
>
>   // DESCRIPTION: Uploads a file to Dropbox using the v2 API
>   // Max upload size in a single transfer is 150MB.
>
>   // https://www.dropbox.com/developers/documentation/http/documentation
>
>   // CREATED BY: Tim Nevels, Innovative Solutions ©2019
>   // DATE: 3/8/19
>   // LAST MODIFIED:
>   // ============================================
>
> C_OBJECT($0;$results_o)
> C_TEXT($1;$dropboxAccessToken_t)
> C_TEXT($2;$dropboxPath_t)
> C_TEXT($3;$filePath_t)
> $dropboxAccessToken_t:=$1
> $dropboxPath_t:=$2
> $filePath_t:=$3
>
>   // declare local variables
> C_TEXT($headerValue_t;$requestURL_t;$response_t)
> C_LONGINT($statusCode_l)
> C_BLOB($content_x)
> C_OBJECT($headerValue_o;$response_o)
> ARRAY TEXT($headerName_at;0)
> ARRAY TEXT($headerValue_at;0)
>
>   // setup http header
> APPEND TO ARRAY($headerName_at;"Authorization")
> APPEND TO ARRAY($headerValue_at;"Bearer "+$dropboxAccessToken_t)
>
>   // set upload header values
> APPEND TO ARRAY($headerName_at;"Content-Type")
> APPEND TO ARRAY($headerValue_at;"application/octet-stream”)
>
> APPEND TO ARRAY($headerName_at;"Dropbox-API-Arg")
> $headerValue_o:=New object(\
> "path";$dropboxPath_t;\
> "mode";"add";\
> "autorename";False)  // overwrite any existing file
> $headerValue_t:=JSON Stringify($headerValue_o)
> APPEND TO ARRAY($headerValue_at;$headerValue_t)
>
>   // set url
> $requestURL_t:="https://content.dropboxapi.com/2/files/upload"
>
>   // load the file
> DOCUMENT TO BLOB($filePath_t;$content_x)
>
>   // check file size
> If (BLOB size($content_x)>(1024*1024*149))  // over 149MB, too close to
> limit to try
>         $results_o:=New object(\
>         "success";False;\
>         "statusCode";408;\
>         "errorMessage";"File is to large to upload in one piece")
> Else
>           // upload the file
>         HTTP SET OPTION(HTTP compression;1)  // do compression
>         HTTP SET OPTION(HTTP timeout;60*10)  // 10 minute timeout
>         $statusCode_l:=HTTP Request(HTTP POST
> method;$requestURL_t;$content_x;$response_t;$headerName_at;$headerValue_at)
>
>           // build results object
>         Case of
>                 : ($statusCode_l=200)  // upload was a success
>                         $results_o:=New object(\
>                         "success";True;\
>                         "statusCode";$statusCode_l;\
>                         "errorMessage";"File upload was successful")
>
>                 : ($statusCode_l=409)  // endpoint specific problem
>                         $response_o:=JSON Parse($response_t)
>                         $results_o:=New object(\
>                         "success";False;\
>                         "statusCode";$statusCode_l;\
>                         "errorMessage";$response_o.error_summary)
>
>                 Else   // other problem
>                         $results_o:=New object(\
>                         "success";False;\
>                         "statusCode";$statusCode_l;\
>                         "errorMessage";"HTTP Request failed"+Char(Carriage
> return)+Char(Carriage return)+\
>                         $response_t)
>         End case
> End if
>
>   // return results
> $0:=$results_o
>
>
>   // ===========================================
>   // PROJECT METHOD: Dropbox_DownloadFile
>
>   // PARAMETERS:  $0 = results object
>   // $1 = dropbox access token
>   // $2 = dropbox path
>   // $3 = file path
>
>   // DESCRIPTION: Downloads a file from Dropbox using the v2 API
>
>   // https://www.dropbox.com/developers/documentation/http/documentation
>
>   // CREATED BY: Tim Nevels, Innovative Solutions ©2019
>   // DATE: 3/8/19
>   // LAST MODIFIED:
>   // ============================================
>
> C_OBJECT($0;$results_o)
> C_TEXT($1;$dropboxAccessToken_t)
> C_TEXT($2;$dropboxPath_t)
> C_TEXT($3;$filePath_t)
> $dropboxAccessToken_t:=$1
> $dropboxPath_t:=$2
> $filePath_t:=$3
>
>   // declare local variables
> C_TEXT($headerValue_t;$requestURL_t;$content_t;$response_t)
> C_LONGINT($statusCode_l)
> C_BLOB($response_x)
> C_OBJECT($response_o;$headerValue_o)
> ARRAY TEXT($headerName_at;0)
> ARRAY TEXT($headerValue_at;0)
>
>   // setup http header
> APPEND TO ARRAY($headerName_at;"Authorization")
> APPEND TO ARRAY($headerValue_at;"Bearer "+$dropboxAccessToken_t)
>
>   // set download header value
> APPEND TO ARRAY($headerName_at;"Dropbox-API-Arg")
> $headerValue_o:=New object(\
> "path";$dropboxPath_t)
> $headerValue_t:=JSON Stringify($headerValue_o)
> APPEND TO ARRAY($headerValue_at;$headerValue_t)
>
>   // set url
> $requestURL_t:="https://content.dropboxapi.com/2/files/download"
>
>   // download the file
> HTTP SET OPTION(HTTP compression;1)  // do compression
> HTTP SET OPTION(HTTP timeout;60*10)  // 10 minute timeout
> $statusCode_l:=HTTP Request(HTTP POST
> method;$requestURL_t;$content_t;$response_x;$headerName_at;$headerValue_at)
>
>   // build results object
> Case of
>         : ($statusCode_l=200)  // download was a success
>                 $results_o:=New object(\
>                 "success";True;\
>                 "statusCode";$statusCode_l;\
>                 "errorMessage";"File download was successful")
>
>         : ($statusCode_l=409)  // endpoint specific problem
>                 $response_t:=BLOB to text($response_x;UTF8 text without
> length)
>                 $response_o:=JSON Parse($response_t)
>                 $results_o:=New object(\
>                 "success";False;\
>                 "statusCode";$statusCode_l;\
>                 "errorMessage";$response_o.error_summary)
>
>         Else   // other problem
>                 $results_o:=New object(\
>                 "success";False;\
>                 "statusCode";$statusCode_l;\
>                 "errorMessage";"HTTP Request failed"+Char(Carriage
> return)+Char(Carriage return)+\
>                 $response_t)
> End case
>
>   // convert response to a file
> If ($statusCode_l=200)
>         BLOB TO DOCUMENT($filePath_t;$response_x)
> End if
>
>   // return results
> $0:=$results_o
>
>
>
> Tim
>
> *****************************************
> Tim Nevels
> Innovative Solutions
> 785-749-3444
> [hidden email]
> *****************************************
>
> **********************************************************************
> 4D Internet Users Group (4D iNUG)
> Archive:  http://lists.4d.com/archives.html
> Options: https://lists.4d.com/mailman/options/4d_tech
> Unsub:  mailto:[hidden email]
> **********************************************************************



--
Kirk Brooks
San Francisco, CA
=======================

What can be said, can be said clearly,
and what you can’t say, you should shut up about

*Wittgenstein and the Computer *
**********************************************************************
4D Internet Users Group (4D iNUG)
Archive:  http://lists.4d.com/archives.html
Options: https://lists.4d.com/mailman/options/4d_tech
Unsub:  mailto:[hidden email]
**********************************************************************
Reply | Threaded
Open this post in threaded view
|

Re: Dropbox Upload and Dropbox Download Methods

4D Tech mailing list
Tim:

Agree with Kirk — thanks for posting this!

--
Douglas von Roeder
949-336-2902


On Fri, Mar 8, 2019 at 6:12 PM Kirk Brooks via 4D_Tech <[hidden email]>
wrote:

> Tim,
> Thanks for sharing this.
>
> On Fri, Mar 8, 2019 at 3:55 PM Tim Nevels via 4D_Tech <
> [hidden email]>
> wrote:
>
> > A few weeks ago I posted a message asking if anyone had written code to
> > upload and download files to Dropbox. Got no responses other than “the
> API
> > looks like it is easy to do”.
> >
> > Today I spent time writing a couple of methods to allow uploading and
> > downloading files from Dropbox with native 4D commands using the Dropbox
> v2
> > API. And people were right, it was not too difficult. The v2 API is
> > implemented very nicely and documented fairly well. I found a few
> > documentation errors, but they were easily dealt with.
> >
> > 4D v17 provided all the commands needed to make it all work with very
> > little code. Doing this with NTK would easily take 3 times the amount of
> > code.
> >
> > My current needs are very simple. I want to upload a file to Dropbox and
> > replace any existing file if necessary. Dropbox maximum file size for a
> > single upload operation is 150MB. That’s more than enough for my needs.
> But
> > if you want to upload larger files — up to the Dropbox API max size of
> > 350MB — you’ll have to implement an “upload session”.
> >
> > Download requirements are also simple. Just download a file from a
> Dropbox
> > path to a path on your hard drive. Dropbox paths are in POSIX format.
> >
> > The Dropbox v2 API uses OAuth 2, but that basically boils down to
> creating
> > an “App” and getting an “access token” the you use with all the API
> calls.
> > I’ll leave it up to you to go read the docs and set that all up. It’s
> easy.
> >
> > The code uses dot notation, but with a little work it could be ported to
> > work with older versions for 4D probably back to v14. Code is
> > cross-platform without any extra effort needed.
> >
> > Here is me giving back to the group so you don’t have to spend a day
> > developing and testing code. If others implement more of the Dropbox v2
> > API, please post it to the iNUG to help others.
> >
> >   // ===========================================
> >   // PROJECT METHOD: Dropbox_UploadFile
> >
> >   // PARAMETERS: $0 = results object
> >   // $1 = dropbox access token
> >   // $2 = dropbox path
> >   // $3 = file path
> >
> >   // DESCRIPTION: Uploads a file to Dropbox using the v2 API
> >   // Max upload size in a single transfer is 150MB.
> >
> >   // https://www.dropbox.com/developers/documentation/http/documentation
> >
> >   // CREATED BY: Tim Nevels, Innovative Solutions ©2019
> >   // DATE: 3/8/19
> >   // LAST MODIFIED:
> >   // ============================================
> >
> > C_OBJECT($0;$results_o)
> > C_TEXT($1;$dropboxAccessToken_t)
> > C_TEXT($2;$dropboxPath_t)
> > C_TEXT($3;$filePath_t)
> > $dropboxAccessToken_t:=$1
> > $dropboxPath_t:=$2
> > $filePath_t:=$3
> >
> >   // declare local variables
> > C_TEXT($headerValue_t;$requestURL_t;$response_t)
> > C_LONGINT($statusCode_l)
> > C_BLOB($content_x)
> > C_OBJECT($headerValue_o;$response_o)
> > ARRAY TEXT($headerName_at;0)
> > ARRAY TEXT($headerValue_at;0)
> >
> >   // setup http header
> > APPEND TO ARRAY($headerName_at;"Authorization")
> > APPEND TO ARRAY($headerValue_at;"Bearer "+$dropboxAccessToken_t)
> >
> >   // set upload header values
> > APPEND TO ARRAY($headerName_at;"Content-Type")
> > APPEND TO ARRAY($headerValue_at;"application/octet-stream”)
> >
> > APPEND TO ARRAY($headerName_at;"Dropbox-API-Arg")
> > $headerValue_o:=New object(\
> > "path";$dropboxPath_t;\
> > "mode";"add";\
> > "autorename";False)  // overwrite any existing file
> > $headerValue_t:=JSON Stringify($headerValue_o)
> > APPEND TO ARRAY($headerValue_at;$headerValue_t)
> >
> >   // set url
> > $requestURL_t:="https://content.dropboxapi.com/2/files/upload"
> >
> >   // load the file
> > DOCUMENT TO BLOB($filePath_t;$content_x)
> >
> >   // check file size
> > If (BLOB size($content_x)>(1024*1024*149))  // over 149MB, too close to
> > limit to try
> >         $results_o:=New object(\
> >         "success";False;\
> >         "statusCode";408;\
> >         "errorMessage";"File is to large to upload in one piece")
> > Else
> >           // upload the file
> >         HTTP SET OPTION(HTTP compression;1)  // do compression
> >         HTTP SET OPTION(HTTP timeout;60*10)  // 10 minute timeout
> >         $statusCode_l:=HTTP Request(HTTP POST
> >
> method;$requestURL_t;$content_x;$response_t;$headerName_at;$headerValue_at)
> >
> >           // build results object
> >         Case of
> >                 : ($statusCode_l=200)  // upload was a success
> >                         $results_o:=New object(\
> >                         "success";True;\
> >                         "statusCode";$statusCode_l;\
> >                         "errorMessage";"File upload was successful")
> >
> >                 : ($statusCode_l=409)  // endpoint specific problem
> >                         $response_o:=JSON Parse($response_t)
> >                         $results_o:=New object(\
> >                         "success";False;\
> >                         "statusCode";$statusCode_l;\
> >                         "errorMessage";$response_o.error_summary)
> >
> >                 Else   // other problem
> >                         $results_o:=New object(\
> >                         "success";False;\
> >                         "statusCode";$statusCode_l;\
> >                         "errorMessage";"HTTP Request
> failed"+Char(Carriage
> > return)+Char(Carriage return)+\
> >                         $response_t)
> >         End case
> > End if
> >
> >   // return results
> > $0:=$results_o
> >
> >
> >   // ===========================================
> >   // PROJECT METHOD: Dropbox_DownloadFile
> >
> >   // PARAMETERS:  $0 = results object
> >   // $1 = dropbox access token
> >   // $2 = dropbox path
> >   // $3 = file path
> >
> >   // DESCRIPTION: Downloads a file from Dropbox using the v2 API
> >
> >   // https://www.dropbox.com/developers/documentation/http/documentation
> >
> >   // CREATED BY: Tim Nevels, Innovative Solutions ©2019
> >   // DATE: 3/8/19
> >   // LAST MODIFIED:
> >   // ============================================
> >
> > C_OBJECT($0;$results_o)
> > C_TEXT($1;$dropboxAccessToken_t)
> > C_TEXT($2;$dropboxPath_t)
> > C_TEXT($3;$filePath_t)
> > $dropboxAccessToken_t:=$1
> > $dropboxPath_t:=$2
> > $filePath_t:=$3
> >
> >   // declare local variables
> > C_TEXT($headerValue_t;$requestURL_t;$content_t;$response_t)
> > C_LONGINT($statusCode_l)
> > C_BLOB($response_x)
> > C_OBJECT($response_o;$headerValue_o)
> > ARRAY TEXT($headerName_at;0)
> > ARRAY TEXT($headerValue_at;0)
> >
> >   // setup http header
> > APPEND TO ARRAY($headerName_at;"Authorization")
> > APPEND TO ARRAY($headerValue_at;"Bearer "+$dropboxAccessToken_t)
> >
> >   // set download header value
> > APPEND TO ARRAY($headerName_at;"Dropbox-API-Arg")
> > $headerValue_o:=New object(\
> > "path";$dropboxPath_t)
> > $headerValue_t:=JSON Stringify($headerValue_o)
> > APPEND TO ARRAY($headerValue_at;$headerValue_t)
> >
> >   // set url
> > $requestURL_t:="https://content.dropboxapi.com/2/files/download"
> >
> >   // download the file
> > HTTP SET OPTION(HTTP compression;1)  // do compression
> > HTTP SET OPTION(HTTP timeout;60*10)  // 10 minute timeout
> > $statusCode_l:=HTTP Request(HTTP POST
> >
> method;$requestURL_t;$content_t;$response_x;$headerName_at;$headerValue_at)
> >
> >   // build results object
> > Case of
> >         : ($statusCode_l=200)  // download was a success
> >                 $results_o:=New object(\
> >                 "success";True;\
> >                 "statusCode";$statusCode_l;\
> >                 "errorMessage";"File download was successful")
> >
> >         : ($statusCode_l=409)  // endpoint specific problem
> >                 $response_t:=BLOB to text($response_x;UTF8 text without
> > length)
> >                 $response_o:=JSON Parse($response_t)
> >                 $results_o:=New object(\
> >                 "success";False;\
> >                 "statusCode";$statusCode_l;\
> >                 "errorMessage";$response_o.error_summary)
> >
> >         Else   // other problem
> >                 $results_o:=New object(\
> >                 "success";False;\
> >                 "statusCode";$statusCode_l;\
> >                 "errorMessage";"HTTP Request failed"+Char(Carriage
> > return)+Char(Carriage return)+\
> >                 $response_t)
> > End case
> >
> >   // convert response to a file
> > If ($statusCode_l=200)
> >         BLOB TO DOCUMENT($filePath_t;$response_x)
> > End if
> >
> >   // return results
> > $0:=$results_o
> >
> >
> >
> > Tim
> >
> > *****************************************
> > Tim Nevels
> > Innovative Solutions
> > 785-749-3444
> > [hidden email]
> > *****************************************
> >
> > **********************************************************************
> > 4D Internet Users Group (4D iNUG)
> > Archive:  http://lists.4d.com/archives.html
> > Options: https://lists.4d.com/mailman/options/4d_tech
> > Unsub:  mailto:[hidden email]
> > **********************************************************************
>
>
>
> --
> Kirk Brooks
> San Francisco, CA
> =======================
>
> What can be said, can be said clearly,
> and what you can’t say, you should shut up about
>
> *Wittgenstein and the Computer *
> **********************************************************************
> 4D Internet Users Group (4D iNUG)
> Archive:  http://lists.4d.com/archives.html
> Options: https://lists.4d.com/mailman/options/4d_tech
> Unsub:  mailto:[hidden email]
> **********************************************************************
**********************************************************************
4D Internet Users Group (4D iNUG)
Archive:  http://lists.4d.com/archives.html
Options: https://lists.4d.com/mailman/options/4d_tech
Unsub:  mailto:[hidden email]
**********************************************************************
Reply | Threaded
Open this post in threaded view
|

Re: Dropbox Upload and Dropbox Download Methods

4D Tech mailing list
In reply to this post by 4D Tech mailing list
On Mar 10, 2019, at 9:34 AM, Douglas von Roeder wrote:

> Agree with Kirk — thanks for posting this!

The place that does my ftp hosting is killing it, so I needed to find a new ftp host. Then I thought… why not use Dropbox? I’ve got a 1TB of space there that is not being used.

I’m just getting started using it and so far it’s working OK. I did run into an error today when trying to upload a file and replace one that already exists. Not sure if it’s a problem yet or not, but I may need to implement Dropbox_DeleteFile method if it continues.

Also wanted to point out that there is a special Dropbox link that you can use for “direct download” of content as opposed to the standard links that first take you to the Dropbox website.

Here is a test of the “standard” Dropbox link to my company logo:

https://www.dropbox.com/s/i3tzh5ukwhbtvsv/islogo.png?dl=0

Here is a link that should direct download the same logo without taking you to the Dropbox website first:

https://dl.dropboxusercontent.com/s/i3tzh5ukwhbtvsv/islogo.png

Tim

*****************************************
Tim Nevels
Innovative Solutions
785-749-3444
[hidden email]
*****************************************

**********************************************************************
4D Internet Users Group (4D iNUG)
Archive:  http://lists.4d.com/archives.html
Options: https://lists.4d.com/mailman/options/4d_tech
Unsub:  mailto:[hidden email]
**********************************************************************