Flutter/Dart SocketException 上传视频文件到 URL

Flutter/Dart SocketException Uploading Video File to URL

我在尝试将视频文件上传到指定 URL:

时收到此错误消息
DioError (DioError [DioErrorType.DEFAULT]: SocketException: OS Error: Connection reset by peer, errno = 54, address = storage.googleapis.com, port = 64995)

注意:这是一个 DioError,因为我正在使用 dio Dart/Flutter 包:https://pub.dev/packages/dio 我收到错误消息,使用等效 API 例如 http 库。

上传从存储中选择的视频文件的代码:

        //File videoFile...

        FormData data = FormData.fromMap({
          "videoFile": await MultipartFile.fromFile(videoFile.path),
        });
    
        Response response = await Dio().post(
          directUpload.url,
          data: data,
          onSendProgress: (int sent, int total) {
            print("$sent $total");
          },
        );

URL (directUpload.url) 是由 MUX API 生成并提供给他们的 Google 云存储。

https://storage.googleapis.com/video-storage-us-east1-uploads/...

调用post时,上传了少量(如655524 / 17840042),然后出现错误。测试视频大小为 17.8 Mb。

运行 这在 iOS 设备或​​ iOS 模拟器上产生相同的 result/error.


我已尝试:flutter cleanflutter upgrade、删除 Podfilepod repo update、从设备中删除应用程序。都无济于事。

您尝试过使用http.MultipartRequest 方法吗? 由于它可用于传输大文件,如果 dio 中存在,您也可以尝试使用 DIO 替代方案 以及如何使用 http.MultipartRequest 这里有一篇文章 https://dev.to/carminezacc/advanced-flutter-networking-part-1-uploading-a-file-to-a-rest-api-from-flutter-using-a-multi-part-form-data-post-request-2ekm

让我知道它是否有效。

是的,我和 Dio 有同样的问题。

当前无法上传数据类型Uint8List

我的临时解决方案: 使用 http lib http: ^0.12.1

import 'package:http/http.dart' as http;

Future uploadData(Uint8List imageData) async {
    await http.put(preData.url, headers: getHeader(), body: imageData);
}

use:
List<int> imageData = File(filePath).readAsBytesSync();
await uploadData(imageData);

希望能帮到你

如果 Web 服务客户端正在等待来自远程 Web 服务提供商的 SOAP 响应并且连接过早关闭,则会出现错误消息“Connection reset by peer”。

此错误的最常见原因之一是中间的防火墙关闭了连接。在这种情况下,您可以增加连接超时 firewall.You 可以通过捕获和分析 IP 跟踪找到关闭连接的组件。

其他可能的原因例如:

  • 服务器端的资源限制,如内存不足服务器

  • 进程终止

  • 由于高流量导致服务器过载

也试试这个..

cd ~/flutter
git checkout -b max-in-flight
code packages/flutter_tools/lib/src/devfs.dart # edit kMaxInFlight from 6 to 1
rm bin/cache/flutter_tools*

还有这个

flutter clean
flutter channel stable

从 POST 更改为 PUT 请求可解决问题。

调用post时,上传了少量(如655524 / 17840042),然后出现错误。测试视频大小为 17.8 Mb。

回答-

转到您的 cpanel MultiPHP INI 编辑器文件并增加 post_max_size

无需更改您的 flutter 代码,这是正确的。