微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

NativeScript Vue 发送带有表单数据的请求multipart/form-data

如何解决NativeScript Vue 发送带有表单数据的请求multipart/form-data

我的应用程序中有一个案例,我需要将数据作为表单数据发送到服务器。该数据包括一条消息和一个可选的文件列表。我面临的问题是,在发送请求时,它的格式不正确。

请求有效载荷

预期(浏览器中具有相同请求的示例)

Expected Request Payload

实际(在 NativeScript 中运行时产生的请求)

Actual Request Payload

实际结果是负载以某种方式进行了 URL 编码。

代码示例

sendData({ id,message,files }) {
  const config = {
    headers: {
      'Content-Type': 'multipart/form-data'
    }
  };

  const payload = new FormData();
  payload.append('message',message);

  if (files && files.length > 0) {
    files.forEach((file) => {
      payload.append(`files`,file,file.name);
    });
  }

  return AXIOS_INSTANCE.post(
    `/api/save/${id}`,payload,config
  );
}

从上面可以看出,我正在使用 axios 并且我正在尝试使用 FormData 来格式化数据。从我的研究来看,NativeScript 过去似乎不支持通过 XHR 的二进制数据 - 但是从 this merge request on GitHub 看来,它似乎已经在大约一年前得到修复。

所以我怀疑我做错了什么,也许有替代使用 FormData方法,否则我不应该将 axios 用于这个特定请求?

版本号

  • nativescript 6.8.0
  • tns-android 6.5.3
  • tns-ios 6.5.3

解决方法

Nativescript 的 background-http 支持多部分表单数据。

请参阅下文了解其如何配置为进行分段上传

var bghttp = require("nativescript-background-http");
var session = bghttp.session("image-upload");
var request = {
  url: url,method: "POST",headers: {
    "Content-Type": "application/octet-stream"
  },description: "Uploading "
};

var params = [
  { name: "test",value: "value" },{ name: "fileToUpload",filename: file,mimeType: "image/jpeg" }
];
var task = session.multipartUpload(params,request);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。