Повреждение файлов при загрузке файлов csv и zip через postman в направлении django rest api
- Здравствуйте, я использую django 4.0.6 (python 3.8) с djangorestframework 3.13.1 на windows. Я тестирую на localhost свое приложение с postman и postman agent в актуальном состоянии. .
- Авторизация JWT работает нормально.
- Если я загружаю изображение или txt, файлы в порядке.
- Если я загружаю csv или zip файлы, они приводят к повреждению файлов. Только короткие файлы csv загружаются правильно,
- длинные csv файлы приводят к поврежденным строкам в нижней части
текста с такими символами: Û™eÞqHÂÔpŠl°'<û
yjϪ'kÃx'Ûr-¥x¡S¼à2SÕkÛår'mÒÕµd5ÿ¶Vê0@1 ̦Záë1§ŠIÇaÎ
. ''ÏÛ€t'vRoT'-‡Qf'¾´é-Oa)]ЧK'5C¤sWB0),3 Zž-2¸Ñóo'jŸH' - Я не могу понять, как это исправить, читая другие сообщения, я не смог найти решение, которое подходит к этой ситуации.
- Спасибо за любое предложение!
Вот моя модель:
class FileUploader(models.Model):
id_file = models.AutoField('id_file', primary_key=True)
Campaign_Name = models.CharField('Campaign_Name', max_length=255)
ViewpointSurvey = models.FileField('ViewpointSurvey',upload_to=path_and_rename_base,max_length=255,blank=False,null=False,db_column='ViewpointSurvey', name='ViewpointSurvey')
ProjectSurvey = models.FileField('ProjectSurvey', upload_to=path_and_rename_base, max_length=255, blank=False, null=False,
db_column='ProjectSurvey', name='ProjectSurvey')
Trajectories = models.FileField('Trajectories', upload_to=path_and_rename_base, max_length=255, blank=False, null=False,
db_column='Trajectories', name='Trajectories')
screenshots = models.FileField('screenshots', upload_to=path_and_rename_base, max_length=255, blank=False,
null=False,
db_column='screenshots', name='screenshots')
timestamp=models.DateTimeField('timestamp',auto_now_add=True,db_column='timestamp', name='timestamp')
id_project=models.CharField('id_project', max_length=255)
class Meta:
db_table = "file_uploader"
verbose_name_plural = 'file_uploader'
verbose_name = "file_uploader"
Вот вид:
class CSVUploadAPI(GenericAPIView):
parser_classes = [MultiPartParser]
serializer_class = UploadSerializer
def put(self, request):
data_collect = request.data
serializer = UploadSerializer(data=data_collect)
if serializer.is_valid():
serializer.save()
Вот сериализатор:
class UploadSerializer(serializers.ModelSerializer):
class Meta:
model= FileUploader
fields = ('id_project','ProjectSurvey','Trajectories','ViewpointSurvey','screenshots','Campaign_Name')
Вот функция path_and_rename_base:
def path_and_rename_base(instance, filename):
upload_to = 'files/'
ext = filename.split('.')[-1]
# set filename as random string
filename = '{}.{}'.format(uuid.uuid4(), ext)
return os.path.join(upload_to, filename)
Вот заголовки почтальона заголовки postman
Вот тело почтальона тело почтальона