从 Flutter 前端上传文件到 Django 后端时解码错误
Decoding error when uploading file from Flutter frontend to Django backend
我想从 flutter 前端上传一张图片到 python (django) 服务器。
我尝试调试它的时间比我承认的要长。没有在线资源显示如何处理从 Flutter 上传文件到 Django 后端。
后端正在接收文件,但在将文件保存到本地存储时出现 UTF-8 解码错误。
这是我在尝试上传图片时遇到的特定错误:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte
.
我在 this pastebin 中包含了完整的回溯。
这是后端收到的文件信息:
{'file': <_io.BytesIO object at 0x7fe121a44f50>,
'_name': 'tempProfilePic.jpg',
'size': 311489,
'content_type': 'application/octet-stream',
'charset': None,
'content_type_extra': {},
'field_name': 'file'}
下面是我的前端代码:
if (_imageFile != null) {
var stream =
http.ByteStream(DelegatingStream.typed(_imageFile.openRead()));
var length = await _imageFile.length();
var multipartFile = http.MultipartFile('file', stream, length,
filename: basename(_imageFile.path));
request.files.add(multipartFile);
}
request.fields['token'] = token
var response = await request.send();
_imageFile 是一个 File 变量,它包含保存在存储器中的 .png 图像。文件已发送,没有任何错误。
下面是我的后端代码:
models.py
class userData(models.Model):
profilePic = models.FileField(upload_to='documents/')
token = models.CharField()
以及处理 post 请求的视图元素:
views.py
def uploadImage(request):
currUser = userData.objects.get(token=request.data['token'])
if request.FILES['file']:
currUser.profilePic= request.FILES['file']
如果我目前正在做的事情似乎很难调试,有没有更简单的方法可以解决这个问题? (例如,从前端将文件作为字符串发送?)
(仅供参考,我需要其他功能的后端,不能使用无服务器或 firebase 方法。所有其他功能都是在 Django 下完成的。实现文件上传是我最后剩下的事情之一)。
如果需要,我可以提供任何其他信息。
感谢您的帮助。
有几个问题提到了 UTF-8 解码错误,none 其中很全面或包含足够的代码让我能够调试我的用例。而且他们似乎没有使用 django 模型。我已经这样做了好几天,并且尝试了其中的几个,但无法实施其中的任何一个。我们将不胜感激。
愚蠢可耻,但正确答案是在上传之前打开文件:
currUser.profilePic= request.FILES['file'].open()
我想从 flutter 前端上传一张图片到 python (django) 服务器。
我尝试调试它的时间比我承认的要长。没有在线资源显示如何处理从 Flutter 上传文件到 Django 后端。
后端正在接收文件,但在将文件保存到本地存储时出现 UTF-8 解码错误。
这是我在尝试上传图片时遇到的特定错误:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte
.
我在 this pastebin 中包含了完整的回溯。
这是后端收到的文件信息:
{'file': <_io.BytesIO object at 0x7fe121a44f50>,
'_name': 'tempProfilePic.jpg',
'size': 311489,
'content_type': 'application/octet-stream',
'charset': None,
'content_type_extra': {},
'field_name': 'file'}
下面是我的前端代码:
if (_imageFile != null) {
var stream =
http.ByteStream(DelegatingStream.typed(_imageFile.openRead()));
var length = await _imageFile.length();
var multipartFile = http.MultipartFile('file', stream, length,
filename: basename(_imageFile.path));
request.files.add(multipartFile);
}
request.fields['token'] = token
var response = await request.send();
_imageFile 是一个 File 变量,它包含保存在存储器中的 .png 图像。文件已发送,没有任何错误。
下面是我的后端代码: models.py
class userData(models.Model):
profilePic = models.FileField(upload_to='documents/')
token = models.CharField()
以及处理 post 请求的视图元素: views.py
def uploadImage(request):
currUser = userData.objects.get(token=request.data['token'])
if request.FILES['file']:
currUser.profilePic= request.FILES['file']
如果我目前正在做的事情似乎很难调试,有没有更简单的方法可以解决这个问题? (例如,从前端将文件作为字符串发送?)
(仅供参考,我需要其他功能的后端,不能使用无服务器或 firebase 方法。所有其他功能都是在 Django 下完成的。实现文件上传是我最后剩下的事情之一)。
如果需要,我可以提供任何其他信息。
感谢您的帮助。
有几个问题提到了 UTF-8 解码错误,none 其中很全面或包含足够的代码让我能够调试我的用例。而且他们似乎没有使用 django 模型。我已经这样做了好几天,并且尝试了其中的几个,但无法实施其中的任何一个。我们将不胜感激。
愚蠢可耻,但正确答案是在上传之前打开文件:
currUser.profilePic= request.FILES['file'].open()