我正在尝试使用Ajax将图像文件导入Django views.py。 我可以打印文件名和大小。但是当我打开文件时,它变成None ..!
我尝试打开图像的原因是将其用于视觉分析。 目前,我正在开发Django 1.11,python 3.6.7。
这是一些代码。
views.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中的receive_image是图像文件的二进制文件。但它是空的。因为request.FILES [“ file”]为None。我不知道为什么它没有。
感谢您阅读我的问题。 希望你有美好的一天?
答案 0 :(得分:0)
在文件上调用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''