如何在Django View中使用default_storage.delete(file_name)删除图像



所以我一直在使用Django Rest Framework创建指纹匹配系统。每当我将指纹从前端发送到后端以与存储的指纹相匹配时。指纹被储存在那里,这不是我想要的。我想在它的使用结束后删除它。

以下是错误图像:https://i.stack.imgur.com/MCXcv.png

def post(self, request, format = None):
serializer = serializers.MatchSerializer(data = request.data)
if serializer.is_valid():
#Fetching the stored fingerprints in a different serializer.
queryset = models.Profile.objects.all()
serializer2 = serializers.ProfileSerializer(queryset, many=True)
data = serializer2.data
#Initialized a result list which will be appended with the name of the user whose 
#fingerprint is matched.

result = []

file = request.FILES['fingerprint']
file_name = default_storage.save(file.name, file)
file = default_storage.open(file_name) 
file_url = default_storage.url(file_name)
fImage = cv2.imread(str(file))
for i in range(len(data)):
print(data[i].get('fingerprint'))
DbImage = cv2.imread('C:/Users/ShalomAlexander/Documents/4th Year 
Project/Django/FingerprintMatch/' + data[i].get('fingerprint'))
if(isMatch(fImage, DbImage)): 
result.append(data[i].get('name'))

#This is not working as expected because its raising an error ie. " Process is still 
#in use"    
default_storage.delete(file_name)
return Response(result)

如果您有任何更好的方法来匹配指纹或图像,我们也将不胜感激。提前谢谢。当前的代码运行良好,与预期的指纹匹配,但它存储了传入的指纹图像,我不希望这样。

对我来说,这个问题是使用file_path而不是file_name:解决的

file_name = default_storage.save(file.name, file)
file_path = os.path.join(settings.MEDIA_ROOT, file_name)
. . .
default_storage.delete(file_path)
file = default_storage.open(file_name)
...
default_storage.delete(file_name)

这就是当您试图删除该文件时该文件被打开的原因。

这与OpenCV无关。一个可重复性最小的例子的目的是让你弄清楚问题出在哪里

它看起来更像是opencv的问题,而不是django-rest-framework的问题。请参阅此问题:https://github.com/opencv/opencv/issues/12342

看来您的解决方案可能只是升级opencv软件包版本。

最新更新