Делаю чат на 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'