国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

React Native expo項目使用expo-image-picker上傳圖片

這篇具有很好參考價值的文章主要介紹了React Native expo項目使用expo-image-picker上傳圖片。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

?app.json:

React Native expo項目使用expo-image-picker上傳圖片,web前端,react native,javascript,前端

https://docs.expo.dev/versions/latest/sdk/imagepicker/文章來源地址http://www.zghlxwxcb.cn/news/detail-615781.html

React Native expo項目使用expo-image-picker上傳圖片,web前端,react native,javascript,前端

{
  "expo": {
    "plugins": [
      [
        "expo-image-picker",
        {
          "photosPermission": "The app accesses your photos to let you share them with your friends."
        }
      ]
    ]
  }
}

?我的RN代碼:

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


  const handleUploadAvatar = async () => {
    try {
      let result = await ImagePicker.launchImageLibraryAsync({
        mediaTypes: ImagePicker.MediaTypeOptions.All,
        base64: true,
        //allowsEditing: true,
        //aspect: [4, 3],
        //quality: 1,
      })
      if (!result.canceled) {
        const formData = new FormData()
        let uri = result.assets[0].uri
        let uriArr = uri.split('/')
        let name = uriArr[uriArr.length - 1]
        console.log(uri)
        setAvatar(uri)
        formData.append('file', {
          uri,
          name,
          //type: result.assets[0].type,
          type: 'image/jpeg',
        })
        Api.h5.uploadFile(formData).then((res) => {
          console.log(res)
          if (res.code === 200) {
            console.log('成功')
          }
        })
      } else {
        console.log('取消文件選擇')
      }
    } catch (error) {
      console.log('選擇文件時出錯', error)
    }
  }




        <View style={style.mRegisterRow}>
          <View style={style.mRegisterAvavtarTextWrap}>
            <Text style={style.mRegisterAvavtarText}>頭像</Text>
          </View>
          {avatar ? (
            <TouchableWithoutFeedback onPress={handleUploadAvatar}>
              <Image
                source={{ uri: avatar }}
                style={style.mRegisterAvatar}
              ></Image>
            </TouchableWithoutFeedback>
          ) : (
            <View style={style.mRegisterUploadIcoWrap}>
              <Icon
                name={'add'}
                onPress={handleUploadAvatar}
                style={style.mRegisterUploadIcon}
              ></Icon>
            </View>
          )}
        </View>
  uploadFile: (data) => common({ url: urls.h5.uploadFile, data, method: 'post', headers: { 'content-type': 'multipart/form-data' } }),

?官方RN代碼:

React Native expo項目使用expo-image-picker上傳圖片,web前端,react native,javascript,前端

import React, { useState, useEffect } from 'react';
import { Button, Image, View, Platform } from 'react-native';
import * as ImagePicker from 'expo-image-picker';

export default function ImagePickerExample() {
  const [image, setImage] = useState(null);

  const pickImage = async () => {
    // No permissions request is necessary for launching the image library
    let result = await ImagePicker.launchImageLibraryAsync({
      mediaTypes: ImagePicker.MediaTypeOptions.All,
      allowsEditing: true,
      aspect: [4, 3],
      quality: 1,
    });

    console.log(result);

    if (!result.canceled) {
      setImage(result.assets[0].uri);
    }
  };

  return (
    <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
      <Button title="Pick an image from camera roll" onPress={pickImage} />
      {image && <Image source={{ uri: image }} style={{ width: 200, height: 200 }} />}
    </View>
  );
}

后端node接收文件上傳:

const multer = require('multer')

const storage = multer.diskStorage({
  destination: (req, file, cb) => {
    const NODE_ENV = process.env.NODE_ENV || 'development'
    let tempPath = ''
    if (NODE_ENV === 'development') {
      tempPath = '/temp/uploadForDev/upload'
    } else if (NODE_ENV === 'production') {
      tempPath = '/temp/uploadForProd/upload'
    } else if (NODE_ENV === 'codesandbox') {
      tempPath = 'uploadForCodesandbox/upload'
    }
    cb(null, tempPath)
  },
  filename: (req, file, cb) => {
    cb(null, `${Date.now()}-${file.originalname}`)
  },
})

