You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 13:10:19