首页 > 解决方案 > 使用预签名 url 上传到 Amazon S3 的 C# SocketException

问题描述

我正在使用预签名 URL 让我们的 C# 应用程序直接从用户位置上传到我们的 S3 存储桶。我完全使用了 AWS 文档中的 .NET 示例代码:

https://docs.aws.amazon.com/AmazonS3/latest/userguide/PresignedUrlUploadObject.html

private static void UploadObject(string url)
        {
            HttpWebRequest httpRequest = WebRequest.Create(url) as HttpWebRequest;
            httpRequest.Method = "PUT";
            using (Stream dataStream = httpRequest.GetRequestStream())
            {
                var buffer = new byte[8000];
                using (FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
                {
                    int bytesRead = 0;
                    while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) > 0)
                    {
                        dataStream.Write(buffer, 0, bytesRead);
                    }
                }
            }
            HttpWebResponse response = httpRequest.GetResponse() as HttpWebResponse;
        }

这适用于小图像文件 (<1MB),但对于较大的视频文件 (10-20 MB) 通常会失败。在上传成功之前我需要多次尝试,因为我经常收到一个SocketException错误,说连接被远程主机关闭。

有谁知道如何处理这个问题?

谢谢您的帮助!

标签: c#amazon-s3httpwebrequestsocketexception

解决方案


推荐阅读