上传到S3 - 无法执行套接字上的操作,因为系统缺少足够的缓冲区空间

时间:2015-09-21 22:09:31

标签: c# sockets asp.net-mvc-4 amazon-web-services amazon-s3

我有一个用C#和MVC4构建的网站,用户可以上传大文件,然后发送到Amazon S3。

这是间歇性的,但我不断收到以下错误:

"无法执行套接字上的操作,因为系统缺少足够的缓冲区空间或者队列已满,54.231.236.12:443"

我目前正在使用InputStream作为S3的PutObject。有没有人有任何关于为什么PutObject会在这些较大的文件上失败的建议?

以下是我用来将HttpPostedFileBase发送到亚马逊的代码:

 HttpPostedFileBase hpf = Request.Files[0] as HttpPostedFileBase;

            if (hpf.ContentLength > 0)
            {
                string accessKey = ConfigurationManager.AppSettings["Amazon_Access_Key"];
                string secretKey = ConfigurationManager.AppSettings["Amazon_Secret_Key"];


                AmazonS3Client client;

                var filePath = UserID + "/" + hpf.FileName;

                client = new AmazonS3Client(accessKey, secretKey, RegionEndpoint.USWest1);

                PutObjectRequest request = new PutObjectRequest();

                request.BucketName = "MyBucket";
                request.CannedACL = S3CannedACL.PublicRead;
                request.Key = filePath;
                request.InputStream = hpf.InputStream;
                client.PutObject(request);
            }
                return Json(new {message = "chunk uploaded", name = name});

1 个答案:

答案 0 :(得分:0)

我不确定将大文件上传到S3时的平均问题,但是从您发布的错误消息中看来,您似乎试图在一次关闭中上传一个大文件。我建议您将大文件上传到块中。我找到了一些可以帮助实现它的链接。

希望这个链接可以帮到你!