ReactNative实现图片上传功能(兼容安卓和ios)

最近在学习ReactNative,ReactNative可以基于目前大热的开源JavaScript库React.js来开发iOS和Android原生App,今天就学习一下ReactNative实现图片上传功能

在查看ReactNative的官方文档的时候,你会发现其实Fackbook是没有提供图片上传功能的。

如果我们的项目里需要使用图片上传(用js 实现图片上传),那我们有没有什么办法呢?

通过搜索React-native的github, 会发现里面有这么一篇文章:https://github.com/facebook/react-native/issues/5308
解决方案:

采用FormData来实现,FormData 的API参考:https://developer.mozilla.org/zh-CN/docs/Web/API/FormData

利用FormData对象,你可以使用一系列的键值对来模拟一个完整的表单,然后使用XMLHttpRequest发送这个"表单".

那么我们就来看看在RN里怎么做,贴代码:

js 复制代码
function uploadImage(uri) { // 参数为图片本地路径
  let formData = new FormData();
  let file = {uri: uri, type: 'multipart/form-data', name: 'a.jpg'};

  formData.append('images', file);

  fetch(url, {
    method: 'POST',
    headers: {
      'Content-Type': 'multipart/form-data',
    },
    body: formData,
  })
    .then(response => response.text())
    .then(responseData => {
      console.log('responseData', responseData);
    })
    .catch(error => {
      console.error('error', error);
    });
}
  1. 首先我们new了一个FormData
  2. 创建一个file对象,uri是什么?如下示例:
    Android图片路径示例: file:///storage/emulated/0/Pictures/eb645893-4c00-44a3-a9b4-a2116e955f7c.jpg
    ios图片路径示例: /Users/ashleydw/Library/Developer/CoreSimulator/Devices/23EE88D0-6E91-43AD-A3B6-06F87698C5A8/data/Containers/Data/Application/A73E68D3-7424-4301-9934-AD0F8251C1EB/tmp/7803DA8A-0E40-4FCB-A593-884805878172.jpg
  3. 设置header
js 复制代码
'Content-Type':'multipart/form-data', 
  1. 将创建好的FormData赋值给body

这样我们就完成了图片上传的功能。

各位也可以参考我这篇文章做个拍照功能,拍照完成后得到图片的url本地地址,然后结合这篇文章做个拍照上传服务器功能

也可以参考这篇文章将图片剪切后得到url本地地址,然后剪切完成后上传至服务器

相关推荐
localbob5 分钟前
Pico 4XVR 1.10.13安装包下载与安装教程 ico 4XVR最新版下载、4XVR 1.10.13 APK安装包、Pico VR看电影软件、4XVR完整版安装教程、Pico 4播放器推荐、V
android·vr·vr播放器·vr眼镜播放器下载·pico 4xvr·4xvr下载·pico 4xvr最新版安装包
eleven409627 分钟前
穿透内容审查与阻断:基于 DNS TXT 记录的动态服务发现与客户端安全加固实践
网络协议·ios·app
峥嵘life31 分钟前
Android16 EDLA【CTS】CtsConnectivityMultiDevicesTestCases存在fail项
android·学习
大傻^39 分钟前
SpringAI2.0 Null Safety 实战:JSpecify 注解体系与 Kotlin 互操作
android·开发语言·人工智能·kotlin·springai
游戏开发爱好者841 分钟前
React Native iOS 代码如何加密,JS 打包 和 IPA 混淆
android·javascript·react native·ios·小程序·uni-app·iphone
kcuwu.1 小时前
Python判断及循环
android·java·python
轩情吖1 小时前
MySQL之索引
android·数据库·mysql·b+树·索引·page·
2501_916007471 小时前
在非 Xcode 环境下完成苹果开发编译的记录 iOS 编译与调试
ide·vscode·ios·cocoa·个人开发·xcode·敏捷流程
1024小神1 小时前
记录xcode项目swiftui配置APP加载启动图
前端·ios·swiftui·swift
2501_915918412 小时前
iOS mobileprovision 描述文件管理,新建、下载和内容查看
android·ios·小程序·https·uni-app·iphone·webview