How to download files with Box API & Python

我的梦境 提交于 2019-12-23 14:36:09

问题


I have currently the upload portion of my code working, how would I go about converting this into a program that will download the respective files from the box folder?

This is the upload program:

import requests
import json

#the user acces token
access_token =  'UfUNeHhv4gIxFCn5WEXHgBJwfG8gHT2o'
#the name of the file as you want it to appear in box
dst_filename = 'box_file'
#the actual file path
src_directory = 'C:\Python\cache\\'
#the name of the file to be transferred
src_filename = 'Wildlife.wmv'
#the id of the folder you want to upload to
parent_id = '0'
counter = 1

for counter in range(1, 6):
  src_file = (src_directory + src_filename + '-' + str(counter))
  print(src_file)
  box_filename = (dst_filename + '-' + str(counter))
  headers = { 'Authorization': 'Bearer {0}'.format(access_token)}
  url = 'https://upload.box.com/api/2.0/files/content'
  #open(src_file,'rb') - opens the source file with the buffered reader
  files = { 'filename': (box_filename, open(src_file,'rb')) }
  data = { "parent_id": parent_id }
  response = requests.post(url, data=data, files=files, headers=headers)
  #file_info = response.json()
  #print(file_info)
  print(response)
  print(url, data, files, headers)
  counter = counter + 1

This is the sample curl request that the Box API documentation gives for downloading files.

curl -L https://api.box.com/2.0/files/FILE_ID/content \
-H "Authorization: Bearer ACCESS_TOKEN" \
-o FILE_PATH/file_name.txt

Part two of this question: Is there a way to alter this program (and the download program) to process all of the files within a folder no matter what the name of the file is?

I am new to programming, so please forgive my lack of skills/knowledge in this area.


回答1:


I would suggest you looking at Box SDK

As you can see in their docs, after authenticating with your client you only need to run the following line:

client.file(file_id='SOME_FILE_ID').content()

There is more information in Box SDK Docs. If this does not satisfy your necessities because you want to create your own Box SDK, then please wait for another person to give an specific response to your problem. Thanks.




回答2:


Assume you are getting your authorization correct you can download file by adding few lines to code to your Existing code. This will copy data from box file to local file here name is FileFromBox.xlx

with open('FileFromBox.xls', 'wb') as open_file:
    client.file('FileId_of_box_file').download_to(open_file)
    open_file.close()



回答3:


I know this was asked long back, but still I believe many people are searching for the way to do it.

Please check Box SDK for more details.

And I'm using OAuth2.0 - Custom App. You can create the credentials from the developer console.

Here's the code.

from boxsdk import OAuth2, Client
#from boxsdk import Folder

auth = OAuth2(
    client_id='fbxxxxxxxxxxxxxxxxxxxxxxxxxxxxx9',
    client_secret='bPxxxxxxxxxxxxxxxxxxxxxxxxx4Or',
    access_token='QExxxxxxxxxxxxxxxxxxxxxxxxxxwt',
)
client = Client(auth)

root_folder = client.root_folder().get()

items = root_folder.get_items()
for item in items:
    print('{0} {1} is named "{2}"'.format(item.type.capitalize(), item.id, item.name))
    with open(item.name, 'wb') as open_file:
        client.file(item.id).download_to(open_file)
        open_file.close()

Hope this will help you. Thanks to the Python boxsdk 2.0.0 Doc.



来源:https://stackoverflow.com/questions/29594289/how-to-download-files-with-box-api-python

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!