首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当禁用DiskCache插件时,图像无法显示。

当禁用DiskCache插件时,图像无法显示。
EN

Stack Overflow用户
提问于 2017-08-17 07:35:38
回答 1查看 39关注 0票数 0

我一直在使用基本的ImageResizer库和DiskCache插件。由于磁盘空间问题,我需要使用CDN来释放the服务器上的空间。

为了防止按照文档创建本地磁盘缓存,我在配置中添加了enabled属性并设置为false

代码语言:javascript
复制
<diskcache dir="~/Content/Resize" enabled="false" />

不幸的是,当请求图像时,什么都不会出现。启用所有异常后,我设法缩小到ImageResizer.Plugins.Basic中的这个例程

代码语言:javascript
复制
public static void SaveJpeg(Image b, Stream target, int quality)
{
  if (quality < 0)
    quality = 90;
  if (quality > 100)
    quality = 100;
  using (EncoderParameters encoderParams = new EncoderParameters(1))
  {
    using (EncoderParameter encoderParameter = new EncoderParameter(Encoder.Quality, (long) quality))
    {
      encoderParams.Param[0] = encoderParameter;

      // NOTE: this would appear to be the trigger
      b.Save(target, DefaultEncoder.GetImageCodeInfo("image/jpeg"), encoderParams);
      // NOTE
    }
  }
}

不支持System.NotSupportedException“指定的方法”。“System.Web.HttpResponseStream.get_Position()”

有人能帮忙解决这个问题吗?

EN

回答 1

Stack Overflow用户

发布于 2017-08-17 13:10:19

这在最新版本(4.1.9)中得到了修正。

这是由于DefaultEncoder插件试图将映像直接写入响应流。也许.NET框架中的更改会阻止在响应流上寻找破坏保存例程的响应流。

解决这个问题的方法是使用补丁版本的插件(感谢@Ilian )。这在写入响应流之前写入临时流:

代码语言:javascript
复制
private static void SaveJpeg(Image image, Stream target, int quality)
{
    if (quality < 0)
        quality = 90; //90 is a very good default to stick with.

    if (quality > 100)
        quality = 100;

    using (EncoderParameters p = new EncoderParameters(1))
    {
        using (EncoderParameter ep = new EncoderParameter(Encoder.Quality, quality))
        {
            p.Param[0] = ep;

            ImageCodecInfo info = ImageResizer.Plugins.Basic.DefaultEncoder.GetImageCodeInfo("image/jpeg");

            if (!target.CanSeek)
            {
                using (MemoryStream ms = new MemoryStream(_streamCopyBuffer))
                {
                    image.Save(ms, info, p);
                    ms.WriteTo(target);
                }
            }
            else
            {
                image.Save(target, info, p);
            }
        }
    }
}

我创建了一个快速的n‘脏gist,它起草了插件的一个版本,并通过修改和配置来使用它。

https://gist.github.com/restlessmedia/9401155f40bd12d40d6affb53c4231b5

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45729149

复制
相关文章

相似问题

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