此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"));
}
}
答案 0 :(得分:1)
不是直接返回Stream
,而是返回包含CustomStream
的自定义对象(例如Stream
)以及要表示Stream
的文件的名称。 }。
答案 1 :(得分:1)
我在RESTful服务中发现这样做的最好方法是使用Content-Disposition标头。大多数浏览器都支持这种开箱即用的功能,并会弹出一个带有标题建议名称的保存对话框。对于其他客户来说,如果他们注意标题会触及或错过,如果您控制客户端,那么您可以随时添加它。