python - 为什么 request.FILES["file"].open() 是 None,尽管 request.FILES.["file"].name 效果很好?
问题描述
我正在尝试使用 ajax 将图像文件放入 Django views.py 中。我可以打印它的文件名和大小。但是当我打开文件时,它变成了无..!
我试图打开图像的原因是将其用于视觉分析。目前我正在研究 Django 1.11、python 3.6.7。
这里有一些代码。
视图.py
def receipt_ocr(request):
if request.method == 'POST':
print(type(request.FILES["file"])) #<class 'django.core.files.uploadedfile.InMemoryUploadedFile'>
print(request.FILES["file"]) #bank.png
print(request.FILES["file"].size) #119227
print(request.FILES["file"].name) #bank.png
print(request.FILES["file"].content_type) #image/png
print(type(request.FILES["file"].open())) #<class 'NoneType'>
print(request.FILES["file"].open()) #None
print(type(request.FILES["file"].read())) #<class 'bytes'>
imageFile = request.FILES["file"]
receipt_image = imageFile.read()
print(type(receipt_image)) #<class 'bytes'>
print(receipt_image) #b''
html中的ajax部分
$.ajax({
url: "{% url 'ocr:receipt_ocr' %}",
enctype: 'multipart/form-data',
type: 'POST',
cache: false,
processData: false,
contentType: false,
data: postData,
complete: function(req){
alert('good');
},
error: function(req, err){
alert('message:' + err);
}
});
我预计views.py 中的receipt_image 是图像文件的二进制文件。但它是空的。因为 request.FILES["file"] 是无。我不知道为什么它是无。
感谢您阅读我的问题。希望你有美好的一天
解决方案
一旦你调用read()
了一个文件,后续调用将不会产生任何数据。第一次调用read()
读取整个缓冲区,再次调用时不会有任何剩余
print(type(request.FILES["file"].read())) # This line has read the entire buffer
imageFile = request.FILES["file"]
receipt_image = imageFile.read() # There is nothing left to read so this returns b''
推荐阅读
- ansible - 如何在库存文件中添加服务器路径 - ansible
- jquery-ui - 没有当前日期的jQuery-UI日期选择器?
- java - 良好实践:API 和 MVC - 我应该将方法/函数与 API 的 SQL 查询放在哪里
- python - 读取具有相同名称但不同扩展名Python的多个文件
- azure - 多个订阅中的 Azure VNET 对等互连
- javascript - onclick函数加减法
- php - Laravel - 未找到代客 404
- angular - 在浏览器中打开多个选项卡(Angular 2)(春季启动)时,我得到了时差
- css - 如何左对齐文本但居中 fa=home 图标
- oracle - Oracle 中直到最后一个逗号的字符串值(最多 20 个字符)