Сохранить путь к файлу в зависимости от содержимого загруженного файла в Django REST Framework - PullRequest
0 голосов
/ 31 марта 2020

Я пытаюсь сохранить загруженный файл по указанному пути c, в зависимости от его содержимого. Файл загружается в Django API REST Framework в формате Base64 внутри объекта JSON.

Файл, если он действителен, содержит уникальный идентификатор модели машины, которую я хочу сохранить в базе данных. и использовать как часть пути, по которому этот и другие соответствующие файлы будут сохранены. Файл UniqueIDAndInfo необходимо сохранить, поскольку он содержит не только идентификатор, о котором я говорю.

Извлечь идентификатор очень просто, сохранить его как поле в экземпляре модели и затем сообщить система хранения для сохранения файла в указанном каталоге c в соответствии со значением идентификатора.

Я получаю файл, используя расширение drf_base64 следующим простым способом:

class MachineSerializer(serializers.ModelSerializer):
    class UniqueIDAndInfoBase64File(drf_base64.Base64FileField):
        pass

    unique_id_and_info = UniqueIDAndInfoBase64File(allow_null=False, allow_empty_file=False)

То, что я пытаюсь выполнить sh выглядит примерно так, если обратный вызов upload_to принял содержимое файла в качестве аргумента:

def content_file_name(instance, filename, file_contents):
    # file_contents is not a true argument of this function!
    unique_id = process_unique_id_and_info_file(file_contents)
    return os.path.join(MACHINE_FILE_FOLDER, unique_id, 'unique_id_and_info.info')

class Machine(models.Model):
    unique_id_and_info = models.FileField(upload_to=content_file_name)
...