React Native上传图片到Django时后端获取十六进制字符串而非文件如何解决
问题修复方案
问题的核心原因有两个:React Native 端 FormData 追加文件的格式不符合要求,以及 Django 端取文件的位置错误,按以下步骤修复即可:
React Native 端修改
- 修正
createFormData方法中文件追加逻辑,不能直接将图片对象传入append方法,需要显式指定uri、name、type三个属性:
const createFormData = (photos, body = {}) => { const data = new FormData(); if (photos.length > 1) { console.log(photos[1]) const photo = photos[1] // 按要求构造文件对象 data.append("images", { uri: photo.uri, name: photo.fileName, type: photo.type }); } Object.keys(body).forEach((key) => { data.append(key, body[key]); }); return data; };
- 检查
constructConfig方法的请求头配置,确保指定了multipart/form-data类型,不要手动设置 boundary,由请求客户端自动生成即可:
// constructConfig 示例配置 const constructConfig = async () => { return { headers: { 'Content-Type': 'multipart/form-data', // 其他业务自定义头,比如 Authorization 等 } } }
- 修正
onAddButtonClick里的逻辑错误:你在请求发起后直接同步调用了setLoading(false),会导致加载状态直接消失,删除该行即可,只保留then和catch里的状态修改。
Django 端修改
- 上传的文件不会出现在
request.data中,需要从request.FILES中获取:- 单文件获取:
request.FILES.get('images') - 多文件获取:
request.FILES.getlist('images')
- 单文件获取:
- 如果你使用 Django REST Framework,需要在对应的视图类中指定解析器,支持表单和文件解析:
from rest_framework.parsers import MultiPartParser, FormParser from rest_framework.views import APIView class YourPostView(APIView): parser_classes = (MultiPartParser, FormParser,) # 剩余视图逻辑
内容的提问来源于stack exchange,提问作者user12314098
相关产品推荐
相关产品推荐

