Django Rest Framework에 업로드 된 파일 및 zip 요청 처리

피 마트

Django Rest Framework 내에서 업로드 된 파일의 HTTP 요청을 처리하는 방법을 아는 데 어려움이 있습니다. createviews.py끝점 :

def create(self, request):
    file_iobytes = request.FILES["file"].file
    self.zipping(file_iobytes)

    serializer = FileSerializer(data=request.data) # converts to JSON

    if serializer.is_valid():
        serializer.save()
        return Response(serializer.data, status=status.HTTP_201_CREATED)


def zipping(self, file):
    # Create a buffer to write the zipfile into
    zip_buffer = io.BytesIO()

    # Create the zipfile, giving the buffer as the target
    with zipfile.ZipFile(zip_buffer, 'w') as zip_file:
        #file.seek(0)
        zip_file.write(file)
        file.close()

models.py

class File(models.Model):
    file = models.FileField(upload_to='Myfiles/')
    ...

    def __str__(self):
        return self.file.name

serializers.py

class FileSerializer(serializers.ModelSerializer):
    class Meta:
        model = File
        fields = '__all__'
        read_only_fields = ('timestamp',)

내 의도는 :

  1. DRF를 통해 파일 업로드
  2. 예를 들어 sha1 파일에서 해시를 만듭니다 (해싱에 경로가 필요하기 때문에 직접 방법을 모르고 http 요청에서 이것을 검색하는 방법을 모릅니다).
  3. 파일을 압축하여 저장

요청을 사용하여 zip 파일을 생성하려면 어떻게해야합니까 (올바른 접근 방식입니까)?

아라 칼 아부

설명이 자명하기를 바랍니다. :)

import hashlib
from rest_framework.decorators import api_view
from rest_framework.response import Response


def generate_sha1(file_pointer):
    # BUF_SIZE is totally arbitrary, change for your app!
    BUF_SIZE = 65536  # lets read stuff in 64kb chunks!

    sha1 = hashlib.sha1()
    while True:
        data = file_pointer.read(BUF_SIZE)
        if not data:
            break
        sha1.update(data)
    return sha1.hexdigest()


def generate_zip(model_instance):
    source_file = f'{model_instance.file.name}'
    dest_file = f'{source_file}.zip'
    zipfile.ZipFile(dest_file, mode='w').write(source_file)
    return dest_file


def re_assign_files(model_instance, dest_file):
    model_instance.file.delete()  # deletes the uploaded file
    model_instance.file = dest_file  # mapping the generated zip file
    model_instance.save()  # saving the model instance


@api_view(http_method_names=['GET', 'POST'])
def foo_api(request):
    if request.method == 'GET':
        return Response({'message': 'this is get method'})
    else:
        serializer = FileSerializer(data=request.data)
        serializer.is_valid(True)  # validating the data
        model_instance = serializer.save()  # saving the data into database

        hash_sha1 = generate_sha1(serializer.validated_data['file'])  # generates the SHA1 value
        dest_file = generate_zip(model_instance)  # generates zip file
        re_assign_files(model_instance, dest_file)
        return Response({'sha1': hash_sha1, 'data': serializer.data})

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Django Rest Framework 3 : 요청없이 파일 업로드 .FILES

분류에서Dev

Django Rest Framework, nginx 및 uwsgi로 403 오류를 반환하는 PUT 요청 처리

분류에서Dev

파일 Vue 3 및 Django REST 업로드

분류에서Dev

동일한 포트에서 Webrick으로 파일 제공 및 요청 처리

분류에서Dev

Django Rest Framework에서 JWT 인증 및 소프트 삭제 된 사용자 처리

분류에서Dev

REST 서비스에서 바이너리 InputStream으로 .zip 파일 업로드

분류에서Dev

요청 라이브러리를 사용하여 Django Rest Framework에 이미지 업로드

분류에서Dev

Django Rest Framework에 대용량 파일 업로드

분류에서Dev

Django Rest Framework에 대용량 파일 업로드

분류에서Dev

파일 업로드는 modelform을 사용하여 Django에서 잘못된 요청을 제공합니다.

분류에서Dev

REST 요청 및 REST 응답 처리

분류에서Dev

Django에 업로드 된 파일 표시

분류에서Dev

Django에서 업로드 할 때 업로드 된 파일의 파일 경로를 어떻게 얻나요?

분류에서Dev

동일한 POST 요청으로 MongoDB 및 로컬 서버에 파일 업로드

분류에서Dev

Websphere REST 업로드-업로드 된 파일을 메모리에로드하지 마십시오.

분류에서Dev

