How to download files with Box API & Python

2019-06-25 17:34发布

问题:

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()