简体   繁体   English

使用 fetch 尝试上传图片的 formData 问题

[英]formData problems using fetch to attempt image upload

I am attempting to upload an image from React Native to a server.我正在尝试将图像从 React Native 上传到服务器。 I have used a 'picker' (react-native-document-picker) to select the image and that part seems to be functional.我对图像使用了“选择器”(react-native-document-picker),该部分似乎可以正常工作。 Here is the code I am working with:这是我正在使用的代码:

import React, { Component } from "react";
import { Button, Dimensions, Image, Platform, SafeAreaView, ScrollView, StyleSheet, Text, TextInput, TouchableOpacity, View } from "react-native";

import DocumentPicker from 'react-native-document-picker';

const SERVER_URL = 'http://localhost:3000';

export default class Images extends Component {
constructor(props) {
  super(props);

  this.state = {
    photo: null,
  };
}

   ChoosePhoto = async () => {

    try {

    const res = await DocumentPicker.pickSingle({ type: [DocumentPicker.types.images], });

    this.setState({ photo: res });  //Set the state to the selected file attributes

    } catch (err) {
    this.setState({ photo: null });
  
      if (DocumentPicker.isCancel(err)) {
        alert('Canceled');  //user canceled the document selection
      } else {
        alert('Selection Error: ' + JSON.stringify(err));  //Unknown Error
      }  //Handling any exception (if any)

    }  //try routine

  };

  UploadPhoto = async () => {

   if (this.state.photo != null) {

   //if file selected then create FormData

   const fileToUpload = this.state.photo.uri;

   const data = new FormData();
   data.append('name', 'Image Upload');
   data.append('type', this.state.photo.type);
   data.append('file_attachment', fileToUpload);

   console.log("data.name is: " + data.name);  //"undefined"
   console.log("data.type is: " + data.type);  //"undefined"
   console.log("data.file_attachment is: " + data.file_attachment);  //"undefined"
   console.log("fileToUpload is: " + fileToUpload);  //correct

     //****UPLOAD TO SERVER

     fetch(`${SERVER_URL}/api/upload`, {
       method: 'POST',
       body: data,
       headers: { 'Content-Type': 'multipart/form-data' }
     })
     .then((response) => response.json())
     .then((response) => {
      console.log('Upload success: ', response);
      alert('Upload success!');
      this.setState({ photo: null });
     })
     .catch((error) => {
      this.setState({ photo: null });
      this.setState({ notify: "Pending Upload..." });
      console.log('Upload error: ', error);
      alert('Upload failed!');
     });

     //****

   } else {
   alert('Please Select File to Upload...');
   }  //'this.state.photo' is NOT NULL...OR NOT...

  };

...

}  //class 'Images' Component

As can be seen in my comments, the 'console.log' statements following the definition of the FormData and the '.append' statements are all "undefined" (in the 'UploadPhoto' function)...even the 'name' which was set to a simple string ('Image Upload') is not defined.从我的评论中可以看出,FormData 定义之后的“console.log”语句和“.append”语句都是“未定义的”(在“UploadPhoto”函数中)......甚至是“名称”被设置为未定义的简单字符串(“图像上传”)。 So obviously the entire FormData command is totally non-functional.很明显,整个 FormData 命令完全不起作用。

I have spent days trying to figure this...difficult to believe in 2023 something like this should be so convoluted.我花了好几天时间试图弄清楚这个……很难相信在 2023 年这样的事情会如此令人费解。 I have previously had little difficulty uploading images from web applications before however this is my first attempt at using 'FormData' and attempting a file upload from React Native.我以前在从 web 应用程序上传图像时遇到过一些困难,但这是我第一次尝试使用“FormData”并尝试从 React Native 上传文件。

Any advice is greatly appreciated.任何意见是极大的赞赏。 I thank you in advance.我提前谢谢你。

To access values in FormData use get .要访问 FormData 中的值,请使用get

const data = new FormData();
data.append('name', 'Image Upload');
console.log("data.name is: " + data.get("name"));

To upload a file上传文件

const body = new FormData()
body.append('file', {uri: 'path/to/content', type: 'type', name: 'name'})
const response = await fetch('url', {
  method: 'POST',
  headers: {
    'Content-Type': 'multipart/form-data',
  },
  body: body
})

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 使用Formdata React Native将图像上传到Firebase - Upload image to firebase using Formdata React Native 在 react-native 中使用 formdata 上传图片 - Upload image using formdata in react-native React-native 上传 Image 作为 FormData - React-native upload Image as FormData 使用图像数组创建FormData并在React-Native中使用rn-fetch-blob上传 - Create FormData with image array and uploading using rn-fetch-blob in React-Native 使用 axios / fetch 在 React Native 中发送 formData - Sending formData using axios / fetch in react native 在 React Native (Expo) 中上传图片,使用 fetch 导致 400 错误 - Image upload in React Native (Expo), using fetch results in 400 error 使用抓取上传图像在React Native(iOS)中不起作用 - Upload image using fetch doesn't work in React Native (iOS) 发送图像数组以在react-native中获取formData - send image array for fetch formData in react-native 无法通过本机中的表单数据发送/上传带有 axios 的图像 - Unable to send/upload image with axios through formdata in react native 在React-Native中使用XMLHttpRequest和FormData将图像上传到服务器 - Upload image to server with XMLHttpRequest and FormData in React-Native
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM