我有一个复杂的任务,现在我不知道为什么事情不能正常工作。
所以我有两个服务——我的Django主服务器和OCR服务。OCR服务是用FastAPI构建的,它只获取图像,对图像进行处理,并以JSON的形式返回来自图像的数据。这就是我的fastapi文件的样子:
from fastapi import FastAPI, File, UploadFile, Request
import celery_launch
from cleaning_folders import cleaning_folder
from config import save_img_from_form
f_app = FastAPI()
def save_img_from_form(image):
ts = time.time() * 1000
digit = random.randint(0, 9)
file_name = "img_{digit}_{ts}.jpg".format(digit=digit, ts=ts)
with open(os.path.join('temp_img', file_name), 'wb') as buffer:
shutil.copyfileobj(image.file, buffer)
return buffer
@f_app.post("/api/ocr")
async def send_request(image: UploadFile = File(default='Any', media_type='multipart/form-data')):
buffer = save_img_from_form(image)
response = celery_launch.ocr_process(
selected_town='Templates/Chernomorsk',
raw_img_path=buffer.name,
selected_billing_type=1
)
json_response = response.get()
cleaning_folder('temp_img')
return json_response
所以 save_img_from_form() 从请求中获取一个图像对象并将其保存到磁盘以供下次处理。然后芹菜运行并执行所有 OCR 过程,然后返回一个字典。
因此,当我使用Swagger UI作为交互式API测试服务时,一切都正常,所以在Swagger UI中,我可以通过html输入加载我的图像,然后单击按钮运行我的endpoint。然后我得到了正确的JSON作为响应。我还检查了网络活动(Chrome中的ctrl shift I)和链接到我的endpoint的网络动作,我看到了很多关于我的请求的东西,还有表单数据(图片ofc)。
但另一个问题是。我需要在我的Django服务器上加载一个图像,然后使用请求库将该文件的请求发送到FastAPI服务。但在这里,我遇到了很多麻烦。我有这样一个html表单:
<form method="POST" action="{% url 'send_ocr_form' %}" enctype="multipart/form-data">
{% csrf_token %}
<input type="hidden" name="pk" value="{{pk}}">
<input type="file" id="ocr_image" name="ocr_image" accept=".jpg, .jpeg"><br>
<button type="submit">Recognize</button>
</form>
一些服务人员需要name=“pk”的隐藏字段。因此,为了加载图像,我有一个名为“ocr_image”的字段。
我对此表单的看法是:
def send_ocr_bill_form(request):
image = request.FILES['ocr_image'].temporary_file_path()
ocr_response = send_ocr_bill(image=image)
files = {'file': open(image, 'rb')}
ocr_response = requests.post('http://127.0.0.1:5005/api/ocr', files=files)
print(ocr_response.json())
return redirect(request.META.get('HTTP_REFERER', '/accounts/profile_page/'))
这并不是这个视图的全部功能,它只是因为当前的问题而没有结束。
因此,当我用image FastAPI发送表单时,使用default='Any '作为图像变量,这意味着请求中没有文件。当我检查网络时,我也没有在我的请求中看到“表单数据”块。所以看起来我不发送图像。但是在我看来,我可以很容易地从请求中获取并打印一个对象。文件,看到它的名字和临时路径,这意味着我加载图像并在我的请求中发送它。
还有有趣的事实。当我删除我的文件输入,只留下csrf令牌和pk隐藏输入,然后提交表单时,在我的网络请求中,我可以看到表单数据,然后在视图中获得我的“pk”。但当我返回文件输入时,表单数据块会消失。
花了这么多时间来解决这个问题,答案是那么容易。我的失败是请求库。让我们看看我的FastAPI的endpoint第一个字符串:
async def send_request(image: UploadFile = File(default='Any', media_type='multipart/form-data')):
所以我将“image”定义为UploadFile对象,当然我的endpoint会在请求中等待文件,但当我在Django视图中发送图像时,我会这样做:
files = {'file': open(image, 'rb')}
ocr_response = requests.post('http://127.0.0.1:5005/api/ocr', files=files)
所以,在“files”变量中,我还使用“file”键将图像分配给它。我需要改变的是:
files = {'image': open(image, 'rb')}
ocr_response = requests.post('http://127.0.0.1:5005/api/ocr', files=files)
现在,当FastAPIendpoint收到请求时,它从正确的位置获取图像参数,然后我可以用它做所有的事情。
问题内容: 当前设置 我有这样的HTML表单。 我可能在页面上有很多这些表格。 我的问题 如何异步提交此表单,而不进行重定向或刷新页面?我知道怎么用。我遇到的问题是从javascript中的HTML检索数据,然后将其放入发布请求字符串中。这是我当前用于zXMLHttpRequest的方法。 例如,假设单击了表单的“提交”按钮时调用了javascript方法,那么如何从该方法访问表单的值并将其添加到
问题内容: 所以我有这个HTML表单: 当用户单击“提交”时,哪种形式最简单的方法将此表单的数据作为JSON对象发送到我的服务器? 更新:我已经走了这么远,但似乎没有用: 我究竟做错了什么? 问题答案: 获取完整的表单数据作为数组,并对其进行json字符串化。 您可以稍后在ajax中使用它。或者,如果您不使用ajax;将其放在隐藏的文本区域中并传递到服务器。如果此数据通过常规格式数据作为json字
问题内容: 我有一个供人们填写的HTML表单,所以我想要它,因此当他们单击“提交”按钮时,它将仅发送电子邮件,而不显示他们的电子邮件并要求他们自己发送消息。 当我使用时: 所有要做的就是打开一个新窗口,并填充电子邮件的正文,但是我希望它仅发送电子邮件。 有没有一种方法可以格式化电子邮件的输出格式?不仅是字段名称和输入值的列表。 谢谢。 问题答案: 实际上,我现在使用ASP C#发送电子邮件,内容类
本文向大家介绍设置以HTML提交表单时将表单数据发送到何处?,包括了设置以HTML提交表单时将表单数据发送到何处?的使用技巧和注意事项,需要的朋友参考一下 使用HTML中的formaction 属性来设置以HTML提交表单时将表单数据发送到的位置。 示例 您可以尝试运行以下代码以实现formaction 属性-
问题内容: 我有这样的表格: 我想异步发送这些数据,使用jQuery函数。 编辑:与解决方案: 问题答案: 看到: jQuery文档:发布 jQuery文档:序列化
主要内容:在线实例,实例,实例,HTML 表单,实例,HTML 表单 - 输入元素,文本域(Text Fields),实例,密码字段,实例,单选按钮(Radio Buttons),实例,复选框(Checkboxes),实例,提交按钮(Submit),实例,实例,更多实例,表单实例,HTML 表单标签HTML 表单用于收集用户的输入信息。 HTML 表单表示文档中的一个区域,此区域包含交互控件,将用户收集到的信息发送到 Web 服务器。 在线实例 实例 <form action=""> First