मैं Sharing.shareAsync() का उपयोग करके रिएक्ट एक्सपो में एक स्थानीय फ़ाइल साझा करने का प्रयास कर रहा हूँ। MediaLibrary.getAssetInfoAsync() (Android पर) का उपयोग करके फ़ोटो जानकारी पुनर्प्राप्त की गई:

"filename": "IMG_20200414_190459.jpg",
  "height": 2074,
  "id": "896",
  "localUri": "file:///storage/emulated/0/DCIM/Camera/IMG_20200414_190459.jpg",
  "location": null,
  "mediaType": "photo",
  "modificationTime": 1586905500000,
  "uri": "file:///storage/emulated/0/DCIM/Camera/IMG_20200414_190459.jpg",
  "width": 4608,

Sharing.shareAsync(photo.localUri, {mimeType: 'image/jpeg'} को कॉल करने पर मुझे त्रुटि मिलती है Failed to share the file: Failed to find configured root that contains /storage/emulated/0/DCIM/Camera/IMG_20200414_190459.jpg। इसलिए मैंने file: के बाद एक स्लैश को हटाने का प्रयास किया और त्रुटि प्राप्त की Not allowed to read file under given URL.

ऐप में CAMERA_ROLL और CAMERA अनुमतियां हैं और app.json में शामिल हैं:

"android": {
      "permissions": [
        "CAMERA",
        "CAMERA_ROLL",
        "READ_EXTERNAL_STORAGE",
        "WRITE_EXTERNAL_STORAGE"
      ]
    }

एक्सपो डॉक्स का कहना है कि मुझे एक स्थानीय फाइल साझा करने में सक्षम होना चाहिए। सुनिश्चित नहीं है कि मैं क्या गलत कर रहा हूं या आगे क्या प्रयास करना है। टीआईए.

0
David Canora 16 अप्रैल 2020, 03:18

2 जवाब

सबसे बढ़िया उत्तर

ऐसा लगता है कि यह Sharing API में एक बग हो सकता है। आप फ़ाइल को अपनी दस्तावेज़ निर्देशिका में कॉपी करके और फिर वहां से साझा करके इसके आसपास काम कर सकते हैं। यहां एक उदाहरण दिया गया है: https://snack.expo.io/@notbrent/ शेयर-मीडिया-लाइब्रेरी-फ़ोटो

नीचे दिए गए उदाहरण से प्रासंगिक कोड:

// Placeholder for getting asset from MediaLibrary
let results = await MediaLibrary.getAssetsAsync({ first: 1 });
let asset = results.assets[0];

// Use FileSystem to copy the image from its original location to the app document directory
let assetUriParts = asset.uri.split("/");
let assetName = assetUriParts[assetUriParts.length - 1];
let uri = `${FileSystem.documentDirectory}/${assetName}`;
await FileSystem.copyAsync({
  from: asset.uri,
  to: uri,
});

// Share the image from the uri that you copied it to
Sharing.shareAsync(uri);
2
brentvatne 16 अप्रैल 2020, 01:28

यह शेयर एपीआई के साथ एक समस्या है। आप एक्सपो-इमेज-हेरफेर का उपयोग करके इस पर काबू पा सकते हैं। उदाहरण के तौर पे:

import * as ImageManipulator from "expo-image-manipulator";

const openShareDialogAsync = async () => {
    let imageProc = await ImageManipulator.manipulateAsync(yourImageUri);
    // this returns an object including the uri
    await Sharing.shareAsync(imageProc.uri);
}
0
David Buck 17 अगस्त 2020, 00:04