2016-08-01 3 views
0

Я использую модуль запросов с Django и пытаюсь отправить файл из формы, но когда я делаю, я получаю «недопустимый файл:» Ошибка при попытке откройте файл. Я думаю, что это просто попытка открыть имя файла как строку вместо открытия фактического файла. Как я могу открыть фактический файл из формы вместо того, чтобы просто пытаться открыть имя файла, поэтому я могу отправить его как полезную нагрузку?Ошибка при попытке открыть файл - Запросы и Django

class AddDocumentView(LoginRequiredMixin, SuccessMessageMixin, CreateView): 
    login_url = reverse_lazy('users:login') 
    form_class = FileUploadForm 
    template_name = 'docman/forms/add-document.html' 
    success_message = 'Document was successfully added' 

    def form_valid(self, form): 
     pk = self.kwargs['pk'] 
     user = get_object_or_404(User, pk=pk) 
     file = form.save(commit=False) 
     file.user = user 
     if not self.post_to_server(file, user.id): 
      file.delete() 
     return super(AddDocumentView, self).form_valid(form) 

    def post_to_server(self, file, cid): 
     url = 'https://example.herokuapp.com/api/files/' 
     headers = {'token': '333334wsfSecretToken'} 

     # I get error here when trying to open file 
     payload = {'file': open(file, 'rb'), 'client_id': cid} 
     r = requests.post(url, data=payload, headers=headers) 
     print(r.text) 
     if r.status_code == requests.codes.ok: 
      return True 
     else: 
      return False 

ответ

2

open(file, 'rb') получения Джанго модели объекта из file = form.save(commit=False) линии, а не файл. отправьте исходный файл. Вы не можете сделать что-то вроде

file = self.request.FILES.get('name') 
self.post_to_server(file, user.id) 

Edit:

Нет необходимости называть открытым на файл, она уже открыта. open(file, 'rb') берет путь к файлу. файл уже открыт из приведенных выше строк, просто используйте это. лучшие практики

files = {'file': file} 
r = requests.post(url, files=files, data=payload) 
+0

Пойду это. Я сделал это, но я получаю ту же ошибку, но на этот раз она фактически распознает файл вместо строки. TypeError: недопустимый файл: nastyn8

+0

@ nastyn8 я обновил свой ответ – MicroPyramid

Смежные вопросы