You might see that the Dropbox Community team have been busy working on some major updates to the Community itself! So, here is some info on what’s changed, what’s staying the same and what you can expect from the Dropbox Community overall.
Forum Discussion
sr_c
2 years agoExplorer | Level 3
save_url throws error "request body: could not decode input as JSON"
Hi
I am trying to upload files (pictures with .jpg extension) to my dropbox account (to a specific app folder). I am using Airtable scripting (Javascript) extension to upload files from Airtable (which has these pictures as attachments)
As these attachments are in Airtable (available at individual URLs), I am using below dropbox URL
When I use Dropbox API explorer it is able save the file to the dropbox folder.
But when I use through Airtable scripting block I am getting below error,
"Error in call to API function "files/save_url": request body: could not decode input as JSON"
main part of the script attached below
--------------------------------------------------------
// set the endpoint and app token
let dropboxEndpoint = "https://api.dropboxapi.com/2/files/save_url";
let appToken = "<--my dropbox app token -->"
// set up the post options
let postOptions = {
method: "POST",
headers: {
"Authorization" : "Bearer " + appToken,
"Content-Type" : "application/json"
},
data: {
"path":"/myairsri/best_peacock.jpg",
"url":"<-- Airtable attachmet URL -->"
}
}
const postResults = await fetch(dropboxEndpoint, postOptions);
const jsonPost = await postResults.text();
console.log(jsonPost)
let dropboxEndpoint = "https://api.dropboxapi.com/2/files/save_url";
let appToken = "<--my dropbox app token -->"
// set up the post options
let postOptions = {
method: "POST",
headers: {
"Authorization" : "Bearer " + appToken,
"Content-Type" : "application/json"
},
data: {
"path":"/myairsri/best_peacock.jpg",
"url":"<-- Airtable attachmet URL -->"
}
}
const postResults = await fetch(dropboxEndpoint, postOptions);
const jsonPost = await postResults.text();
console.log(jsonPost)
----------------------------------------------------
Please suggest how this can be resolved.
Thanks
Sr
sr_c wrote:...},data: filedata}...sr_c, When you are preparing a request body with appropriate data, you have to set those data. What actually is going on here? 🤔 You have already prepared request body (that you named as 'filedata' - incorrect name and probably confusing)! In this context instead of setting 'data', you have to set 'body'. 😉 Be more careful!
Hope this helps.
- ЗдравкоLegendary | Level 20
sr_c wrote:..."Error in call to API function "files/save_url": request body: could not decode input as JSON"main part of the script attached below--------------------------------------------------------...
let postOptions = {
method: "POST",
headers: {
"Authorization" : "Bearer " + appToken,
"Content-Type" : "application/json"
},
data: {
"path":"/myairsri/best_peacock.jpg",
"url":"<-- Airtable attachmet URL -->"
}
}
const postResults = await fetch(dropboxEndpoint, postOptions);...Hi sr_c,
You have correctly set json type for the request payload, but where you're ensuring passed data in the body is correct JSON format? 🤔 Maybe passing something like processed body with 'JSON.stringify' can solve your issue. 😉
By the way, you can use Dropbox SDK for Javascript to do the same.
Good luck.
- Greg-DBDropbox Staff
sr_c As Здравко said, you'll need to make sure you're sending a JSON string. It doesn't look like you're doing so in your current code. We do recommend using the official Dropbox JavaScript SDK though, as it will do much of the work for you.
- sr_cExplorer | Level 3
Hi
Based on the suggestion to use JSON.stringify, I tried to implement below solution but error remains same. Not sure whether this is the right way to implement the suggestion. Changes highlighted in blue
------------------------------------------------------------------------------------------
let appToken = "<<App Token>>"let fileobj = {"path":"/myairsri/best_peacock.jpg","url":urlval}let filedata = JSON.stringify(fileobj)// set up the post optionslet postOptions = {method: "POST",headers: {"Authorization" : "Bearer " + appToken,"Content-Type" : "application/json"},data: filedata}Please let me know your suggestionsThanks- ЗдравкоLegendary | Level 20
sr_c wrote:...},data: filedata}...sr_c, When you are preparing a request body with appropriate data, you have to set those data. What actually is going on here? 🤔 You have already prepared request body (that you named as 'filedata' - incorrect name and probably confusing)! In this context instead of setting 'data', you have to set 'body'. 😉 Be more careful!
Hope this helps.
About Dropbox API Support & Feedback
Find help with the Dropbox API from other developers.
5,882 PostsLatest Activity: 3 years agoIf 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 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!