Я пытаюсь сохранить загруженный файл по указанному пути 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)