Перезаписывайте файл, если его имя совпадает с именем в Django

Как перезаписать файл, если имя нового файла похоже на уже загруженный. Если я могу взять file.name и удалить любой файл с таким именем, а затем сохранить этот файл, что также работает для любого файла. Любой метод будет работать, пожалуйста, помогите Это мой view.py

from django.shortcuts import render
from django.views.generic import TemplateView
from django.core.files.storage import FileSystemStorage

from django.http import HttpResponse
import requests
from geopy.distance import geodesic as GD
import pandas as pd
from subprocess import run,PIPE
from .forms import UploadFileForm
from django.core.files.storage import FileSystemStorage

def upload_file(request):
  if request.method == 'POST':
    form = UploadFileForm(request.POST, request.FILES)
    file = request.FILES['file']
    fs = FileSystemStorage()
    fs.save(file.name, file)

  else:
    form = UploadFileForm()
  return render(request, 'upload.html', {'form':form})

Как вы упомянули, удаление существующего файла с текущим именем файла подходит для вас, вы можете использовать это:

import os


def upload_file(request):
    if request.method == 'POST':
        form = UploadFileForm(request.POST, request.FILES)
        file = request.FILES['file']

        name = str(file.name).replace("\\", "/")
        if os.path.exists(name):
            os.remove(name)

        fs = FileSystemStorage()
        fs.save(file.name, file)

    else:
        form = UploadFileForm()
    
    return render(request, 'upload.html', {'form':form})

Кроме того, вы можете переименовать старый файл (добавив время переименования в конец исходного имени) и сохранить новый файл под его именем:

import os
from datetime import datetime


def content_file_name(filename):
    file_root, file_ext = os.path.splitext(filename)
    return f'{file_root}_{datetime.utcnow().time()}{file_ext}'


def upload_file(request):
    if request.method == 'POST':
        form = UploadFileForm(request.POST, request.FILES)
        file = request.FILES['file']

        name = str(file.name).replace("\\", "/")
        if os.path.exists(name):
            os.rename(src=name, dst=content_file_name(name))

        fs = FileSystemStorage()
        fs.save(file.name, file)

    else:
        form = UploadFileForm()
    
    return render(request, 'upload.html', {'form':form})

Кроме того, вы можете сохранить каждый файл с указанием времени загрузки в его имени:

import os
from datetime import datetime


def content_file_name(filename):
    file_root, file_ext = os.path.splitext(filename)
    return f'{file_root}_{datetime.utcnow().time()}{file_ext}'


def upload_file(request):
    if request.method == 'POST':
        form = UploadFileForm(request.POST, request.FILES)
        file = request.FILES['file']

        file.name = content_file_name(file.name)

        fs = FileSystemStorage()
        fs.save(file.name, file)

    else:
        form = UploadFileForm()
    
    return render(request, 'upload.html', {'form':form})
Вернуться на верх