Django REST Framework에서 multipart / form-data를 사용하여 여러 이미지 및 중첩 된 json 업로드

분류에서Dev

PrimeNG에서 업로드 된 파일을 처리하는 방법

분류에서Dev

단일 입력 요소에서 POST를 통해 업로드 된 여러 파일 처리

분류에서Dev

해당 RESTful 요청이 오기 전에 업로드 된 파일을 관리하는 방법

분류에서Dev

NestJS의 FileInterceptor 및 Body 문제 (요청에서 파일 및 데이터 업로드)

분류에서Dev

멀티 파트 POST 요청에 업로드 된 파일이 없습니다.

분류에서Dev

Django Rest Framework Serializer에서 POST 요청으로 전송 된 추가 데이터에 액세스하는 방법

분류에서Dev

디스패처에 캐시 된 파일 경로 및 파일 경로의 하위 집합이 요청 될 때 403 렌더링

분류에서Dev

스프링 부팅 REST 응용 프로그램에서 gzip으로 압축 된 요청을 처리

분류에서Dev

Django Rest Framework에서 파일을 처리하는 방법은 무엇입니까?

분류에서Dev

Restangular 요청으로 REST API에서 파일 다운로드

분류에서Dev

Python으로 여러 HTML 파일을 효과적으로 요청 및 처리

분류에서Dev

이 코드에 대한 GET 및 POST 요청을 모두 처리하는 Django의 단일 함수 기반 뷰 (FBV)주기는 무엇입니까?

분류에서Dev

Nodejs는 ZIP 파일 스트리밍 중에 차단되고 다음 요청을 처리 할 수 없습니다.

Related 관련 기사

  1. 1

    Django Rest Framework 3 : 요청없이 파일 업로드 .FILES

  2. 2

    Django Rest Framework, nginx 및 uwsgi로 403 오류를 반환하는 PUT 요청 처리

  3. 3

    파일 Vue 3 및 Django REST 업로드

  4. 4

    동일한 포트에서 Webrick으로 파일 제공 및 요청 처리

  5. 5

    Django Rest Framework에서 JWT 인증 및 소프트 삭제 된 사용자 처리

  6. 6

    REST 서비스에서 바이너리 InputStream으로 .zip 파일 업로드

  7. 7

    요청 라이브러리를 사용하여 Django Rest Framework에 이미지 업로드

  8. 8

    Django Rest Framework에 대용량 파일 업로드

  9. 9

    Django Rest Framework에 대용량 파일 업로드

  10. 10

    파일 업로드는 modelform을 사용하여 Django에서 잘못된 요청을 제공합니다.

  11. 11

    REST 요청 및 REST 응답 처리

  12. 12

    Django에 업로드 된 파일 표시

  13. 13

    Django에서 업로드 할 때 업로드 된 파일의 파일 경로를 어떻게 얻나요?

  14. 14

    동일한 POST 요청으로 MongoDB 및 로컬 서버에 파일 업로드

  15. 15

    Websphere REST 업로드-업로드 된 파일을 메모리에로드하지 마십시오.

  16. 16

    Django REST Framework에서 multipart / form-data를 사용하여 여러 이미지 및 중첩 된 json 업로드

  17. 17

    PrimeNG에서 업로드 된 파일을 처리하는 방법

  18. 18

    단일 입력 요소에서 POST를 통해 업로드 된 여러 파일 처리

  19. 19

    해당 RESTful 요청이 오기 전에 업로드 된 파일을 관리하는 방법

  20. 20

    NestJS의 FileInterceptor 및 Body 문제 (요청에서 파일 및 데이터 업로드)

  21. 21

    멀티 파트 POST 요청에 업로드 된 파일이 없습니다.

  22. 22

    Django Rest Framework Serializer에서 POST 요청으로 전송 된 추가 데이터에 액세스하는 방법

  23. 23

    디스패처에 캐시 된 파일 경로 및 파일 경로의 하위 집합이 요청 될 때 403 렌더링

  24. 24

    스프링 부팅 REST 응용 프로그램에서 gzip으로 압축 된 요청을 처리

  25. 25

    Django Rest Framework에서 파일을 처리하는 방법은 무엇입니까?

  26. 26

    Restangular 요청으로 REST API에서 파일 다운로드

  27. 27

    Python으로 여러 HTML 파일을 효과적으로 요청 및 처리

  28. 28

    이 코드에 대한 GET 및 POST 요청을 모두 처리하는 Django의 단일 함수 기반 뷰 (FBV)주기는 무엇입니까?

  29. 29

    Nodejs는 ZIP 파일 스트리밍 중에 차단되고 다음 요청을 처리 할 수 없습니다.

뜨겁다태그

보관