在react-native中上传blob/文件,内容为空

2023-11-29

我能够从网络浏览器成功上传包含正确内容的 blob,但是当我从反应本机执行此操作时,上传文件为空。这是代码:

    async function doit() {
        const data = new FormData();
        data.append('str', 'strvalue');
        data.append(
          'f',
          new File(['foo'], 'foo.txt', {type: 'text/plain'}),
        );

        await fetch('http://localhost:3002/upload', {
            method: 'POST',
            body: data
          });
    }

然而,从react-native执行相同的代码,它会上传,但文件是空的。

这是我用来测试这个的 Node.js 服务器。加载 http://localhost:3002 会给你一个名为“上传”的按钮。单击它即可从网络上传。结果截图如下。

var multiparty = require('multiparty');
var http = require('http');

http
  .createServer(function (req, res) {
    if (req.url === '/upload' && req.method === 'POST') {
      console.log('multipart here');
      var form = new multiparty.Form();

      form.parse(req, function (err, fields, files) {
        console.log(require('util').inspect({ fields, files }, false, null, true));
        res.setHeader('Content-Type', 'application/json');
        res.end(JSON.stringify({ bar: true }));
      });

      return;
    }

    console.log('here');
    // show a file upload form
    res.writeHead(200, { 'content-type': 'text/html' });
    res.end(
        `
        <script>
        async function doit() {
            const data = new FormData();
            data.append('str', 'strvalue');
            data.append(
              'f',
              // new File([new Blob(['asdf'], {type : 'text/plain'})], 'filename.txt'),
              new File(['foo', 'what', 'the', 'hell'], 'foo.txt', {type: 'text/plain'}),
            );

            const res = await fetch('http://localhost:3002/upload', {
                method: 'POST',
                body: data
              });
              console.log(JSON.stringify(res, null, 4));
        }
        document.addEventListener('DOMContentLoaded', () => {
            document.getElementById('b').addEventListener('click', doit, false)
        }, false);
        </script>
        <button type="button" id="b">upload it</button>
        `
    );
  })
  .listen(3002);

从 Web 浏览器中我们看到节点服务器记录了这一点,注意文件大小为 14。

web browser upload shows file size of 14 in node server

然而从react-native我们看到文件大小为0:

enter image description here


我最近在发帖时遇到了同样的问题image从反应本机应用程序到服务器。但是,我可以通过将文件的名称和类型附加到formData实例。

在这里,uri论证uploadImageAsync从上一屏幕作为路由参数传递。

const uploadImageAsync = (uri: string) => {
  const apiUrl = "https://www.yourserver.com/image";
  let uriParts = uri.split(".");
  let fileType = uriParts[uriParts.length - 1];
  let formData = new FormData();
  formData.append("img", {
    uri,
    name: `photo.${fileType}`,
    type: `image/${fileType}`,
  });

  formData.append("description", "HEY");
  let options = {
    method: "POST",
    body: formData,
    headers: {
      Accept: "application/json",
      "Content-Type": "multipart/form-data",
      Authorization: "Bearer " + accessToken,
    },
  };
  return fetch(apiUrl, options);
};

这是图像配置。

 const photoData = await camera.takePictureAsync({
      base64: true,
      exif: false,
    });
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在react-native中上传blob/文件,内容为空 的相关文章

