gpt4 book ai didi

Python 请求库将 PDF 传递给 Django 服务器

转载 作者:可可西里 更新时间:2023-11-01 16:38:27 31 4
gpt4 key购买 nike

因此,我知道服务器代码有效,因为该网站目前正在生产中并且运行良好。另一方面,我开发了一个测试脚本来对 API 进行单元测试。我正在尝试使用 HTTP POST 方法将 PDF 文件发送到服务器的 nginx -> gunicorn -> flask 应用程序环境。

服务器获取附件:

@app.route('<ObjectId:_id>/attachments', methods=['POST'])
@csrf.exempt
@opportunity_owner_required
@auth.login_required
@nocache
def upload_attachment(_id):
upload = request.files.get('file')
if not upload:
abort(400, "Missing attached file.")

然后我尝试将 pdf 文件传递​​给服务器:

def test_add_opportunity_attachment(self):
files = {'file': ("mozilla.pdf", open('%s/mozilla.pdf' % PATHTOFILE, 'rb'))}
headers = {'Content-Type': 'application/pdf', "enctype": "multipart/form-data", "Content-Disposition":"attachment;filename=mozilla.pdf"}
r=self.session.post(self.formatURL('/attachments'), headers=headers, files=files)
assert r.status_code == 200

但我总是得到状态 400。

当使用 ngrep 跟踪输出时,我确实看到了似乎是通过网络传递的 PDF 的编码形式,但服务器看不到它。

请注意:部分信息由于其专有性质而缺失。但是测试函数中使用的所有函数都可以正常工作。 formatURL 按预期格式化它并且 url 匹配。

最佳答案

所以这个问题比我想象的要晦涩一点。服务器上的一些后端逻辑将文件保存到目录中,然后继续到 @app.route() 以获取 URL 位置。我的本地副本缺少一些权限,因此当它尝试保存 PDF 文件时,上传会失败。

另一个问题,正如上面 sigmavirus24 所指出的那样,自定义 header 设置不正确,因此可以正常工作的最终版本如下所示:

def test_add_opportunity_attachment(self):
payload = {"title": "Testing upload title", "description": "Testing upload description"}
file_contents = open('%s/mozilla.pdf' % PATHTOFILE, 'rb')
files = {'file': ('mozilla.pdf', file_contents)}
r=self.session.post(self.formatURL('/attachments'), files=files, data=payload)
if r.status_code != 200:
assert r.status_code == 409 #Successful, but no duplicates allowed.

关于Python 请求库将 PDF 传递给 Django 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16018025/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com