We Want to Hear From You! What Do You Want to See on the Community? Tell us here!
Forum Discussion
app5000
9 years agoExplorer | Level 3
how to get file_id, file_size metadata using filename gotten from file chooser (python)
I have used dropbox file chooser to download files and filelinks. After I extract the filenames using the file chooser, I want to get more extended metadta.
To do that I first went through Oauth2, then I used the following python codes:
fileid=dbx.files_get_metadata('/'+filename).id
but got the following error message:
File "/home/serve624/lib/python2.7/site-packages/dropbox/base.py", line 449, in files_get_metadata None, File "/home/serve624/lib/python2.7/site-packages/dropbox/dropbox.py", line 272, in request user_message_locale) ApiError: ApiError('f865f89a9c9f0c3e53e7319f8d99e3cf', GetMetadataError(u'path', LookupError(u'not_found', None)))
Here is another line of python codes:
filesize=dbx.files_get_metadata('/'+filename).size
File "/home/serve624/lib/python2.7/site-packages/dropbox/base.py", line 449, in files_get_metadata None, File "/home/serve624/lib/python2.7/site-packages/dropbox/dropbox.py", line 272, in request user_message_locale) ApiError: ApiError('25dcb0204364f0edcc35c33231877b85', GetMetadataError(u'path', LookupError(u'not_found', None)))
These two lines of python codes worked for some files from one account but not for files in another account. I don't know what the error message means. Could it be that the file path in the () is not correct? If so how should I compose the file path? How do I get the correct file path from the file chooser?
Thank you for your help.
I just took another look at your code, and I see you're trying to access the `size` returned by the Chooser, but per the documentation that should actually be `bytes`, so you can access it like `obj[0].bytes`.
The API v2 Python SDK's files_get_metadata method does accept a file ID in place of a path, so you can just call `dbx.files_get_metadata(fileID)`, where `fileID` is the file ID you got from the Chooser as `obj[0].id)`.
10 Replies
- Greg-DB9 years ago
Dropbox Community Moderator
When calling files_get_metadata like this, you need to supply the full path and name for the file. If you don't supply the path to a file that exists, you'll get this not_found error.
The Chooser only returns the name of the file, and not the path. So, if the file happens to exist in root, your files_get_metadata call will happen to find it. If it doesn't though, you won't have the right path, and the call will fail.
Alternatively, if you're using the web Chooser, you can get the "id" returned by the Chooser and pass that to files_get_metadata instead. The "id" was recently added to the Chooser though, and isn't officially documented, so I can't promise it will be reliable.
- app50009 years agoExplorer | Level 3Hello Greg,I am using Dropbox Javascript file chooser, can I get fileid that way? Assume I can, how can I use fileid to get modified time, client creation time and download the thumbnail?Q
- Greg-DB8 years ago
Dropbox Community Moderator
Yes, using the JavaScript Chooser, get the 'id' from the result, just like you get the filename. Then, pass that directly into files_get_metadata.
- app50008 years agoExplorer | Level 3
Hello Greg,
Just tried but fileid came up empty.
Here is the code I am using to get the values from returned response:
filename=obj.name;
filepath=obj.link;
fileicon=obj.id;
filesize=obj.size;
fileicons=obj.icon;
filethumbnail=obj.thumbnailLink;I am not sure how to save the thumbnail image. Should I save it as a file or is it in a string (as in a link) format?
Q
- Greg-DB8 years ago
Dropbox Community Moderator
Can you share the rest of your Chooser code? Accessing .id on the returned file object should give you the file ID.
Also, thumbnailLink is a URL that points to the data for the thumbnail. What you with that is up to you. E.g., you can make an HTTPS request to it to download the thumbnail data, and display it in your app.
- app50008 years agoExplorer | Level 3
Here is what I have:
<script type="text/javascript" src="https://www.dropbox.com/static/api/2/dropins.js" id="dropboxjs" data-app-key="kuxx5m7ap1npv24"></script> <script> var options= { multiselect: true, //extensions: ['.png', '.jpg', '.mvp3', '.mvp4', '.doc', '.xls'], linkType: 'preview', success: function(files) { var filenames; var filepaths; var fileids; var filesizes; var fileicons; var filethumbnails; //Parse file names and file paths from files. Store data into arrays. var obj = files; filenames=obj.name; filepaths=obj.link; fileicons=obj.id; filesizes=obj.size; fileicons=obj.icon; filethumbnails=obj.thumbnailLink; document.getElementById('linkfile').value = filepaths; document.getElementById('namefile').value = filenames; document.getElementById('idfile').value = fileids; document.getElementById('sizefile').value = filesizes; document.getElementById('iconfile').value = fileicons; document.getElementById('thumbnailfile').value = filethumbnails; alert(filepaths); alert(filenames); alert(fileids); alert(filesizes); alert(fileicons); alert(filethumbnails); }; }, }; $(document).ready(function() { var button = Dropbox.createChooseButton(options); document.getElementById('uploadDB').appendChild(button); }); </script> <div id="uploadDB"></div>
I can get name, link, icon/thumbnail not size and nor id.
Q.
- Greg-DB8 years ago
Dropbox Community Moderator
Thanks! I see two things that will likely make this not work:
1) The `files` variable given to your `success` callback is an array of files, so you can't directly access the information about specific files on it. You'll need to either iterate over it, or access individual items, e.g., `files[0].id`.
2) You're never actually setting `fileids`. You're instead setting `fileicons` twice.
- app50008 years agoExplorer | Level 3
Good catch. I tried using var obj = files[0]; to get the first file and I was able to get the fileid. But the filesize is still empty. Is it possible to get filesize here? Maybe I can get it later using fileid.
I am trying to find instructions on getting metadata using fileid in python. program. You are so knowledgable, do you have any hints for me? I cannot pin point any good reads on it. Thanks again.
Q
- Greg-DB8 years ago
Dropbox Community Moderator
I just took another look at your code, and I see you're trying to access the `size` returned by the Chooser, but per the documentation that should actually be `bytes`, so you can access it like `obj[0].bytes`.
The API v2 Python SDK's files_get_metadata method does accept a file ID in place of a path, so you can just call `dbx.files_get_metadata(fileID)`, where `fileID` is the file ID you got from the Chooser as `obj[0].id)`.
- app50008 years agoExplorer | Level 3
Thank you so much. You have been really helpful. I am able to get all the metadata I was looking for.
Regards,
Q
About Dropbox API Support & Feedback
Find help with the Dropbox API from other developers.6,035 PostsLatest Activity: 5 hours ago
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 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!