将内容复制到流时出现 HttpRequestException 错误(Cloudinary 上传)

Posted

技术标签:

【中文标题】将内容复制到流时出现 HttpRequestException 错误(Cloudinary 上传)【英文标题】:HttpRequestException Error while copying content to a stream (Cloudinary upload) 【发布时间】:2021-01-24 09:45:30 【问题描述】:

我正在尝试构建一个用户可以上传小视频的项目。我创建了下面的类来处理关于如何上传视频的 Cloudinary 代码。 它适用于非常短的视频,例如 0.3 秒的视频,但是当我尝试上传超过 0.10 秒的视频时 - 我得到了一个例外:

System.Net.Http.HttpRequestException:将内容复制到流时出错。

视频正在上传到 Cloudinary。代码如下:

 public class VideoAccessor : IVideoAccessor
    
        private readonly Cloudinary _cloudinary;
        public VideoAccessor(IConfiguration config)
        
            // instantiate a new instance of cloudinary using details provided
            _cloudinary = new Cloudinary(config["cloudinary"]);
        
        
        public VideoUploadResult UploadClip(IFormFile videoFile)
        
            var uploadResult = new CloudinaryDotNet.Actions.VideoUploadResult();
            if (videoFile.Length > 0)
            
                // create a new file stream to upload the video to cloudinary
                using (var filestream = videoFile.OpenReadStream())
                
                    var uploadParams = new VideoUploadParams
                    
                        File = new FileDescription(videoFile.FileName, filestream),
                        Transformation = new Transformation().StartOffset("0").EndOffset("120").Crop("fill")

                    ;
                    uploadResult = _cloudinary.Upload(uploadParams);
                
            
            
            // checks if error occurs when uploading video
            if (uploadResult.Error != null)
            
                throw new Exception(uploadResult.Error.Message);
            

            return new VideoUploadResult
            
                PublicId = uploadResult.PublicId,
                Url = uploadResult.SecureUrl.AbsoluteUri
            ;
        


尝试上传时出现异常。有谁知道我可以添加什么或如何使它更容易被更大的文件接受?

堆栈跟踪:

System.Threading.Tasks.TaskCanceledException:操作已取消。 System.Net.Http.HttpRequestException:将内容复制到流时出错。 System.IO.IOException:无法从传输连接中读取数据:由于线程退出或应用程序请求,I/O 操作已中止 System.Net.Sockets.SocketException (995):由于线程退出或应用程序请求,I/O 操作已中止。

【问题讨论】:

是否有内部异常说明实际错误是什么? 我上传了堆栈跟踪 它适用于非常短的视频,例如 0.3 秒的视频,但是当我尝试上传超过 0.10 秒的视频时 - 你的意思是“10 秒”吗?跨度> 我看到堆栈顶部有一个TaskCanceledException。该库是否支持async 调用? 不,我的意思是字面意思是 0.10 秒。是的,图书馆确实支持它 【参考方案1】:

您的上传请求可能已超时。您可能需要使用 UploadLarge 方法分块上传视频。见-https://github.com/cloudinary/CloudinaryDotNet/blob/a3a4d38c4fd7c1b03beeb3eed7d8ea725866a36c/Shared/Cloudinary.cs#L1229

欲了解更多信息:https://cloudinary.com/documentation/upload_images#chunked_asset_upload

【讨论】:

以上是关于将内容复制到流时出现 HttpRequestException 错误(Cloudinary 上传)的主要内容,如果未能解决你的问题,请参考以下文章

.NET 5 在引发自定义异常时将内容复制到流时产生错误

什么是 cp:Unix 中无法统计错误,尝试将内容从一个文件夹复制到另一个文件夹时出现此错误 [关闭]

去除复制内容时出现的后缀和弹框

在 Windows 中使用 MIDI 流时出现问题

将 db 从资产复制到设备数据文件夹时出现 FileNotFoundException

将数据从本地复制到 S3 到 Redshift 表时出现问题