当前位置:首页 > React

react native 如何上传照片

2026-03-10 21:32:16React

上传照片的基本流程

React Native 中上传照片通常涉及选择图片、获取图片数据、发送到服务器三个步骤。可以使用 react-native-image-pickerexpo-image-picker 等库实现。

安装依赖

使用 react-native-image-picker

yarn add react-native-image-picker
# 或
npm install react-native-image-picker

对于 iOS,需在 Podfile 所在目录执行:

npx pod-install

配置权限

Android 需在 AndroidManifest.xml 添加:

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

iOS 需在 Info.plist 添加:

<key>NSPhotoLibraryUsageDescription</key>
<string>需要访问相册上传照片</string>
<key>NSCameraUsageDescription</key>
<string>需要相机权限拍摄照片</string>

选择图片代码示例

import {launchImageLibrary} from 'react-native-image-picker';

const options = {
  mediaType: 'photo',
  quality: 0.8,
};

const pickImage = async () => {
  const result = await launchImageLibrary(options);
  if (result.didCancel) {
    console.log('用户取消选择');
  } else if (result.errorCode) {
    console.log(result.errorMessage);
  } else {
    const uri = result.assets[0].uri;
    const type = result.assets[0].type || 'image/jpeg';
    const name = result.assets[0].fileName || `photo_${Date.now()}.jpg`;
    return {uri, type, name};
  }
};

上传到服务器

使用 FormDatafetch 上传:

const uploadImage = async (image) => {
  const formData = new FormData();
  formData.append('file', {
    uri: image.uri,
    type: image.type,
    name: image.name,
  });

  try {
    const response = await fetch('https://your-api-endpoint.com/upload', {
      method: 'POST',
      body: formData,
      headers: {
        'Content-Type': 'multipart/form-data',
      },
    });
    return await response.json();
  } catch (error) {
    console.error('上传失败:', error);
  }
};

完整调用示例

const handleUpload = async () => {
  const image = await pickImage();
  if (image) {
    const result = await uploadImage(image);
    console.log('上传结果:', result);
  }
};

替代方案:Expo 项目

使用 expo-image-picker

expo install expo-image-picker

代码示例:

react native 如何上传照片

import * as ImagePicker from 'expo-image-picker';

const pickImage = async () => {
  const result = await ImagePicker.launchImageLibraryAsync({
    mediaTypes: ImagePicker.MediaTypeOptions.Images,
    allowsEditing: true,
    quality: 0.8,
  });
  if (!result.canceled) {
    return result.assets[0];
  }
};

注意事项

  • Android 11+ 需要使用 READ_EXTERNAL_STORAGE 替代 WRITE_EXTERNAL_STORAGE
  • 真实项目中建议添加上传进度指示器
  • 大文件上传应考虑分片上传策略
  • 服务端需要处理 multipart/form-data 格式的请求

分享给朋友:

相关文章

react 如何继承

react 如何继承

在React中,组件继承并非推荐的设计模式(官方更推崇组合优于继承),但技术上仍可通过以下方式实现类似效果: 使用ES6类继承 通过extends关键字继承父组件类,子组件可访问父组件的生命周期方法…

react如何运行

react如何运行

运行React项目的步骤 安装Node.js 确保系统已安装Node.js(建议版本12以上),可从官网下载并安装。Node.js自带npm包管理器,用于后续依赖安装。 创建React项目 使用官方…

如何安装react

如何安装react

安装React的方法 方法一:使用Create React App(官方推荐) Create React App是官方提供的脚手架工具,适合快速搭建React项目。确保已安装Node.js(建议版本≥…

react如何检测

react如何检测

检测 React 应用的方法 使用 PropTypes 进行类型检查 PropTypes 是 React 内置的类型检查工具,用于验证组件的 props 是否符合预期。在开发环境中,PropTypes…

如何构建react

如何构建react

构建 React 项目的步骤 安装 Node.js 和 npm 确保系统已安装 Node.js(包含 npm)。可通过命令行验证: node -v npm -v 使用 Create React Ap…

如何调试react

如何调试react

调试 React 应用的方法 使用 React Developer Tools 安装浏览器扩展(Chrome/Firefox),通过组件树查看组件状态、props 和 hooks。支持实时编辑 pro…