当前位置: 首页 > 知识库问答 >
问题:

无法在angular 7中使用FormData通过Ajax发送文件

祁聪
2023-03-14

我使用ASP. NET Core作为后端,我试图在角7中使用ajax发送文件。我已经创建了一个FormData类的对象,并使用append方法将该文件添加到该对象中。

Error: {"headers":{"normalizedNames":{},"lazyUpdate":null},"status":415,"statusText":"Unsupported Media Type","url":"https://localhost:44319/Api/TimeLinePost","ok":false,"name":"HttpErrorResponse","message":"Http failure response for https://localhost:44319/Api/TimeLinePost: 415 Unsupported Media Type","error":{"type":"https://tools.ietf.org/html/rfc7231#section-6.5.13","title":"Unsupported Media Type","status":415,"traceId":"0HLLKF4AT3QD7:00000005"}}

这是我的角度代码:

export class StatusComponent {
  selectedImage: File = null;
  constructor(private http: HttpClient, @Inject('BASE_URL') private baseUrl: string) {

  }
  onImageSelected(event) {
    this.selectedImage = <File>event.target.files[0];
  }
  update() {
    const fd = new FormData();
    fd.append('image', this.selectedImage, this.selectedImage.name);
    this.http.post<boolean>(this.baseUrl + 'Api/TimeLinePost', fd).subscribe(
      result => {
      },
      error => {
        alert('Ops! Somthing went wrong!');
        console.log(`Error: ${JSON.stringify(error)}`)
      }
    )
  }
}

这是我的api:

[HttpPost]
public bool Post(IFormFile image)
{ 
    return true;
}

共有1个答案

吕德业
2023-03-14

它可以通过两种方式解决。

1) 将[FromForm]属性添加到操作参数(如本问题中所回答):

[HttpPost]
public bool Post([FromForm] IFormFile image)
{ 
    return true;
}

2) 在配置中添加SetCompatibilityVersion(CompatibilityVersion.Version\u 2\u 2)。它将自动解决绑定问题:

public void ConfigureServices(IServiceCollection services)
{
   services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
 类似资料:
  • 问题内容: 我制作了一个脚本,该脚本使用$ .ajax和FormData将两个表单对象传递给PHP。一个表单对象是文本,另一个是文件。它作为独立脚本运行良好。但是,将其作为插件添加到Wordpress后,它一直给我。 我不能序列化formdata,仅仅是因为那样我将无法将文件传递给PHP中的回调函数。 ajax调用之前涉及FormData的JS: 上面的这一部分是100%正确的。 Ajax呼叫:

  • 本文向大家介绍通过Ajax使用FormData对象无刷新上传文件方法,包括了通过Ajax使用FormData对象无刷新上传文件方法的使用技巧和注意事项,需要的朋友参考一下 写在前面:本文说的这个方案有浏览器兼容性问题;所有主流浏览器的较新版本已经支持这个对象了,比如Chrome 7+、Firefox 4+、IE 10+、Opera 12+、Safari 5+,对兼容性比较敏感的网站慎用。 在工作中

  • 问题内容: 我正在使用ajax提交包含数组,文本字段和文件的多部分表单。 我将每个VAR附加到主数据中 然后我使用ajax函数将其发送到PHP文件以存储在sql DB中。 但是在PHP方面,变量(即数组)显示为字符串。 当我不使用ajax作为表单数据发送它,而是使用简单的选项时,确实在PHP端将它作为数组获得,但是后来我也无法发送文件。 有什么办法吗? 问题答案: 您有几种选择: 将其转换为JSO

  • 我正在使用ajax提交一个包含数组、文本字段和文件的多部分表单。 我将每个VAR附加到主数据中,如下所示 然后使用ajax函数将其发送到PHP文件中存储在sql DB中。 但是在PHP端,变量(一个数组)显示为字符串。 当我没有将它作为表单数据与ajax一起发送,而是使用简单的选项时,我会在PHP端将它作为一个数组来获取,但这样我就不能同时发送文件。 有什么解决办法吗?

  • 问题内容: 我该如何发布文件并输入字符串数据?例如,我还有许多其他 隐藏的输入数据 ,需要将它们发送到服务器, html, 使用下面的这段代码,我仅设法发送文件数据 ,而不 发送隐藏的输入数据。 jQuery, server.php 结果, 我希望得到这个结果, 可能吗? 问题答案: 添加了一个循环,并在中将更改为,以供对象引用附加到。

  • 本文向大家介绍通过Ajax方式上传文件使用FormData进行Ajax请求,包括了通过Ajax方式上传文件使用FormData进行Ajax请求的使用技巧和注意事项,需要的朋友参考一下 通过传统的form表单提交的方式上传文件: Html代码  不过传统的form表单提交会导致页面刷新,但是在有些情况下,我们不希望页面被刷新,这种时候我们都是使用Ajax的方式进行请求的: Js代码  如上,通过$(