Fancybox не удалось загрузить изображение из HttpRespone в Chrome - PullRequest
0 голосов
/ 15 июня 2011

У меня проблема с fancybox в Google Chrome.Когда я нажимаю на мою ссылку, она показывает:

Запрошенный контент не может быть загружен.Пожалуйста, повторите попытку позже.

Мой сайт находится в ASP.NET.Это код для моей ссылки на сайте:

<a rel="example_group" id="aRel" runat="server" href='<%# Eval("ElevatedLink") %>'
     title='<%# Eval("LongDesc") %>'>
</a>

Ссылка на мое изображение - это aspx-файл, который записывает изображение в выходной буфер, что-то вроде этого:

 byte[] buffer = Common.GetBinaryData(list, iFolder, iMovId);

 if (buffer == null || buffer.Length == 0)
     return;
 Response.Clear();
 Response.ContentType = GetMimeType(name, elevatedWeb);
 Response.BufferOutput = true;
 Response.OutputStream.Write(buffer, 0, buffer.Length);
 Response.Flush();
 Response.Close();

Моя декларация fancybox:

$(document).ready(function () {
   $("a[rel=example_group]").fancybox({
                'transitionIn': 'none',
                'transitionOut': 'none',
                'titlePosition': 'over',
                'showNavArrows': 'true',
                'titleFormat': function (title, currentArray, currentIndex, currentOpts) {
                 return '<span id="fancybox-title-over">Image ' + (currentIndex + 1) + ' / ' + currentArray.length + (title.length ? ' &nbsp; ' + title : '') + '</span>';
                }
            });

Если я загружаю изображение по URL-адресу, указанному в href, оно отображается в браузере Chrome, но в fancybox отображается ошибка выше.Тип MIME установлен на изображение, все в порядке.Это решение работает в Firefox, Safari даже в IE.

Пожалуйста, помогите.

1 Ответ

0 голосов
/ 30 июня 2011

Попробуйте это:

var dataLength = data.Length;

Response.Clear();

Response.ContentType = "correct MIME type";
Response.AddHeader("content-disposition", string.Format("attachment;filename={0}", name));
Response.AddHeader("content-length", data.Length.ToString());

Response.Buffer = true;

var buffer = new byte[1024];
int bytes;

var outputStream = Response.OutputStream;

using (var stream = data.OpenBinaryStream())
{
     while (dataLength > 0 && (bytes = stream.Read(buffer, 0, buffer.Length)) > 0)
     {
          outputStream.Write(buffer, 0, bytes);
          dataLength -= bytes;
     }
}

Response.Flush();
Response.Close();
Response.End();

Где «data» - байтовый массив, содержащий данные изображения, а «name» - имя файла.

...