const uploadImgMulter = multer({ storage })

//上傳
const uploadFile = (req, res) => {
  res.send({
    code: 200,
    data: { 
      ...req.file, 
      filename: 'upload/' + req.file.filename 
    },
    message: '上傳成功',
  })
}



  app.post(urls.light.uploadFile, uploadImgMulter.single('file'),  (req, res) => commonGroup({ req, res, myRoleGroup: roleGroup.notNeeedLogin, callback: uploadFile }) )

React Native expo項目使用expo-image-picker上傳圖片,web前端,react native,javascript,前端

React Native expo項目使用expo-image-picker上傳圖片,web前端,react native,javascript,前端

?React Native expo項目使用expo-image-picker上傳圖片,web前端,react native,javascript,前端

chatgpt的回答

React Native expo項目使用expo-image-picker上傳圖片,web前端,react native,javascript,前端

?React Native expo項目使用expo-image-picker上傳圖片,web前端,react native,javascript,前端


?expo-image-picker 圖片上傳

要使用Expo的ImagePicker庫進行圖片上傳,您可以按照以下步驟操作。

首先,確保您已在項目中安裝了Expo的ImagePicker庫。

expo install expo-image-picker

然后,您可以使用以下代碼來選擇圖片并上傳:

import React, { useState, useEffect } from 'react';
import { Button, Image, View } from 'react-native';
import * as ImagePicker from 'expo-image-picker';

const ImagePickerExample = () => {
  const [image, setImage] = useState(null);

  useEffect(() => {
    (async () => {
      // 請求權(quán)限
      const { status } = await ImagePicker.requestMediaLibraryPermissionsAsync();
      if (status !== 'granted') {
        console.log('拒絕訪問圖片庫權(quán)限!');
      }
    })();
  }, []);

  const pickImage = async () => {
    let result = await ImagePicker.launchImageLibraryAsync({
      mediaTypes: ImagePicker.MediaTypeOptions.Images,
      allowsEditing: true,
      aspect: [4, 3],
      quality: 1,
    });

    console.log(result);

    if (!result.cancelled) {
      // 設(shè)置選擇的圖片
      setImage(result.uri);

      // 上傳圖片的邏輯
      // ...
    }
  };

  return (
    <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
      <Button title="選擇圖片" onPress={pickImage} />
      {image && <Image source={{ uri: image }} style={{ width: 200, height: 200, marginTop: 20 }} />}
    </View>
  );
};

export default ImagePickerExample;

此示例使用Button和Image組件創(chuàng)建一個簡單的界面,點擊按鈕將觸發(fā)選擇圖片的邏輯。選擇圖片后,將通過設(shè)置useState來更新圖像狀態(tài),并將圖像顯示在屏幕上。

在pickImage函數(shù)中,使用ImagePicker.launchImageLibraryAsync方法來打開本地圖庫,您可以根據(jù)自己的需求配置options參數(shù)。選擇圖片后,將在控制臺中打印結(jié)果。您可以根據(jù)需要將選中的圖片上傳到服務(wù)器。

請注意,在使用ImagePicker之前,您需要在app.json文件中的expo.permissions字段中添加相應(yīng)的權(quán)限(例如:READ_EXTERNAL_STORAGE)。

希望這可以幫助到您!如果您有任何其他問題,請隨時提問。

使用圖片絕對路徑,把圖片上傳到后端

要使用圖片的絕對路徑將其上傳到后端,您可以使用FormData對象來創(chuàng)建一個包含文件的表單數(shù)據(jù),并使用fetch函數(shù)將該數(shù)據(jù)發(fā)送到后端。

以下是一個使用絕對路徑上傳圖片的示例代碼:

