首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >亚马逊S3动画gif -仅上传第一帧

亚马逊S3动画gif -仅上传第一帧
EN

Stack Overflow用户
提问于 2017-04-26 15:34:51
回答 2查看 2K关注 0票数 3

(我在Stackoverflow上研究了所有关于这个问题的类似问题,但没有一个能帮助我解决问题)

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

代码语言:javascript
运行
复制
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预览时使用此图像数据,它的动画效果很好):

代码语言:javascript
运行
复制
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();
    }
}
EN

回答 2

Stack Overflow用户

发布于 2017-04-26 17:03:02

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

代码语言:javascript
运行
复制
        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);
        }
票数 2
EN

Stack Overflow用户

发布于 2017-04-27 10:08:57

问题出在我的SaveAsGif方法上,所以问题出在编解码器上。我可以在不使用编解码器的情况下创建request.fileBytes,如下所示:

代码语言:javascript
运行
复制
var imageStream = new MemoryStream(data);
fileBytes = imageStream.ToArray();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43627785

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档