DRF中的哈希文件(POST HTTP请求)

问题描述 投票:0回答:1

我正在创建REST API,但在Django中我并不特别精明。我想发布上传的文件,但在此之前,我想创建文件的sha256,如下所示:

def sha256sum(filename):
    h = hashlib.sha256()
    b = bytearray(128*1024)
    mv = memoryview(b)
    with open(filename, 'rb', buffering=0) as f:
        for n in iter(lambda : f.readinto(mv), 0):
            h.update(mv[:n])

    return h.hexdigest()

为了使它起作用,我需要实际的文件(或文件路径),而不是实际的文件名。我在viewsets.py中的代码:

def create(self, request):
    serializer = FileSerializer(data=request.data) 
    f = request.FILES["file"] # just gives the filename
    print(request.META)
    if serializer.is_valid():
        f = serializer.save() 
        print(f"f: {f}")
        res_name = sha256sum(f)
        print(f"res_name: {res_name}")

        return Response(serializer.data, status=status.HTTP_201_CREATED)

有什么想法我要去哪里吗?

django python-3.x hash django-rest-framework
1个回答
0
投票

我有request.FILES ['file']是一个InMemoryUploadedFile。挖了几下之后,似乎这个文件已经“打开”了,所以我只是从函数中删除了打开,就像这样:

def sha256sum(filename):
    h = hashlib.sha256()
    b = bytearray(128*1024)
    mv = memoryview(b)
    for n in iter(lambda : filename.readinto(mv), 0):
        h.update(mv[:n])

    return h.hexdigest()
© www.soinside.com 2019 - 2024. All rights reserved.