问题描述
我正在使用 Twilio's 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),图像会在发布时发送。
这是 error 的屏幕截图。如果我将 {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",
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)