文件未在服务器 ionic3 中上传
File not uploading in server ionic3
我有一个场景,我使用 ionic 从我的本地驱动器(类型 jpeg 或 png)上传图像文件到 API 端点。下面是我的代码:
fileupload.html -->
//---------------------------------------------------
<ion-item>
<ion-input type="file" accept="image/*" (change)="changeListener($event)"> </ion-input>
</ion-item>
fileupload.ts -->
changeListener($event):void{
this.file=$event.target.files[0];
console.log(this.file);
console.log("upload...");
let regData={"file":this.file};
console.log("REGDATAA"+JSON.stringify(regData));
this.jira.postAttachment("PM-3",regData).subscribe(dataa=>{
console.log(dataa);
});
}
provider.ts -->
public postAttachment(key,data):Observable<any>{
console.log(JSON.stringify(data))
return this.http.post(this.api+'/issue/'+key+'/attachments',JSON.stringify(data),{
headers: new HttpHeaders()
.append('Authorization', `Basic ${this.auth.getAuthString()}`)
.append('Content-Type','multipart/form-data';boundary="-------xe3rtyhrfds")
.append("X-Atlassian-Token", "no-check")
.append("User-Agent", "xx")
});
}
每次我发送文件时它都不采用路径并发送一个空的响应,这是下面的错误。
//----------------------------------------------------
[object File]: {lastModifiedDate: [date] Fri Sep 21 2018 17:42:46 GMT+0530 (India Standard Time), name: "download.jpg", size: 5056, type: "image/jpeg", webkitRelativePath: ""}
upload...
ion-dev.js (157,11)
REGDATAA{"file":{}}
ion-dev.js (157,11)
{"file":{}}
ion-dev.js (157,11)
ERROR [object Object]
我已经解决了 CORS 问题,同样没有问题。
当我使用 postman 发送相同的响应时,它成功了,这里是我在 Postman 中发送的内容。
Form-data
key - "file" (type file) value - "/path/to/my/file"
Headers
Content-type - application/json
x-attlassian token - no-check
谁能告诉我这里出了什么问题。
您必须将内容类型从 application/json
更改为 multipart/form-data
。您发送的是图像,而不是 json 文件。
最好的方法是将您的图像编码为 base64 并发送。一切都取决于您的服务器需要什么。
或者你可以试试这个。
const body = file;
const headers = new Headers({'Content-Type': 'image/jpg'});
return this.http.post(this.api+'/issue/'+key+'/attachments, body, {headers: headers}). ...
使用FormData
上传文件。
fileupload.ts
changeListener(event) {
const fd = new FormData();
this.file = event.target.files[0];
fd.append('file', this.file, this.file.name);
this.jira.postAttachment("PM-3",fd)
.subscribe(data => {
console.log(data);
});
}
provider.ts
postAttachment(key, fd): Observable<any> {
const httpOptions = {
headers: new HttpHeaders(
{ 'Content-Type': 'multipart/form-data' },
{ 'Authorization': `Basic ${this.auth.getAuthString()}` })
};
return this.http.post(this.api+'/issue/'+key+'/attachments', fd, httpOptions);
}
对于 AngularJS 上的一个问题,最终解决的问题是(类似的方法也可能对您有帮助):
创建一个隐藏的输入类型文件
在 changeListener 函数中设置它的值
之后从那里发送文件
- 由于文件输入的某些内置属性,我们将其值识别为 File/Blob 而不是许多 "complex" 组件使用的路径。
也如前所述将其作为多部分文件发送。
我有一个场景,我使用 ionic 从我的本地驱动器(类型 jpeg 或 png)上传图像文件到 API 端点。下面是我的代码:
fileupload.html -->
//---------------------------------------------------
<ion-item>
<ion-input type="file" accept="image/*" (change)="changeListener($event)"> </ion-input>
</ion-item>
fileupload.ts -->
changeListener($event):void{
this.file=$event.target.files[0];
console.log(this.file);
console.log("upload...");
let regData={"file":this.file};
console.log("REGDATAA"+JSON.stringify(regData));
this.jira.postAttachment("PM-3",regData).subscribe(dataa=>{
console.log(dataa);
});
}
provider.ts -->
public postAttachment(key,data):Observable<any>{
console.log(JSON.stringify(data))
return this.http.post(this.api+'/issue/'+key+'/attachments',JSON.stringify(data),{
headers: new HttpHeaders()
.append('Authorization', `Basic ${this.auth.getAuthString()}`)
.append('Content-Type','multipart/form-data';boundary="-------xe3rtyhrfds")
.append("X-Atlassian-Token", "no-check")
.append("User-Agent", "xx")
});
}
每次我发送文件时它都不采用路径并发送一个空的响应,这是下面的错误。
//----------------------------------------------------
[object File]: {lastModifiedDate: [date] Fri Sep 21 2018 17:42:46 GMT+0530 (India Standard Time), name: "download.jpg", size: 5056, type: "image/jpeg", webkitRelativePath: ""}
upload...
ion-dev.js (157,11)
REGDATAA{"file":{}}
ion-dev.js (157,11)
{"file":{}}
ion-dev.js (157,11)
ERROR [object Object]
我已经解决了 CORS 问题,同样没有问题。
当我使用 postman 发送相同的响应时,它成功了,这里是我在 Postman 中发送的内容。
Form-data
key - "file" (type file) value - "/path/to/my/file"
Headers
Content-type - application/json
x-attlassian token - no-check
谁能告诉我这里出了什么问题。
您必须将内容类型从 application/json
更改为 multipart/form-data
。您发送的是图像,而不是 json 文件。
最好的方法是将您的图像编码为 base64 并发送。一切都取决于您的服务器需要什么。
或者你可以试试这个。
const body = file;
const headers = new Headers({'Content-Type': 'image/jpg'});
return this.http.post(this.api+'/issue/'+key+'/attachments, body, {headers: headers}). ...
使用FormData
上传文件。
fileupload.ts
changeListener(event) {
const fd = new FormData();
this.file = event.target.files[0];
fd.append('file', this.file, this.file.name);
this.jira.postAttachment("PM-3",fd)
.subscribe(data => {
console.log(data);
});
}
provider.ts
postAttachment(key, fd): Observable<any> {
const httpOptions = {
headers: new HttpHeaders(
{ 'Content-Type': 'multipart/form-data' },
{ 'Authorization': `Basic ${this.auth.getAuthString()}` })
};
return this.http.post(this.api+'/issue/'+key+'/attachments', fd, httpOptions);
}
对于 AngularJS 上的一个问题,最终解决的问题是(类似的方法也可能对您有帮助):
创建一个隐藏的输入类型文件
在 changeListener 函数中设置它的值
之后从那里发送文件
- 由于文件输入的某些内置属性,我们将其值识别为 File/Blob 而不是许多 "complex" 组件使用的路径。
也如前所述将其作为多部分文件发送。