【问题标题】:Invalid file error when trying to open file - Requests and Django尝试打开文件时出现无效文件错误 - 请求和 Django
【发布时间】:2016-08-01 15:23:13
【问题描述】:

我在 Django 中使用 requests 模块并尝试从表单发送文件,但是当我尝试打开文件时出现“invalid file:”错误。我认为它只是试图将文件名作为字符串打开,而不是打开实际文件。如何从表单中打开实际文件,而不是仅仅尝试打开文件名,以便将其作为有效负载发送?

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

【问题讨论】:

    标签: python django python-requests


    【解决方案1】:

    open(file, 'rb')file = form.save(commit=False) 行接收 django 模型对象,而不是文件。发送原始文件。 你可以做类似的事情

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

    编辑:

    不需要对文件调用 open,它已经打开了。 open(file, 'rb') 采用文件路径。该文件已经从上面的行打开,只需使用它。 最佳实践

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

    【讨论】:

    • 知道了。我这样做了,但我得到了同样的错误,但这次它实际上是识别文件而不是字符串。类型错误:无效文件:
    猜你喜欢
    • 2016-10-15
    • 2020-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-06
    • 2017-10-02
    • 2013-02-06
    • 2016-11-03
    相关资源
    最近更新 更多