【发布时间】:2017-04-04 03:02:33
【问题描述】:
我在 stackoverflow 上看到了多个与此类似的问题,但我无法解决以下问题。
我可以使用这个 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 重定向的文件(使用 angular 2 http)。在this answer 之后,这是我当前的实现:
file-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();
}
}
然后这样称呼它:
<file-upload #myfile (change)="myfile.upload()"></file-upload>
我收到 400 bad request 错误消息(无法解析请求正文),我认为它发生在这一行:
f = request.FILES['myfile']
由于 request.FILES 需要 enctype="multipart/form-data",我的第一个预感是我没有正确传递 multipart/form-data。
许多较早的讨论建议使用 XMLHttpRequest,因为当时显然不支持使用 http 上传文件。我也试过了,还是一样的错误。
任何建议将不胜感激。
【问题讨论】:
标签: django angular asyncfileupload angular2-http