gpt4 book ai didi

c# - 上传文件报错 415 Unsupported Media Type

转载 作者:太空宇宙 更新时间:2023-11-03 11:57:33 32 4
gpt4 key购买 nike

我知道已经有一个 similar question , 但并没有解决上述错误。

这是我在 API Controller 中的 PUT 操作,在 Swagger 中运行良好:

[HttpPut("{id}/upload")]
public async Task<IActionResult> UploadFile(string id, IFormFile file)
{
// codes using id above are omitted, nothing to do with the error

var path = Path.Combine(
Directory.GetCurrentDirectory(),
"wwwroot",
file.FileName
);

using (var stream = new FileStream(path, FileMode.Create))
{
await file.CopyToAsync(stream);
}

return Ok();
}

下面是我的 Angular 网页中的代码:

HTML

<input type="file" (change)="setFile($event.target.files)"/>

<button (click)="save()"> Save </button>

typescript

forUpload: File = null;
@Input() someModel: SomeModel;

// setting of file
setFile(myFile: File){
if (myFile === null){
return;
}
this.forUpload = myFile[0];
}

// saving
save() {
const addFileFnc = this.theService.addFile.bind(this.theService);
addFileFnc(this.someModel, this.forUpload).subscribe(
() => { this.ref.close(); },
(e) => { console.log(e); }
);
}

而且,我的服务是:

addFile(someModel: SomeModel, myFile: File): Observable<any> {
return this.http.put(`${api_url}/api/somemodels/${someModel.id}/upload`, {
id: someModel.id,
file: myFile
});
}

我还使用 FormData 尝试回答上述问题,我将我的 forUpload 文件附加到 FormData 但不幸的是,同样错误。如果我在媒体类型中没有任何类型的设置,我该如何解决这个问题?

最佳答案

你的代码加上之前的答案就差不多搞定了。我不想更改 Controller 中的参数,但有一些要添加的内容,即 FromForm 属性。所以这将是您的新 Controller :

[HttpPut("{id}/upload")]
public async Task<IActionResult> UploadFile(string id, [FromForm] IFormFile file)
{
// codes here
}

我同意之前关于使用 FormData 的回答,但我不会对您的 setFile() 进行任何更改,只对 typescript< 添加一些内容/strong>:

forUpload: File = null;
@Input() someModel: SomeModel;

save() {

const addFileFnc = this.theService.addFile.bind(this.theService);

const formdata = new FormData();
formdata.append("id", this.someModel.id);
formdata.append("file", this.forUpload);

addFileFnc(formdata).subscribe(
() => { this.ref.close(); },
(e) => { console.log(e); }
);
}

我没有附加整个 someModel,而是只附加了您的 someModel.id,因为我注意到它是您在服务中唯一使用的东西,它将是变成这样:

addFile(formdata: FormData): Observable<any> {
return this.http.put(`${api_url}/api/somemodels/${formdata.get("id")}/upload`, formdata);
}

您的 Error 400 Bad Request(如 in the comments here 所说)是因为 service 中的 formdata,基于之前的回答您关注的是发送 JSONify formdata 而不是 FormData 本身。

关于c# - 上传文件报错 415 Unsupported Media Type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58910851/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com