如何在拍照后立即将照片传输到 x-www-form-urlencoded EXPO

Posted

技术标签:

【中文标题】如何在拍照后立即将照片传输到 x-www-form-urlencoded EXPO【英文标题】:How to transfer photos to x-www-form-urlencoded immediately after taking a picture EXPO 【发布时间】:2020-02-19 01:41:03 【问题描述】:

我想拍照,将其保存到相册并立即发送图像。 (不要从相册中选择。

拍摄当前图片,保存到相册,查看uri没有问题。

x-www-form-urlencoded 发送过程无法正常工作。

我认为发送API的格式可能有问题。

邮递员也附上。 (在 Postman 中没问题。)

 takePictureAndCreateAlbum = async () => 
    const  uri  = await this.camera.takePictureAsync();
    console.log('uri', uri);
    const asset = await MediaLibrary.createAssetAsync(uri);
    console.log('asset', asset);

    const filename = asset.filename;

    MediaLibrary.createAlbumAsync('Expo', asset)

      // POST API
      .then(() => 

        var file = new FormData();
        file.append(file: uri);

        return fetch(/* API_URL */,  
              method: 'POST',
              headers:

                  'Content-Type':'application/x-www-form-urlencoded',
                  'Accept': 'application/json'
              , body : file )

         .then((response) => response.text())
              .then((responseData) => 
                  console.log(responseData);
              )
              .done();

      )
      .catch(error => 
        Alert.alert('An Error Occurred!')
      );
  ;

Postman Header

Postman Body

【问题讨论】:

【参考方案1】:

当附加到FormData 实例时,第一个参数是字段名称(您的服务器将作为此文件的对象键获取的内容),第二个参数是以下形式的对象:


  uri: // The uri you received from the camera,
  type: // The file type (i.e.: image/png),
  name: // The file name

在你的情况下,它会是这样的:

// Split the uri by `.` (periods)
const uriParts = uri.split('.');
// Grab the file type at the end of the uri
const fileType = uriParts[uriParts.length - 1];

file.append('picture', 
  uri,
  type: `image/$fileType`,
  name: 'FILE-NAME.$fileType`
);

另外,发送文件时,Content-Type 标头应为multipart/form-data

【讨论】:

@bongjuri1551 请与我的建议分享您的代码。 var file = new FormData(); const uriParts = uri.split('.'); const fileType = uriParts[uriParts.length - 1]; file.append('图片', uri, type: image/$fileType, name: FILE-NAME.$fileType ); fetch(http://52.231.70.40/api/file/uploadReceipt/$ids.id/$ids.loginId, method: 'POST', headers: 'Content-Type': 'multipart/form-data' , body: file ) .then((response) => response.text()) .then((responseData) => console.log(responseData); console.log('file',file) ) .done(); ) 错误为 400,所需的请求部分“文件”不存在 @Nick Rameau @bongjuri1551 抱歉,不是要您将其发布在 cmets 中,而是要更新您的问题。

以上是关于如何在拍照后立即将照片传输到 x-www-form-urlencoded EXPO的主要内容,如果未能解决你的问题,请参考以下文章

我想实现安卓手机拍照后,照片自动同步到局域网没电脑。没有外网的情

微信拍照不保存相册怎么设置

如何在拍摄后立即在照片上绘图,然后保存到存储中

H5+和mui开发的app,拍照完成后如何将拍到的照片在页面中形成预览图

前端压缩图片代码,支持移动端和pc 端,还有拍照后获取到的照片

指定间隔定时拍照抓拍摄像头(机)FTP上传照片|内存卡存储 [WiFi/4G传输][太阳能电池供电方案]