c# - Amazon S3 动画 gif - 仅上传第一帧

标签 c# amazon-web-services amazon-s3 animated-gif

(我已经研究了在 Stackoverflow 上可以找到的所有类似问题,但没有一个能帮助我解决我的问题)

我可以像这样将 gif 上传到 Amazon S3,其中 request.FileBytes 是一个字节数组:

public bool UploadFile(CdnFile request)
{
  var transfer = new TransferUtility(CdnConfig.AccessKey, CdnConfig.SecretKey, ep);
  var uploadRequest = new TransferUtilityUploadRequest();
  uploadRequest.InputStream = new MemoryStream(request.FileBytes);

  var result = transfer.BeginUpload(s3Req2, cb, null);
  transfer.EndUpload(result);
}

这对于 .jpg 效果很好,但是对于动画 .gif,只上传 gif 的第一帧(如果我通过 S3 直接上传相同的 gif,效果很好)。所以这一定与我流式传输或转换文件的方式有关,但我不确定如何找出问题发生的位置。

我按如下方式创建 request.FileBytes,其中“imageData”是图像的原始数据(Chrome 在显示我尝试上传到 S3 的动画 gif 预览时使用此图像数据,并且动画效果很好) :

var data = Convert.FromBase64String(imageData);
var img = new Bitmap(new MemoryStream(data));
fileBytes = img.SaveAsGif();

public static byte[] SaveAsGif(this Image img, long quality = 100)
{
    ImageCodecInfo gifEncoder = GetEncoder(ImageFormat.Gif);

    Encoder myEncoder = Encoder.Quality;

    EncoderParameters myEncoderParameters = new EncoderParameters(1);

    EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, quality);
    myEncoderParameters.Param[0] = myEncoderParameter;

    using (MemoryStream msGif = new MemoryStream())
    {
        img.Save(msGif, gifEncoder, myEncoderParameters);
        return msGif.ToArray();
    }
}

最佳答案

这段代码对我来说工作得很好,也许你可以根据你的用例调整它。我从本地文件上传 GIF,上传后显示/工作正常:

        using (var client = new AmazonS3Client("AKIAI5ZL44fake4442COJA", "4sYnPuA1zMkhghghghghTpX4F5/FUXGDiAKm", RegionEndpoint.USEast1))
        {
            var request = new PutObjectRequest
            {
                BucketName = "bucketname",
                ContentType = "image/gif",
                Key = "test.gif",
                FilePath = @"c:\dev\006.gif"
            };
            var response = client.PutObject(request);
        }

关于c# - Amazon S3 动画 gif - 仅上传第一帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43627785/

相关文章:

amazon-web-services - 如何重播从 AWS Firehose 推送到 S3 的流数据?

ruby-on-rails - 雾、Amazon S3 和 Carrierwave Rails 问题

amazon-web-services - LIST 的 S3 性能,前缀为单个存储桶中的数百万个对象

Python Boto S3 与 Amazon S3 中的自定义域一起使用

c# - 带有 EditItemTemplate 的面板 DefaultButton 和 GridView 控件

c# - 从 MySQL 日期导入文本框时的日期格式 C#.NET

linux - 有没有办法在 Amazon Linux 系统上安装 gnome、kde 或任何其他 X 界面?

c# - FileMode.CreateNew 或 File.Create 没有创建任何东西,也没有错误

C# XML 解析 - 查找元素的位置并读取下一个元素

amazon-web-services - AWS Serverless,CloudFormation : Error, 尝试将非字符串值填充到变量的字符串中