Upload file using python requests

后端 未结 3 1643
失恋的感觉
失恋的感觉 2021-02-09 20:44

I\'ve been trying to upload a file using the box v2 api with requests.

So far I had little luck though. Maybe someone here can help me see what I\'m actually doing wrong

3条回答
  •  挽巷
    挽巷 (楼主)
    2021-02-09 21:41

    As someone requested my implementation, I figured I would put it out here for anyone trying to achieve something similar.

    files_url = "%s/files/content" % (settings.BOX_API_HOST)
    headers = {"Authorization": "BoxAuth api_key=%s&auth_token=%s" % 
                  (settings.BOX_API_KEY, self.doctor.box_auth_token)
              }
    
    file_root, file_suffix = os.path.splitext(str(self.document))
    filename = "%s%s" % (slugify(self.description), file_suffix)
    files = {
            'filename1': open(settings.MEDIA_ROOT + str(self.document), 'rb'),
            }
    data = {
            'filename1': filename,
            'folder_id': str(self.patient.get_box_folder()),
           }
    
    r = requests.post(files_url,
                      headers=headers,
                      files=files,
                      data=data)
    
    file_response = simplejson.loads(r.text)
    
    try:
        if int(file_response['entries'][0]['id']) > 0:
            box_file_id = int(file_response['entries'][0]['id'])
    
            #Update the name of file
            file_update_url = "%s/files/%s" % (settings.BOX_API_HOST, box_file_id) 
            data_update = {"name":  filename}
            file_update = requests.put(file_update_url,
                                       data=simplejson.dumps(data_update),
                                       headers=headers)
    
            LocalDocument.objects.filter(id=self.id).update(box_file_id=box_file_id)
    except:
        pass
    

    So in essence, I needed to send the file and retrieve the ID of the newly updated file and send another request to box. Personally, I don't like it either, but it works for me and haven't been able to find any other implementations that do the correct naming from the get-go.

    Hope someone can benefit from this snippet.

提交回复
热议问题