public async Task <Result <HttpResponseMessage> > DownloadAnnotations(DownloadAnnotationsRequest request) { const string api = "api/Factory/DownloadAnnotations"; NameValueCollection query = HttpUtility.ParseQueryString(string.Empty); if (request.DocumentId != null) { query["documentId"] = request.DocumentId; } if (request.Uri != null) { query["uri"] = request.Uri.ToString(); } Result <HttpResponseMessage> result = await _owner.GetAsyncMessage(api, query); return(result); }
public HttpResponseMessage DownloadAnnotations([FromUri] DownloadAnnotationsRequest request) { if (request == null) { throw new ArgumentNullException("request"); } if ((request.DocumentId == null && request.Uri == null) || (request.DocumentId != null && request.Uri != null)) { throw new InvalidOperationException("DocumentId or Uri must not be null, but not both"); } var cache = ServiceHelper.Cache; DocumentCacheInfo cacheInfo; if (request.Uri != null) { cacheInfo = DocumentFactory.GetDocumentCacheInfo(cache, request.Uri); } else { cacheInfo = DocumentFactory.GetDocumentCacheInfo(cache, request.DocumentId); } DocumentHelper.CheckCacheInfo(cacheInfo); var name = "download"; if (!string.IsNullOrEmpty(cacheInfo.Name)) { var documentMimeType = cacheInfo.MimeType; var documentExtension = RasterCodecs.GetMimeTypeExtension(documentMimeType); name = ServiceHelper.RemoveExtension(cacheInfo.Name, documentExtension); } var annotationsName = string.Format("{0}_ann.xml", name); var responseFileName = annotationsName; var responseContentType = "application/xml"; var documentId = cacheInfo.DocumentId; Action <Stream, HttpContent, TransportContext> write = (outputStream, content, context) => { DocumentFactory.DownloadAnnotations(cache, documentId, 0, -1, outputStream); outputStream.Close(); }; var response = new HttpResponseMessage(HttpStatusCode.OK); // For "Save to Google Drive" access, we must have the appropriate CORS headers. // See https://developers.google.com/drive/v3/web/savetodrive response.Headers.Remove("Access-Control-Allow-Headers"); response.Headers.Add("Access-Control-Allow-Headers", "Range"); response.Headers.Remove("Access-Control-Expose-Headers"); response.Headers.Add("Access-Control-Expose-Headers", "Cache-Control, Content-Encoding, Content-Range"); response.Content = new PushStreamContent(write, new MediaTypeHeaderValue(responseContentType)); ServiceHelper.SetResponseViewFileName(response, responseFileName, responseContentType); return(response); }