import React, { useState } from 'react';
import { Button, Image, View } from 'react-native';
import * as ImagePicker from 'expo-image-picker';

const ImagePickerExample = () => {
  const [image, setImage] = useState(null);

  const pickImage = async () => {
    let result = await ImagePicker.launchImageLibraryAsync({
      mediaTypes: ImagePicker.MediaTypeOptions.Images,
      allowsEditing: true,
      aspect: [4, 3],
      quality: 1,
    });

    if (!result.cancelled) {
      // 設(shè)置選擇的圖片
      setImage(result.uri);

      // 上傳圖片到后端
      uploadImage(result.uri);
    }
  };

  const uploadImage = async (uri) => {
    // 創(chuàng)建FormData對象
    const formData = new FormData();
    formData.append('image', { uri, name: 'image.jpg', type: 'image/jpeg' });

    try {
      const response = await fetch('https://your-api-endpoint', {
        method: 'POST',
        body: formData,
        headers: {
          'Content-Type': 'multipart/form-data',
        },
      });

      if (response.status === 200) {
        console.log('圖片上傳成功');
      } else {
        console.log('圖片上傳失敗');
      }
    } catch (error) {
      console.log('上傳圖片時出錯', error);
    }
  };

  return (
    <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
      <Button title="選擇圖片" onPress={pickImage} />
      {image && <Image source={{ uri: image }} style={{ width: 200, height: 200, marginTop: 20 }} />}
    </View>
  );
};

export default ImagePickerExample;

uploadImage函數(shù)中,我們創(chuàng)建了一個FormData對象并使用append方法將文件添加到表單數(shù)據(jù)中。我們指定了文件的名稱為image.jpg,文件類型為image/jpeg。然后,我們使用fetch函數(shù)將該表單數(shù)據(jù)發(fā)送到后端的API端點。

請將https://your-api-endpoint替換為您實際的后端API的地址。您還可以根據(jù)需要配置其他請求參數(shù)。

注意:在使用fetch發(fā)送請求時,確保設(shè)置了正確的請求頭Content-Typemultipart/form-data,以便服務(wù)器正確解析請求。

希望這可以幫助到您!如果您有任何其他問題,請隨時提問。

?參考鏈接:

https://chat.xutongbao.top/

https://docs.expo.dev/versions/latest/sdk/imagepicker/

