2012-03-28 7 views
0

このWCFサービスは、TIFFイメージを返します。リポジトリに接続されているかどうかをチェックし、データファイルからバイトを取得します。ファイルがPDF、tiff、またはimageかどうかをチェックし、適切なMIMEタイプを返します。これでサービスを呼び出すことができ、適切なファイルが返されますが、イメージ名は「documentID」.tifです。返すイメージのファイル名を設定するにはどうすればよいですか?このWCFサービスはTIFFイメージを返します。返すイメージのファイル名を設定するにはどうすればよいですか?

[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")); 
    } 
} 

答えて

1

RESTfulサービスでこれを行うための最良の方法は、Content-Dispositionヘッダーを使用することです。ほとんどのブラウザは、これをそのままの形でサポートしており、ヘッダーに示されている名前で保存ダイアログをポップします。彼らがヘッダーに注意を払うならば、他のクライアントと同様にヒットしたりミスしたりします。クライアントを制御すると、いつでも追加できます。

+0

これは今まで私のために働いていました。 –

1

代わりの直接Streamを返す、Streamだけでなく、あなたがStreamを表現したいファイルの名前を含むカスタムオブジェクト(例えばCustomStream)を返します。

+0

どうすればよいですか?ファイルストリームオブジェクトを使用できますか? –

+0

独自のクラスを作成します。 'Stream'とファイル名の文字列を含むことができます。 – Bernard

関連する問題