如何在本机中上传多部分文件?

时间:2020-06-30 06:56:14

标签: android typescript react-native axios

我正在尝试使用react-native中的axios将多部分文件上传到后端服务器。我正在使用数组设置图像,但是我不知道如何将对象Object转换为Object File。后端服务器需要文件类型。我该怎么办??

期望日志:[目标文件]

结果日志:[object Object]

我的前置密码在这里

//...//
   interface ImageFile {
   uri: string;
   name: string;
   type: string;
}
   const [images, setImages] = useState([] as ImageFile[]);

//. using image picker.//
   ImagePicker.showImagePicker(options, async (response) => {
     if (response.didCancel) {
       return;
     }
     else if (response.error) {
       Alert.alert('에러: ' + response.error);
     }
     else {
       //이미지가 무사히 선택된것
       //기존에 있던 이미지에 더해서 배열을 더해나감
       // console.log(response.data);
       setImages([...images, { uri: response.uri, name: response.fileName, type: response.type }]);
     }
     console.log(images);

//post code//
  async function toPost() {
   let post: Post;
   try {
     post = await Post.create({ content: comment } as Post);
   } catch (e) {
     console.log(e);
     console.log('포스트 생성 불가')
     return;
   }

   try {
     let a = 0
     for (let image of images) {
       console.log('image[0]: ' + JSON.stringify(image))
       console.log('image[1]: ' + image.type)
       console.log('test: ' + test)
       await post.createMedia(test, 'IMAGE');
       a++;
     }
   } catch (e) {
     console.log(e.response.data);
     console.log('이미지 생성 불가')
     return;
   }

   try {
     post.status = 'PUBLIC';
     await post.save();
   } catch (e) {
     console.log(e);
     console.log('포스트 저장 불가');
     return;
   }

   console.log(`저장된 글: ${post.content}, 이미지 개수: ${post.medias.length}`)
 }

和我的api代码

public async createMedia(file, type: PostMediaType) {
    const formData = new FormData();
    formData.append('file', { uri: file.uri, name: file.name, type: file.type } as File);
    const postMedia = new PostMedia((
      await getAxios().post(`/posts/${this.id}/${type}s`, formData, { headers: { 'Content-Type': 'multipart/form-data' } })).data);
    if (!this.medias) this.medias = await this.getMedias();
    else this.medias.push(postMedia);
    return postMedia;
  }

0 个答案:

没有答案