到了這里,關(guān)于React Native expo項目使用expo-image-picker上傳圖片的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 創(chuàng)建react native項目的筆記

    創(chuàng)建react native項目的筆記

    本項目適用于react native@0.72 react@18.2 添加 npm install react-native-gesture-handler ##接入第三支付 https://open.weixin.qq.com/

    2024年02月12日
    瀏覽(24)
  • React native 已有項目升級兼容web

    React native 已有項目升級兼容web

    ?概念 | webpack 中文文檔 | webpack 中文文檔 | webpack 中文網(wǎng) ?深入理解Webpack及Babel的使用 - 掘金 Introduction to React Native for Web // React Native for Web Webpack 是一個現(xiàn)代的 JavaScript 應(yīng)用程序的靜態(tài)模塊打包工具,它將應(yīng)用程序所依賴的各種資源(js、css、圖片等)視為模塊,通過 loader

    2024年02月16日
    瀏覽(25)
  • React Native 集成到iOS原有的項目上

    React Native 集成到iOS原有的項目上

    集成到現(xiàn)有原生應(yīng)用 把 React Native 組件集成到 iOS 應(yīng)用中有如下幾個主要步驟: 配置好 React Native 依賴和項目結(jié)構(gòu)。 了解你要集成的 React Native 組件。 使用 CocoaPods,把這些組件以依賴的形式加入到項目中。 創(chuàng)建 js 文件,編寫 React Native 組件的 js 代碼。 在應(yīng)用中添加一個RC

    2024年02月12日
    瀏覽(20)
  • graalvm安裝并使用native-image

    graalvm安裝并使用native-image

    下載graalvm,可以直接去官網(wǎng)下載 https://www.graalvm.org/downloads/ github地址 https://github.com/graalvm/graalvm-ce-builds/releases/tag/vm-22.1.0 這里以jdk11為例 https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-22.1.0/graalvm-ce-java11-windows-amd64-22.1.0.zip native-image的jar https://github.com/graalvm/graalvm-ce-builds/r

    2024年02月06日
    瀏覽(24)
  • 探索React Native認證實戰(zhàn)示例項目:打造安全的移動應(yīng)用體驗

    項目地址:https://gitcode.com/hezhii/react-native-auth-example 在移動開發(fā)領(lǐng)域,React Native以其跨平臺和高效性能而備受青睞。如果你正在尋找一個直觀的、基于React Native的身份驗證實現(xiàn)示例,那么這個項目—— react-native-auth-example ,將會是你的理想之選。 react-native-auth-example 是一個簡單

    2024年04月27日
    瀏覽(29)
  • 重啟React Native老項目的奇幻之旅:填坑實錄與解決方案分享

    重啟React Native老項目的奇幻之旅:填坑實錄與解決方案分享

    這兩天為了重啟五年前基于 React Native(版本 0.59.9)開發(fā)的老項目,經(jīng)過各種填坑查詢等操作,最終把它成功地運行起來了。 在這篇文章中,我將詳述那些遭遇的挑戰(zhàn)以及對應(yīng)的解決方案,以期為同樣面臨此類困境的開發(fā)者提供寶貴的經(jīng)驗參考。 這個項目涉及到的環(huán)境基本版

    2024年04月16日
    瀏覽(20)
  • 使用Flutter的image_picker插件實現(xiàn)設(shè)備的相冊的訪問和拍照

    使用Flutter的image_picker插件實現(xiàn)設(shè)備的相冊的訪問和拍照

    在應(yīng)用開發(fā)時,我們有很多場景要使用到更換圖片的功能,即將原本的圖像替換設(shè)置成其他的圖像,從設(shè)備的相冊或相機中選擇圖片或拍照的方式來更換圖像。那么用Flutter要如何實現(xiàn)從設(shè)備的相冊或相機中選擇圖片或拍照呢? 其實很簡單一個插件就能解決,而且使用起來也

    2024年02月14日
    瀏覽(47)
  • 使用GraalVM native-image 編譯SpringBoot3全過程

    使用GraalVM native-image 編譯SpringBoot3全過程

    本文記錄了使用native-image編譯SpringBoot3.0.3的過程及遇到的問題。其中一些問題也是網(wǎng)上很多朋友遇到,我在實際操作的過程也遇到過同樣的問題,在此做一記錄。 目錄 一、編譯環(huán)境準備 1.1 安裝GraalVM 1.2 安裝native-image 1.3 IDE設(shè)置 1.4?Visual Studio 2022 1.5?pom.xml文件 二、使用nati

    2024年02月11日
    瀏覽(23)
  • React Native Camera的使用

    React Native Camera是一個用于在React Native應(yīng)用中實現(xiàn)相機功能的庫。它允許你訪問設(shè)備的攝像頭,并捕獲照片和視頻。 安裝 安裝完成后,你需要鏈接React Native Camera庫到你的項目中??梢允褂靡韵旅钸M行鏈接: 安裝和鏈接完成后,你需要在你的代碼中導入React Native Camera庫:

    2024年02月13日
    瀏覽(24)
  • React Native Maps的使用

    React Native Maps是一個用于在React Native應(yīng)用中顯示地圖的庫。它提供了許多功能,如顯示地圖、標記位置、繪制多邊形等。以下是React Native Maps的使用步驟: 首先,你需要在你的React Native項目中安裝React Native Maps庫。可以使用以下命令進行安裝: 安裝完成后,你需要鏈接React N

    2024年02月13日
    瀏覽(17)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包