Вопрос

Я пытаюсь вернуть изображение с сервера с помощью Silverlight 3. Сервер возвращает поток ответов, как это:

 context.Response.ContentType = imageFactory.ContentType
 imgStream.WriteTo(context.Response.OutputStream)
 imgStream.Close()
 context.Response.End()

На клиенте Silverlight я обращаюсь к потоку:

    Dim request As HttpWebRequest = result.AsyncState
    Dim response As HttpWebResponse = request.EndGetResponse(result)
    Dim responseStream As IO.Stream = response.GetResponseStream()

Я хочу взять этот поток и открыть диалоговое окно «Сохранить браузеры», один из вариантов, который я исследовал, - это использование html.window.navigate (новый URI («URL -адрес изображения»)), и это открыло правильный диалог по умолчанию браузера, но это не вариант. Потому что мне нужно отправить расширенную информацию (например, XML) на сервер через httprequest.headers.item, и навигация не допускает этого.

Как я могу взять поток ответов и заставить диалоговое окно «Сохранить браузер по умолчанию» появиться из приложения Silverlight без использования html.window.navigate (новый URI («URL Image URL»))?

Это было полезно?

Решение

Прямой ответ - это вы не можете, Silverlight SaveFileDialog может быть открыт только как прямой результат взаимодействия с пользователем, например, нажатие кнопки.

Решение этой проблемы (где вы хотите загрузить) состоит в том, чтобы разместить XML на сервер для хранения, скажем, в объекте сеанса или в файле. Ответ - некоторая ручка, которую вы можете использовать для извлечения XML, например GUID.

Затем вы можете использовать стандартную навигацию, размещая GUID в строку запроса URL. Приемный скрипт (ASHX является этим случаем) может извлечь ранее опубликованный XML, используя ручку, указанную в URL.

Вы также захотите кодировать ответ на стороне сервера таким образом:-

context.Response.ContentType = imageFactory.ContentType;
context.Response.AddHeader("Content-Disposition", "attachment;file=someimage.jpg"); 
imgStream.WriteTo(context.Response.OutputStream);
imgStream.Close();

Это приведет к тому, что браузер отобразит диалоговое окно «Открыть или сохранить». Обычно навигационное состояние текущего окна сохраняется, поэтому приложение SL должно оставаться в его текущем состоянии, но я на самом деле не проверяю это.

Кстати, обратите внимание на ответ.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top