Я пробовал сейчас так много разных способов, я не могу загрузить файл с Angular 7 в Django Backend - не должно быть так сложно?!
Мой .html :
<div class="form-group">
<label for="file">Choose File</label>
<input type="file"
id="file"
(change)="handleFileInput($event.target.files)">
</div>
uploader.component.ts
fileToUpload: File = null;
handleFileInput(files: FileList) {
this.fileToUpload = files.item(0);
this.uploadFileToActivity();
}
uploadFileToActivity() {
this.uploaderService.post(this.fileToUpload).subscribe(data => {
// do something, if upload success
}, error => {
console.log(error);
});
}
my uploader.service.ts , который также показывает ход загрузки
public post( fileToUpload: File): Observable<number>{
const url = '/api/upload/';
var subject = new Subject<number>()
const req = new HttpRequest('POST', url, fileToUpload, {
reportProgress: true,
});
this.httpClient.request(req).subscribe(event => {
if (event.type === HttpEventType.UploadProgress) {
const percentDone = Math.round(100 * event.loaded / event.total);
subject.next(percentDone);
} else if (event instanceof HttpResponse) {
subject.complete();
}
});
return subject.asObservable();
}
А в бэкэнде Django:
views.py
def post(request):
if request.method == 'POST':
form = UploadFileForm(request.POST, request.FILES)
if form.is_valid():
#handle_uploaded_file(request.FILES['file'])
return HttpResponseRedirect('/success/url/')
else:
form = UploadFileForm()
return render(request, 'index.html', {'form': form})
forms.py:
class UploadFileForm(forms.Form):
title = forms.CharField(max_length=50)
file = forms.FileField()
и urls.py:
urlpatterns = [
path(r'api/upload/', views.post, name='post'),
]
Когда я запустил это, я получаю
zone.js:2969 POST http://127.0.0.1:8000/api/upload/ 403 (Forbidden)
Нужно ли включать токен авторизации? Если да: как?
Большое спасибо!
РЕДАКТИРОВАТЬ: После полезного ввода от Мартина Урбанека я проверил запрос загрузки файла в браузере. Вот результат:
![inspection of upload request from angular to django in browser](https://i.stack.imgur.com/xB6CJ.png)
Кто-нибудь знает, что мне нужно изменить в моем коде выше, чтобы эта работа работала?