猿问

多形零件类型在 Angular 中不起作用

设置:使用 Angular 6


http 版本 - "@angular/http": "^6.1.9",


我尝试使用多部分表单数据作为标题发布 csv 文件,但它使请求失败。似乎浏览器总是将内容类型发送为“application-json”。我尝试了互联网上提供的许多方法来更改内容类型,但没有任何效果。我尝试的其中一些将内容类型设置为未定义,这会在 http.js 文件中引发错误,让浏览器检测到如此忽略的设置内容类型也失败了。请帮助我


groupBulkUpload(file) {  

    const formData = new FormData();

    formData.append('file', file);

    // commented the below lines

    // formData.append('file', file, { type: 'text/csv' }));

    // let header = new HttpHeaders()

    // .set("Content-Type" , `multipart/form-data; boundary=${formData._boundary}`)

    // let options = { headers: header };


    let url = this.getAnyConfigUrl("rate");

    return this.http.post(url,formData)

  }


 //calling the api

 const blob = new Blob([csvData]);

    var f = new File([blob] , "filename.csv", {type: 'text/csv', lastModified: new Date().getDate()})

    this._config.groupBulkUpload(f).subscribe(val=>{

      console.log(val)

    })

更新:浏览器始终将其视为 Json 类型。所以它无法检测到我猜测的 CSV 格式。任何想法 ?


请求标头:

请求有效载荷:

http://img.mukewang.com/62aaefb00001253a10030237.jpg

梦里花落0921
浏览 106回答 1
1回答

天涯尽头无女友

请检查您是否使用拦截器来拦截http请求并添加JSON数据类型。您在 append 方法中缺少第三个参数(这是可选的),但您可以将文件名作为第三个参数传递。对于文件formData.append,您可以将文件名作为第三个参数传递。如果我们省略blobtype 的第三个参数,那么默认文件名将是blob.参数:name 其数据包含在 value 中的字段的名称。value 字段的值。这可以是 USVString 或 Blob(包括 File 等子类)。如果没有指定这些值,则将值转换为字符串。filename 可选 当 Blob 或 File 作为第二个参数传递时,报告给服务器的文件名(USVString)。Blob 对象的默认文件名是“blob”。File 对象的默认文件名是文件的文件名。试试这个并从拦截器中删除这个调用。groupBulkUpload(file) {    const formData = new FormData();    formData.append('file', file, "filename.csv");    let url = this.getAnyConfigUrl("rate");    return this.http.post(url, formData);}//calling the apiconst blob = new Blob([csvData]);var f = new File([blob], "filename.csv", { type: 'text/csv', lastModified: new Date().getDate() })this._config.groupBulkUpload(f).subscribe(val => {    console.log(val)})
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答