Angular 角2文件上传?
我正在尝试在Angular 2中进行文件上传。尝试Angular 角2文件上传?,angular,file-upload,Angular,File Upload,我正在尝试在Angular 2中进行文件上传。尝试 let file:FileList = inputEl.files[0]; console.log(file); this.http.post(url, file) .map(res => { return res.headers.get("content-type"); }) .catch(err => {
let file:FileList = inputEl.files[0];
console.log(file);
this.http.post(url, file)
.map(res => {
return res.headers.get("content-type");
})
.catch(err => {
return Observable.throw(err);
})
.subscribe((res) => { // <-- this function
console.log(res)
});
let file:FileList=inputEl.files[0];
console.log(文件);
this.http.post(url,文件)
.map(res=>{
返回res.headers.get(“内容类型”);
})
.catch(错误=>{
返回可观察。抛出(错误);
})
.subscribe((res)=>{/Http请求仅在您订阅它们时发送
this._http.post("url", "file")
.map(res => {
return res.headers.get("content-type");
})
.catch(err => {
return Observable.throw(err);
})
.subscribe((res) => { // <-- this function
console.log(res)
})
this.\u http.post(“url”、“文件”)
.map(res=>{
返回res.headers.get(“内容类型”);
})
.catch(错误=>{
返回可观察。抛出(错误);
})
.subscribe((res)=>{/您的http服务文件:
import { Injectable } from "@angular/core";
import { ActivatedRoute, Router } from '@angular/router';
import { Http, Headers, Response, Request, RequestMethod, URLSearchParams, RequestOptions } from "@angular/http";
import {Observable} from 'rxjs/Rx';
import { Constants } from './constants';
declare var $: any;
@Injectable()
export class HttpClient {
requestUrl: string;
responseData: any;
handleError: any;
constructor(private router: Router,
private http: Http,
private constants: Constants,
) {
this.http = http;
}
postWithFile (url: string, postData: any, files: File[]) {
let headers = new Headers();
let formData:FormData = new FormData();
formData.append('files', files[0], files[0].name);
// For multiple files
// for (let i = 0; i < files.length; i++) {
// formData.append(`files[]`, files[i], files[i].name);
// }
if(postData !=="" && postData !== undefined && postData !==null){
for (var property in postData) {
if (postData.hasOwnProperty(property)) {
formData.append(property, postData[property]);
}
}
}
var returnReponse = new Promise((resolve, reject) => {
this.http.post(this.constants.root_dir + url, formData, {
headers: headers
}).subscribe(
res => {
this.responseData = res.json();
resolve(this.responseData);
},
error => {
this.router.navigate(['/login']);
reject(error);
}
);
});
return returnReponse;
}
}
onChange(event) {
let file = event.srcElement.files;
let postData = {field1:"field1", field2:"field2"}; // Put your form data variable. This is only example.
this._service.postWithFile(this.baseUrl + "add-update",postData,file).then(result => {
console.log(result);
});
}
<input type="file" class="form-control" name="documents" (change)="onChange($event)" [(ngModel)]="stock.documents" #documents="ngModel">
print_r($_FILES);
您的html代码:
import { Injectable } from "@angular/core";
import { ActivatedRoute, Router } from '@angular/router';
import { Http, Headers, Response, Request, RequestMethod, URLSearchParams, RequestOptions } from "@angular/http";
import {Observable} from 'rxjs/Rx';
import { Constants } from './constants';
declare var $: any;
@Injectable()
export class HttpClient {
requestUrl: string;
responseData: any;
handleError: any;
constructor(private router: Router,
private http: Http,
private constants: Constants,
) {
this.http = http;
}
postWithFile (url: string, postData: any, files: File[]) {
let headers = new Headers();
let formData:FormData = new FormData();
formData.append('files', files[0], files[0].name);
// For multiple files
// for (let i = 0; i < files.length; i++) {
// formData.append(`files[]`, files[i], files[i].name);
// }
if(postData !=="" && postData !== undefined && postData !==null){
for (var property in postData) {
if (postData.hasOwnProperty(property)) {
formData.append(property, postData[property]);
}
}
}
var returnReponse = new Promise((resolve, reject) => {
this.http.post(this.constants.root_dir + url, formData, {
headers: headers
}).subscribe(
res => {
this.responseData = res.json();
resolve(this.responseData);
},
error => {
this.router.navigate(['/login']);
reject(error);
}
);
});
return returnReponse;
}
}
onChange(event) {
let file = event.srcElement.files;
let postData = {field1:"field1", field2:"field2"}; // Put your form data variable. This is only example.
this._service.postWithFile(this.baseUrl + "add-update",postData,file).then(result => {
console.log(result);
});
}
<input type="file" class="form-control" name="documents" (change)="onChange($event)" [(ngModel)]="stock.documents" #documents="ngModel">
print_r($_FILES);
1.记住,当您提交带有文件的表单数据时,标题应该是空白的
let headers=新的headers();
let options=newrequestoptions({headers:headers});
2.其余部分可从上面的示例@Bharat Chauhan中学习
3.我用所有其他标题进行了测试,但如果它的左键为空,它就工作了!
第一步。
第二步。
fileChangeEvent(e:any):无效{
操作:可观察;
let fileList:fileList=e.target.files;
let file:file=fileList[0];
让formData:formData=newformdata();
formData.append('file',file,file.name);
commentOperation=this.test1Service\uU1.submitComment(formData);
commentOperation.subscribe(
文件上传=>{
console.log(文件上传)
},
错误=>{
//记录错误(如果有)
控制台日志(err);
}
);
}
步骤3:
提交建议(正文:任何):可观察{
let headers=新的headers();
let options=newrequestoptions({headers:headers});
使用post请求返回this.http.post(this.commentsUrl,body,options)/…文件
.map((res:Response)=>res.json())/…并对响应调用.json()以返回数据
.catch((error:any)=>Observable.throw(error.json().error | | |'Server error'));/…如果有错误
}
第4步:PHP:
标题('Access-Control-Allow-Origin:');
如果($\u服务器['REQUEST\u METHOD']!='POST'){
echo json_编码(数组('status'=>false));
出口
}
$path='uploads/';
如果(isset($\u文件['file'])){
$originalName=$_文件['file']['name'];
$ext='....pathinfo($originalName,pathinfo_扩展名);
$generatedName=md5($_FILES['file']['tmp_name'])。$ext;
$filePath=$path.$generatedName;
如果(!是可写的($path)){
echo json_编码(数组(
“状态”=>false,
'msg'=>'目标目录不可写。'
));
出口
}
如果(移动上传的文件($文件['file']['tmp\u名称],$filePath)){
echo json_编码(数组(
“状态”=>true,
“originalName”=>$originalName,
“generatedName”=>$generatedName
));
}
}
否则{
回声json_编码(
数组('status'=>false,'msg'=>No file upload')
);
出口
}
文件更改(事件){
}
我的参考资料来自:
但是在将“内容类型”更改为“enctype”并将“event.target.files”更改为“event.srcmelement.files”后,它开始工作了。您是否真的订阅了这篇文章?@jornsharpe实际上是angular 2的新手。能够完成简单的表单提交,但无法集中精力完成文件上传,也不确定java中的结构上传文件的代码…这并不能回答我的问题。你能给出一个答案吗?在.post(…)之后是什么
?这可能就是问题所在;你必须订阅Observable才能让它们做任何事情。我建议你看Angular 2 http的教程。Observable是惰性的,只有在订阅回调时才会执行。谢谢,我现在可以看到POST调用发生,但我仍然无法看到文件上传,可以吗你可以帮我弄清楚我的POST呼叫到底应该是什么样子,我想上传一个文件及其一些元数据。我还没有自己上传一个文件,所以我不清楚它应该是什么样子。这看起来像一个完整的示例。请查看: