【发布时间】:2017-02-03 06:33:54
【问题描述】:
我想在同一个请求中实现 post 文件和 Json 数据。
以下是上传文件代码:
upload(url:string,file:File):Observable<{complate:number,progress?:number,data?:Object}>{
return Observable.create(observer => {
const formData:FormData = new FormData(),
xhr:XMLHttpRequest = new XMLHttpRequest();
formData.append('uploadfile', file);
formData.append("_csrf", this.tokenService.getCsrf());
xhr.open('POST',url, true);
xhr.onreadystatechange = () => {
if (xhr.readyState === 4) {
if (xhr.status === 200) {
observer.next({complate:1,progress:100,data:JSON.parse(xhr.response)});
observer.complete();
} else {
observer.error(xhr.response);
}
}
};
xhr.upload.onprogress = (event) => {
observer.next({complate:0,progress:Math.round(event.loaded / event.total * 100)});
};
const headers=new Headers();
let token: string = localStorage.getItem('access-token');
xhr.setRequestHeader('Authorization', `Bearer ${token}`);
xhr.send(formData);
}).share();
如何与 angular2 集成 http.post(url, JSON.stringify(data)).
【问题讨论】:
-
angular2 目前不支持 http.post 中的文件:github.com/angular/http/issues/75 但您仍然可以使用
arraybuffer或Blob发送文件。另外,要实现进度,请检查以下答案:stackoverflow.com/a/37159100/4102561 -
使用
Blob?有例子吗? -
我没有示例,但它需要非常复杂的操作(从表单中获取文件、从文件中创建 blob、将 blob 添加到表单等)。我认为您的解决方案是目前最好的解决方案。 (仅使用基本 xhr 请求)。
-
我也面临同样的问题。我需要提交带有文本和文件数据的表单。有什么方法可以在 Angualr JS 2 中实现?
标签: angular typescript file-upload