Эта служба WCF возвращает изображение в формате TIFF. Как установить имя файла возвращаемого изображения? - PullRequest
0 голосов
/ 28 марта 2012

Эта служба WCF возвращает изображение в формате TIFF. Он проверяет, подключен ли он к нашему репозиторию - и получает байты из файла данных. Он проверяет, является ли файл PDF, TIFF или изображение, и возвращает соответствующий тип MIME. Теперь я могу позвонить в службу, и она вернет соответствующий файл - но с именем изображения «documentID» .tif. Как установить имя файла изображения, которое оно возвращает?

[OperationContract]
[WebInvoke(Method = "GET", UriTemplate="File/{documentID}")]
Stream GetDocumentFile_GET(string documentID);




public Stream GetDocumentFile_GET(string documentID)
{
    if (ProprietaryClass.IsConnected)
    {
        ProprietaryClass _documentForViewer = new ProprietaryClass(documentID);
        string _fileType = ProprietaryClass.NativeFileType; 
        string _mimetype = "image/tiff";

        switch (_fileType)
        {
            case "TIF":
                _mimetype = "image/tiff";
                break;
            case "PDF":
                _mimetype = "application/pdf";
                break;
            case "PNG":
                _mimetype = "image/png";
                break;
        };

        if (ProprietaryClass.ProprietaryMethod(_documentForViewer))
        {

            ProprietaryClass _downloadToViewer = new ProprietaryClass();

            if (_documentForViewer.TiffFile != null)
            {
                _downloadToViewer = _documentForViewer.TiffFile;
            }
            else
            {
                _downloadToViewer = _documentForViewer.NativeFile;
            }


            MemoryStream fileStream = new MemoryStream(_downloadToViewer.FileData);

            // fileStream is now array of bytes
            System.ServiceModel.Web.WebOperationContext.Current.OutgoingResponse.ContentType = _mimetype;

            return (Stream)fileStream;
        }
        else
        {
            return new MemoryStream(Encoding.UTF8.GetBytes("Document type not supported by native viewer"));
        }
    }
    else
    {
        return new MemoryStream(Encoding.UTF8.GetBytes("Not connected"));
    }
}

Ответы [ 2 ]

1 голос
/ 28 марта 2012

Лучший способ сделать это в сервисах RESTful - использовать заголовок Content-Disposition . Большинство браузеров поддерживают это «из коробки» и выдают диалоговое окно «Сохранить как» с именем, предлагаемым в заголовке. Что касается других клиентов, то они обращают внимание или упускают, если они обращают внимание на заголовок, если вы контролируете клиента, вы всегда можете его добавить.

1 голос
/ 28 марта 2012

Вместо того, чтобы возвращать Stream напрямую, возвращайте пользовательский объект (например, CustomStream), содержащий Stream, а также имя файла, который вы хотите представить Stream.

...