React Native(Expo) iOS构建版无法提交带图片的POST请求问题
问题:iOS TestFlight构建版无法上传图片至S3
- Expo本地运行时,Android和iOS均能正常上传图片及PDF至S3;但上架TestFlight的iOS构建版无法上传图片(相机拍摄或相册选择的图片均失败),Android构建版完全正常
- 后端日志显示图片上传请求从未到达服务器,但PDF上传可成功完成
- 多次尝试上传.png格式图片均失败,怀疑iOS缺少图片上传相关权限
发送图片的核心函数
const sendEssay = async () => { if (onLoadToken) await onLoadToken(); // update token await FileSystem.uploadAsync(`${API_URL}/essays/upload_essay_view/`, selectedImageGallery ?? selectedImageCamera, { headers: { 'Authorization': `JWT ${authState.accessToken}`, 'Content-Type': 'multipart/form-data', }, uploadType: FileSystem.FileSystemUploadType.MULTIPART, httpMethod: 'POST', fieldname: 'essay', parameters: { essay_id: essay_id.toString(), comment: comment ?? '', }, }).then((response) => { console.log(response); alert("Essay sent successfully!"); navigation.goBack(); }).catch((error) => { alert('Error sending the essay:' + error); console.log(error.message); setIsSending(false); setFileName(null); setFileType(null); setSelectedImageCamera(null); setSelectedImageGallery(null); }); }
获取相机图片的函数
const openCamera = async () => { const { status } = await ImagePicker.requestCameraPermissionsAsync(); if (status !== 'granted') { alert('Sorry, we need camera permissions to take photos!'); return; } let result = await ImagePicker.launchCameraAsync({ mediaTypes: ImagePicker.MediaTypeOptions.Images, allowsEditing: false, // Setting to 'false' to disable cropping aspect: [4, 3], quality: 1, }); if (result.canceled) { console.log('User canceled image selection'); } else if (result.assets && result.assets.length > 0) { const selectedFormat = result.assets[0].uri.split('.').pop()?.toLowerCase(); console.log('Image taken:', result.assets[0].uri, 'Format:', selectedFormat); if (selectedImageGallery) { setSelectedImageGallery(null); } setFileName(result.assets[0].fileName); setFileType(result.assets[0].type); setSelectedImageCamera(result.assets[0].uri); } };
获取相册图片的函数
const openGallery = async () => { try { const result = await DocumentPicker.getDocumentAsync({ type: ['image/*', 'application/pdf'], }); console.log(result); if (!result.canceled) { console.log('File selected:', result.assets[0].uri ?? '', 'File Name:', fileName); const fileExtension = "." + result.assets[0].uri.split('.').pop()?.toLowerCase(); console.log('File extension:', fileExtension); if (selectedImageCamera) { setSelectedImageCamera(null); } if (fileExtension && ['.png', '.jpeg', '.jpg', '.pdf'].includes(fileExtension)) { setFileName(result.assets[0].name); setSelectedImageGallery(result.assets[0].uri ?? ''); setFileType(result.assets[0].mimeType); } else { alert('Invalid file format. Only .png, .jpeg, .jpg, and .pdf are allowed.'); } } else { console.log('User canceled selection'); } } catch (error) { console.log('Error selecting file:', error); } };
内容的提问来源于stack exchange,提问作者Vini469
相关产品推荐
相关产品推荐

