问题
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