AnsweredAssumed Answered

Insert from URL with Dropbox API

Question asked by iCLINICIAN on May 16, 2017
Latest reply on May 18, 2017 by iCLINICIAN

With the introduction of cURL options in FM16's Insert from URL script step I've been investigating the possibility of being able to save a copy of my FM solution directly to my Dropbox folder using the https://content.dropboxapi.com/2/files/upload element from Dropbox V2 API.

 

I've successfully created the access token to pass through as part of this step and the Insert from URL script step successfully creates the stated folder and file in my Dropbox.  However, the file size is always 0 bytes.  I've tried 2 different methods

 

METHOD 1

#Export a compacted copy of this file to Temporary Folder

Set Variable [ $file_path ; Get ( TemporaryPath ) & "Solution.fmp12" ]

Save a Copy as [ "$file_path" ; compacted ]

 

#Set my cURL options to variable

Set Variable [ $curl_header ;

"curl -X POST https://content.dropboxapi.com/2/files/upload \\" & ¶ &

"--header \"Authorization: Bearer " & PREFERENCES::Dropbox_AccessToken & "\"  \\" & ¶ &

"--header \"Dropbox-API-Arg: {\\\"path\\\": \\\"/DB2FM/Solution.fmp12\\\"}\" \\" & ¶ &

"--header \"Content-Type: application/octet-stream\" \\" & ¶ &

"--data-binary @" & $file_path ]

 

#Dropbox URL

Set Variable [ $dropbox_url ; "https://content.dropboxapi.com/2/files/upload" ]

 

#Make Request - Set to variable adn then format to JSON field

Insert from URL [ Verify SSL Certificates ; With dialog: Off ; $json ; $dropbox_url ; cURL options: $curl_header ]

Set Field [ PREFERENCES:Dropbox_JSON ; JSONFormatElements ( $json ) ]

 

 

 

METHOD 2

#Export a compacted copy of this file to Temporary Folder and then import to a container field

Set Variable [ $file_path ; Get ( TemporaryPath ) & "Solution.fmp12" ] //note1

Save a Copy as [ "$file_path" ; compacted ]  //note1

Insert File [ PREFERENCES::Container ; "$file_path" ]  //note1

#Set variable following instructions on FileMaker website which states:

#  -  Direct file access is replaced with a FileMaker variable prefixed by the @ character.

#  -  To access a file, you can set the variable to a container field, which contains the file, then use that variable as the parameter of the cURL option.

Set Variable [ $container_path ; PREFERENCES::Container ]

 

#Set my cURL options to variable

Set Variable [ $curl_header ;

"curl -X POST https://content.dropboxapi.com/2/files/upload \\" & ¶ &

"--header \"Authorization: Bearer " & PREFERENCES::Dropbox_AccessToken & "\"  \\" & ¶ &

"--header \"Dropbox-API-Arg: {\\\"path\\\": \\\"/DB2FM/Solution.fmp12\\\"}\" \\" & ¶ &

"--header \"Content-Type: application/octet-stream\" \\" & ¶ &

"--data-binary @" & $container_path ]

 

#Dropbox URL

Set Variable [ $dropbox_url ; "https://content.dropboxapi.com/2/files/upload" ]

 

#Make Request - Set to variable adn then format to JSON field

Insert from URL [ Verify SSL Certificates ; With dialog: Off ; $json ; $dropbox_url ; cURL options: $curl_header ]

Set Field [ PREFERENCES:Dropbox_JSON ; JSONFormatElements ( $json ) ]

 

 

 

JSON Response For Both Methods

 

I get the following JSON Response for both methods

{

    "client_modified" : "2017-05-16T11:22:47Z",

    "content_hash" : "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",

    "id" : "id:heJWQ1SWwJsAAAAAAcMWNw",

    "name" : "Solution.fmp12",

    "path_display" : "/DB2FM/Solution.fmp12",

    "path_lower" : "/db2fm/solution.fmp12",

    "rev" : "3a0412f00f58892",

    "server_modified" : "2017-05-16T11:22:48Z",

    "size" : 0

}

 

Any ideas as to why the file is created but with no content.  I've also tried this with a number of different file types (.png, .txt, .pdf) by manually inserting a file into the container and greying out the 3 steps marked //note1 above but the result is always the same.

Outcomes