1

次のような状況があります。

  • models.py

    class ShapeFile(models.Model):
        name = models.SlugField()
        file = models.FileField(upload_to=get_upload_path)
    
    def get_upload_path(instance, filename):
        return os.path.join("my","custom","path",filename)
    
  • ビュー.py

    def shapeIng(request):
        if request.method == 'POST':
            form = UploadForm(request.POST, request.FILES)
            if form.is_valid():
                form.save()
    

このように、アップロードされたファイルは自動的にチャンク化されますか? そうでない場合は、チャンクしたいので、ドキュメントで提案されているように、次のことを試しました

  • models.py

    from django.core.files.storage import default_storage
    
    class ShapeFile(models.Model):
        name = models.SlugField()
        file = models.FileField(upload_to=get_upload_path)
    
    def get_upload_path_2(filename):
       return os.path.join(default_storage.path(''),"my","custom",
           "path","%s" % filename)
    
  • ビュー.py

    from os import makedirs
    form os.path import dirname
    from django.core.files.storage import default_storage
    
    def shapeIng(request):
        if request.method == 'POST':
            form = UploadForm(request.POST, request.FILES)
            if form.is_valid():
    
                # Split uploaded file into chunks
                fileName = request.FILES['file']
                filePath = get_upload_path_2(fileName)
                handle_uploaded_file(fileName, filePath) # Uploads the file
    
                form.save() # Uploads the file again!!!
    
    def handle_uploaded_file(fileName, filePath):
        makedirs(dirname(filePath))
        with open(filePath, 'wb+') as destination:
            for chunk in fileName.chunks():
                destination.write(chunk)
    

これは機能しますが、ファイルは Django ドキュメントに準拠した名前 ( myFile.zipと *myFile_1.zip* など) で 2 回保存されます。チャンクされてsave()いるかどうかはわかりません。チャンクがModelFormで自動的に行われるかどうかを説明してください。また、実際の例を教えてください。save()通常どおり「名前」フィールドを保存し、「ファイル」フィールドをチャンクするために、メソッドを再定義する必要がありますか? ありがとう。

4

0 に答える 0