随机推荐

  • TYPO3 TCA在后端对象保存后执行挂钩

    如果通过后端保存对象 我想操作一些值并执行自定义函数 我通过谷歌搜索发现我必须在我的ext localconfphp GLOBALS TYPO3 CONF VARS SC OPTIONS t3lib class t3lib tcemain
  • fget 是如何工作的?

    我在用海湾合作委员会 Ubuntu 4 8 2 19ubuntu1 4 8 2我正在编写一个非常简单的脚本 以字符串作为输入并使用一些自定义消息打印相同的内容 首先用户输入 T 获取字符串的次数 然后通过以下方式获取输入fgets 我用了t
  • 如何从 Intellij IDEA 部署 tomcat/webapps 文件夹

    我正在通过 Intellij IDEA Tomcat 集成测试 Web 应用程序 基于 Apache Wicket 在那里我注意到 web 应用程序认为它在 tomcat 的 bin 文件夹中运行 另外当我打电话给ServletContex
  • 打开另存为窗口并从单元格填充文件名和文件路径

    我正在尝试打开 另存为 窗口并从单元格填充文件名和文件路径 这是我的代码 它填充文件名并在文件路径中打开 另存为 窗口 但是当我单击 保存 时 文件永远不会显示在应该保存的位置 Sub Save Adds formula to show f
  • 应用内屏幕截图并附加到电子邮件,无需保存到库中

    我想知道如果我想让我的应用程序能够通过按 UI 按钮来截取屏幕截图并立即弹出邮件撰写并通过电子邮件发送屏幕截图而不将其保存到照片库中 我想知道应该使用什么代码 非常感谢 您需要向您的项目添加两个框架 QuartzCore and Messa
  • 从函数返回一个值?

    我正在尝试编写一个函数来分析一些文本和正则表达式模式 例子 import re def foo input pattern text pattern re compile r input patern re I find pattern f
  • 在 php codeigniter 视图中循环

    我得到一个像这样的数组 query data this gt flights gt checkflight form data getting data this gt load gt view payment query sending
  • 从 pandas df 中的列创建二元组

    我在 pandas 数据框中有这个测试表 Leaf category id session id product id 0 111 1 987 3 111 4 987 4 111 1 741 1 222 2 654 2 333 3 321
  • 如何让 Java 检测反向引用,同时尊重字边界?

    我的任务是创建一个正则表达式 用它可以检测多次出现的同一个单词 并将它们全部替换为第一次出现的单词 到目前为止我想出的是 b w b s 1 1 然而 这会检测到例如第二horse in horse horseracing 我只想检测完全匹
  • 如何通过 Java 将二进制数据从 AS3 发送到文件系统?

    我有 AS3 中的 XML 数据 需要对其进行压缩 在我的 Java Google App Engine servlet 上进行验证 然后将其保存到 Google Cloud Storage 中的文件中 稍后该文件将由 AS3 客户端打开并
  • 如何在simulink中创建计数器

    我想计算我的信号变为零的次数 例如 将脉冲信号作为输入 我想要一个变量来计算脉冲变为零的次数 我正在疯狂地思考某事 有人可以帮助我吗 谢谢 figure 1 is a pulse counter model and figure 2 is
  • JFreeChart:自定义 BoxAndWhisker 图表

    我开始使用JFreeChart做一些策划 我希望我的图表如下图所示 我非常接近使用BoxAndWhisker chart 然而 有些事情我仍然想改变 有没有办法去掉盒子 这样我就只有中间线了 如何向条形图添加标签 另外 由于某种原因 y 轴
  • Spring Boot 和自定义 404 错误页面

    在我的 Spring Boot 应用程序中 我尝试配置自定义错误页面 例如 404 我在应用程序配置中添加了以下 Bean Bean public EmbeddedServletContainerCustomizer containerCu
  • 如何在 scons 中每次构建后运行一些代码?

    我正在寻找一种方法来注册诸如 scons 中的最终构建回调之类的东西 例如 我现在正在做这样的事情 def print build summary failures SCons Script GetBuildFailures notifyE
  • python plistlib 文件被可可值入侵?

    我正在使用 plistlib 在 OS X 中创建和更新一个简单的 plist 文件 挪威的一位测试人员从 plistlib 中收到错误 File axeomatic2 normal build pyi darwin aomDSP out0
  • PreferenceFragment 未从应用程序计费请求中获取 onActivityResult 调用

    我有一个首选项屏幕 向用户显示一个禁用广告的复选框 当用户第一次点击此按钮时 他们会看到一个应用内结算购买选项来禁用广告 我在这里面临的问题是我看不到任何方法将 onActivityResult 回调放入片段中 所以我有一个 Prefere
  • 使用 IE9 嵌入 WebBrowser 控件时覆盖 IE 设置

    我有一个应用程序 用 MFC 用 C 编写 但我认为这不是特别相关 它嵌入了 Internet Explorer ActiveX WebBrowser 控件 用于显示一些 HTML 页面 一项要求始终是使用应用程序的字体名称和大小设置作为
  • 为某些值类型数组调用 JsonConverter 中的默认 JsonSerializer

    我试图大致实现这里描述的内容 在 JsonConverter 中递归调用 JsonSerializer 简而言之 要检查正在反序列化的值 请在我自己的代码中使用它 或者将其交给默认的反序列化器 该示例使用了一个巧妙的技巧来避免递归调用相同的
  • 在PDF中嵌入SVG(使用JS将SVG导出为PDF)

    起点 我没有可以提供除静态文件之外的任何内容的服务器 我的目录中有一个 SVG 元素 动态创建 我想导出为矢量格式 最好是 PDF 或 SVG 我开始考虑使用已经存在的库jsPDF随着下载 效果很好 不幸的是 这不支持 SVG 只支持文本
  • 在react-native中上传blob/文件,内容为空

    我能够从网络浏览器成功上传包含正确内容的 blob 但是当我从反应本机执行此操作时 上传文件为空 这是代码 async function doit const data new FormData data append str strval