概述:
我正在使用文件选择器库来允许用户从他们的设备中选择一个或多个文件。所选文件将能够在使用 HTTP/Multipart 发送所选文件进行存储之前进行预览。
问题:文件选择器库返回 aList\<PlatformFile>
并且我可以访问 aUint8List?
或 aStream<List\<int>>?
将readStream
and设置withData
为 True 不会同时返回Uint8List?
AND Stream<List\<int>>?
- 我认为这会有所帮助。
如果我使用 ,Uint8List?
我可以使用 FlutterImage.memory
方法加载文件,但我无法使用Uint8List
来使用 ,http.MultiPartFile.fromBytes()
因为它只接受List<int>
.
或者,如果我使用Stream<List<int>>?
我可以使用http.MultipartFile()
并传入,Stream<List\<int>>?
但我不确定如何使用Stream<List\<int>>?
我考虑过但不确定如何完成的事情
1-有没有办法将a转换Uint8List?
为aList<int>?
2-是否有使用发送文件的替代方法Uint8List?
3-有没有办法从文件选择器结果中同时接收Uint8List?
AND ?Stream<List\<int>>?
我在下面复制了一些片段,但如果您需要更多信息,请告诉我。提前谢谢你的帮助 :)
Flutter 小部件选择文件
Text(
"Open the File Browser",
style: TextStyle(
color: kPrimaryBlue,
fontWeight: FontWeight.bold,
fontSize: 20),
),
onPressed: () async {
try {
FilePickerResult? result =
await FilePicker.platform.pickFiles(
type: FileType.any,
allowMultiple: true,
withReadStream: false,
withData: true,
);
if (result != null) {
for (var file in result.files) {
files.add(file);
}
} else {
print('No Files Were Selected');
}
} catch (ex) {
print(ex);
}
将文件发送到端点的 HTTP 请求:
var uri = Uri.parse('https://hookb.in/7ZGKQE8ZDOua99D3RwMD'); var request = http.MultipartRequest('POST', uri);
for (var file in files) {
request.files.add(http.MultipartFile(
"files", file.readStream!, file.size!,
filename: file.name));
}
var response = await request.send();
if (response.statusCode == 200) {
print('Uploaded!');
setState(() {
files = [];
});
提交前显示图像/文件的小部件:
Image(
image: Image.memory(files[index].bytes);