0

我正在使用Twilio 的 Conversations API在聊天中开发图像发送功能。图像发送在调试环境中的设备和模拟器上完美运行,但不适用于 iOS 和 Android (APK/IPA) 的发布版本。

选择图像的代码:

    function handlePickImage(){
        ImagePicker.openPicker({
            multiple: true,
            width: 300,
            height: 400,
            cropping: true,
          }).then(image => {
            var tmpObject = {};
            image.forEach(img => tmpObject[img.filename] = img)
            imagesData = {...tmpObject};
            onSend(messages, conversation)  
           }
         );
      }

发送图像的代码:

            for (const fileName in imagesData) {
                const form = new FormData();
                form.append('file', {
                    uri: imagesData[fileName].path,
                    type: imagesData[fileName].mime,
                    name: imagesData[fileName].filename,
                });
                form.append('ContentType', imagesData[fileName].mime);
                conversation.sendMessage(form)
                .then(i => {
                    console.log('Successfully sent media message. Form: ', objToStr(form['_parts'][0][1]))
                    alert('Successfully sent media message. Form: ' + objToStr(form['_parts'][0][1]))
                })
                .catch(err => { 
                    console.log('error sending media message. Form: ', objToStr(form['_parts'][0][1]), ' err: ', err)
                    alert('error sent media message. Form: ' + objToStr(form['_parts'][0][1]) + ' err: ' + err )
                });                  
            }
            imagesData = {}
        }

图片选择器的 URI 来自应用程序的内部存储缓存,类似于file:///data/user/0/app.package.name/cache/rn_image_picker_lib_temp_344443-34rf-34rf.png. 该类型是 mime 类型,看起来像image/png.

如果我将 URI 硬编码为来自网络的内容,例如https://picsum.photos/200,图像会在发布时发送。

这是错误的屏幕截图。如果我传递{media: base64string}给 sendMessage 函数,我可以在调试环境中重现此错误。所以不知何故在发布时,它无法理解FormData并相信它是{media: base64string}。它很可能与 URI 有关。Image这也不是权限问题,因为当使用同一个库从手机的图库中挑选图像时,图像确实显示在组件中。

相关包版本:

    "react": "16.13.1",
    "react-native": "0.63.4",
    "@twilio/conversations": "^1.1.0",
    "react-native-image-crop-picker": "^0.36.2",
4

0 回答 0