@gromyko21

Почему получаю NoneType при загрузке файла из js к django?

Делаю чат на channels. Хочу сделать возможность загрузки файлов. Как я узнал нужно сначала получить файл в js, потом передать его функции python для загрузки этого файла в папку, после вернуть путь до этой фотографии сокетам. Я делаю так:
<input id="upload" type="file" onchange="selectFile()">

<script>
function selectFile() {
	e = document.getElementById('upload')
  if(e.files[0]) {
    let item = e.files[0];

    let filesize = item.size;
    let filesizeMB = (filesize / (1024 * 1024)).toFixed(2);
    if (filesizeMB >= 3) {
      alert('Максимальный размер фотографии 3 мб');
    } else {

var $input = $("#uploadimage");
    var fd = new FormData;


    fd.append('csrfmiddlewaretoken', '{{ csrf_token }}');
    fd.append('image_message', item);
    console.log(fd)
    $.ajax({
        url: '/chat/upload/',
        type: 'POST',
        data: fd,
        processData: false,
        contentType: false,

<!--        csrfmiddlewaretoken: '{{ csrf_token }}',-->
        success: function (data) {
            console.log(data);
        }
    });
    }
  } else {
    alert('Файл не найден');
  }
}

</script>

Получаю эти файлы во view django:
def upload_private_chat(request):
    a = request.POST.get('image_message')
    a2 = request.POST.get('csrfmiddlewaretoken')
    print(a, a2)
    if request.method == 'POST':
        with open('jghghj.png', 'w') as file:
            os.chdir(r'/media') # X1
            file.write(request.POST.get('image_message'))
        # a = request.POST.get('image_message')
        # print(a)
    return HttpResponse("ok")

Если a2 то есть текстовую информацию я получаю и записываю ее без проблем(хотя она мне не нужна), тогда как на выводе фотографий(и при загрузке) выводите 'TypeError: write() argument must be str, not None'
  • Вопрос задан
  • 85 просмотров
Решения вопроса 1
@gromyko21 Автор вопроса
Нужен был другой обработчик(который просто сохраняет файл, а на js отдает путь до него).
def upload_private_chat(request):

    fs = FileSystemStorage(location='./media/message_image')

    myfile = request.FILES.get('image_message')
    print(myfile)
    filename = fs.save(myfile.name, myfile)
    uploaded_file_url = fs.url(filename)

    return HttpResponse( uploaded_file_url)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы