我想在同一个请求中实现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))集成.
解决方法
所以我一直在尝试这样做,对于看起来非常简单的东西,我最终找到了解决方案的麻烦.希望有些同事帮助我,我们想出了一些合理的东西.
这个文档帮助了我们很多:https://developer.mozilla.org/en-US/docs/Web/API/FormData/Using_FormData_Objects
这是Angular代码:
class SomeService { someMethod(filetoUpload: File,name: string,version: string) { const formData: FormData = new FormData(); formData.append('file',filetoUpload,filetoUpload.name); const overrides = { name,version,}; const blobOverrides = new Blob([JSON.stringify(overrides)],{ type: 'application/json',}); formData.append('overrides',blobOverrides); const req = new HttpRequest('POST',`some-url`,formData); return this.http.request(req); } }
原文地址:https://www.jb51.cc/js/158999.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。