私はこれに類似したstackoverflowに関する複数の質問を見ましたが、私は以下の問題を解決できませんでした。Angular 2からDjango Serverにファイルをアップロードするには? (enctype = "multipart/form-data")
私は正常にこのHTMLフォームを使用してファイルをアップロードすることができます。
<form method="POST" action="//127.0.0.1:8000/upload" enctype="multipart/form-data">
<input type="file" name="myfile" required>
<button type="submit">Upload</button>
</form>
、ここでは、ファイルをサーバー側で処理される方法です。
views.py
def upload_file(request):
f = request.FILES['myfile']
with open('media/name.jpg', 'wb+') as destination:
for chunk in f.chunks():
destination.write(chunk)
return HttpResponse('Done')
すべてがこの時点まで完全に動作します。ファイルがアップロードされ、ディスク上にname.jpgとして保存されます。今、上記のhtmlを置き換えてURLリダイレクトなしでファイルを投稿したいと思います(角度2のhttpを使用)。
ファイルupload.component.tsは
import { Component, ElementRef } from '@angular/core';
import {Http, Headers, RequestOptions, Response} from '@angular/http';
@Component({
selector: 'file-upload',
template: '<input type="file" name="myfile">'
})
export class FileUploadComponent {
constructor(private http: Http, private el: ElementRef) {}
upload() {
var headers = new Headers();
headers.append('Content-Type','multipart/form-data');
let inputEl = this.el.nativeElement.firstElementChild;
if (inputEl.files.length > 0) {
let file:FileList = inputEl.files[0];
this.http
.post('http://127.0.0.1:8000/upload', file, {headers: headers})
.subscribe();
}
}
とこのようにそれを呼び出す:this answer、ここに私の現在の実装で、次の私が言って400不正な要求エラーを取得
<file-upload #myfile (change)="myfile.upload()"></file-upload>
(リクエストの本文を解析できません)、この行で発生すると思います。
f = request.FILES['myfile']
request.FILESにはenctype = "multipart/form-data"が必要なので、私の最初の勘違いは、multipart/form-dataを正しく渡していないことです。
多くの古い議論では、httpでのアップロードファイルが明らかにサポートされていないため、XMLHttpRequestの使用を提案しています。私もそれを試して、同じエラーが発生します。
何か提案がありがとうございます。