मैं formData का उपयोग करके बैकएंड सर्वर पर छवि वितरित करने के लिए प्रतिक्रिया-मूल-छवि-पिकर नामक लाइब्रेरी का उपयोग करना चाहता हूं और इसे कंप्यूटर पर सहेजना चाहता हूं diskStorage

हालाँकि, इसका उपयोग करने में कुछ भ्रम है। अगर मैं अपने कोड का उपयोग करता हूं तो मुझे यह त्रुटि मिलती है:

मल्टी एरर: अनपेक्षित फील्ड एरर।

मैं कोड को कैसे ठीक कर सकता हूं?

यह मेरा कोड है

(सामने/तीसरा.जेएस)

    const Third = () => {
      const [imageSource, setImageSource] = useState(undefined);
      const dispatch = useDispatch();
     
      const options = {
        title: 'Load Photo',
        customButtons: [
          {name: 'button_id_1', title: 'CustomButton 1'},
          {name: 'button_id_2', title: 'CustomButton 2'},
        ],
        storageOptions: {
          skipBackup: true,
          path: 'images',
        },
      };

               const showCameraRoll = () => {
        launchImageLibrary(options, (response) => {
          if (response.error) {
            console.log('LaunchImageLibrary Error: ', response.error);
          } else {
            setImageSource(response.uri);
          }
               console.log('response.uri:', response.uri);

      // response.uri: file:///data/user/0/com.cookingrn/cache/rn_image_picker_lib_temp_5f6898ee-a8d4-48c9-b265-142efb11ec3f.jpg

          const form = new FormData();
          form.append('Files', {
            name: 'SampleFile.jpg', // Whatever your filename is
            uri: response.uri, //  file:///data/user/0/com.cookingrn/cache/rn_image_picker_lib_temp_5f6898ee-a8d4-48c9-b265-142efb11ec3f.jpg
            type: 'image/jpg', // video/mp4 for videos..or image/png etc...
          });

          dispatch({
            type: UPLOAD_IMAGES_REQUEST,
            data: form,
          });
        });
      };

      return (
        <Container>
          {imageSource && <Photo source={{uri: imageSource}} />}
          <ImagePickerButton onPress={showCameraRoll}>
            <Label>Show Camera Roll</Label>
          </ImagePickerButton>
        </Container>
      );
    };

    export default Third;

(बैकएंड/पोस्ट.जेएस)

    try {
      fs.accessSync('uploads');
    } catch (error) {
      console.log('uploads 폴더가 없으므로 생성합니다.');
      fs.mkdirSync('uploads');
    }

    const upload = multer({
      storage: multer.diskStorage({
        destination(req, file, done) {
          done(null, 'uploads');
        },
        filename(req, file, done) {
          const ext = path.extname(file.originalname);
          const basename = path.basename(file.originalname, ext);
          done(null, basename + '_' + new Date().getTime() + ext);
        },
      }),
      limits: {fileSize: 20 * 1024 * 1024},
    });

    router.post('/images', isLoggedIn, upload.array('image'), (req, res, next) => {
      // dispatch UPLOAD_IMAGES_REQUEST  POST /post/images
      res.json(req.files.map((v) => v.filename));
    });

(गाथा/index.js)

    function uploadImagesAPI(data) {
      return axios.post('/post/images', data);
    }

    function* uploadImages(action) {
      try {
        const result = yield call(uploadImagesAPI, action.data);
        yield put({
          type: UPLOAD_IMAGES_SUCCESS,
          data: result.data,
        });
      } catch (err) {
        console.error(err);
        yield put({
          type: UPLOAD_IMAGES_FAILURE,
          error: err.response.data,
        });
      }
    }
2
user15322469 24 अप्रैल 2021, 21:40

1 उत्तर

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

एक FormData बनाएं और उस फ़ॉर्म को request के मुख्य भाग में शामिल करके बैकएंड के लिए एक पोस्ट अनुरोध भेजें

const SendFileToBackend = (uri) => {
  const form = new FormData();
  form.append("Files", {
    name: "SampleFile.jpg", // Whatever your filename is
    uri: uri, //  file:///data/user/0/com.cookingrn/cache/rn_image_picker_lib_temp_5f6898ee-a8d4-48c9-b265-142efb11ec3f.jpg
    type: "image/jpg", // video/mp4 for videos..or image/png etc...
  });

  // Perform a Post request to backend server by putting `form` in the Body of the request
};
3
Kartikey 24 अप्रैल 2021, 21:49
J'ai un point de terminaison qui donne le corps de réponse mentionné ci-dessus et je validais la réponse avec le test comme - pm.expect("Name).to.equal("John"); et cette manière très statique de valider en écrivant le nom comme ("John") car la valeur sera modifiée à chaque demande à la place, je veux quelque chose qui puisse valider si la clé générée est une chaîne.par exemple - pm.expect("Name").to.equal("String"); alors comment est-il possible de vérifier si la valeur générée est une chaîne ou un entier car pour le numéro de contact ce sera un entier pm.expect("Numéro de contact).to.equal(Integer); s'il vous plaît suggérer quelque chose.
 – 
Kartikey
24 अप्रैल 2021, 22:28