【发布时间】:2020-02-20 02:31:59
【问题描述】:
需要帮助解决 Flutter 中的 HTTP 请求,使用 PUT 方法通过 API 将 body 上的图像文件发送到 NextCloud 服务器。
与往常一样,我测试了通过 POSTMAN 发送请求以查看发生了什么。在正文选项卡中选择“二进制”并选择图像文件可以正常工作。
文件按预期存在:
我正在使用以下代码在 Flutter 应用上实现这一点:
_imageFile = 包含来自相机或画廊的图像。
RaisedButton(
color: Colors.blueAccent,
child: Text('enviar'),
onPressed: () async {
String base64Image = base64Encode(_imageFile.readAsBytesSync());
print(base64Image);
var client = http.Client();
var request = http.Request(
'PUT', Uri.parse('https://host123.com.br/remote.php/dav/files/82427565709/TOOP.jpeg'));
request.headers.addAll(
{HttpHeaders.authorizationHeader: 'Basic ODI0Mjc1NjU3MDk6Y2xlYW5uZXQ=', 'Content-Type': 'image/jpeg'});
request.body = base64Image;
var streamedResponse = await client.send(request);
client.close();
print('ok!');
},
),
终端上的结果:
I/flutter ( 8349): /9j/4AAQSkZJRgABAQEASABIAAD/4gxYSUNDX1BST0ZJTEUAAQEAAAxITGlubwIQAABtbnRyUkdCIFhZWiAHzgACAAkABgAxAABhY3NwTVNGVAAAAABJRUMgc1JHQgAAAAAAAAAAAAAAAAAA9tYAAQAAAADTLUhQICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABFjcHJ0AAABUAAAADNkZXNjAAABhAAAAGx3dHB0AAAB8AAAABRia3B0AAACBAAAABRyWFlaAAACGAAAABRnWFlaAAACLAAAABRiWFlaAAACQAAAABRkbW5kAAACVAAAAHBkbWRkAAACxAAAAIh2dWVkAAADTAAAAIZ2aWV3AAAD1AAAACRsdW1pAAAD+AAAABRtZWFzAAAEDAAAACR0ZWNoAAAEMAAAAAxyVFJDAAAEPAAACAxnVFJDAAAEPAAACAxiVFJDAAAEPAAACAx0ZXh0AAAAAENvcHlyaWdodCAoYykgMTk5OCBIZXdsZXR0LVBhY2thcmQgQ29tcGFueQAAZGVzYwAAAAAAAAASc1JHQiBJRUM2MTk2Ni0yLjEAAAAAAAAAAAAAABJzUkdCIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWFlaIAAAAAAAAPNRAAEAAAABFsxYWVogAAAAAAAAAAAAAAAAAAAAAFhZWiAAAAAAAABvogAAOPUAAAOQWFlaIAAAAAAAAGKZAAC3hQAAGNpYWVogAAAAAAAAJKAAAA+EAAC2z2Rlc2MAAAAAAAAAFklFQyBodHRwOi8vd3d3LmllYy5jaAAAAAAAAAAAAAAAFklFQyBodHRwOi8vd3d3LmllYy5jaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkZXNjAAAAAAAAAC5JRUMgNjE5NjY
I/flutter ( 8349): ok
通过APP发送到Nextcloud服务器上的结果:
看起来编码或正文上发送的数据有问题。文件“损坏”
两次测试都是同一个文件。
** 更新 **
按照建议将正文数据更改为字节后,不使用 base64 编码。 (下图)
也尝试使用 .toString() 方法进行转换,文件转到服务器但与以前一样,看起来已损坏。
【问题讨论】:
-
为什么要在发送之前对正文进行 base 64 编码?只需发送字节。
-
嗨@RichardHeap,将代码更改如下,但“request.body”需要字符串数据类型。将图片添加到原始帖子中。
-
将字节分配给
request.bodyBytes
标签: image http flutter mobile base64