public PreCacheDocumentResponse PreCacheDocument(PreCacheDocumentRequest request) { if (request == null) { throw new ArgumentNullException("request"); } string passToCheck = ServiceHelper.GetSettingValue(ServiceHelper.Key_Access_Passcode); if (!string.IsNullOrWhiteSpace(passToCheck) && request.Passcode != passToCheck) { throw new ServiceException("Document cannot be pre-cached - passcode is incorrect", HttpStatusCode.Unauthorized); } if (request.Uri == null) { throw new ArgumentException("uri must be specified"); } ServiceHelper.CheckUriScheme(request.Uri); if (!PreCacheHelper.PreCacheExists) { // Return an empty item return(new PreCacheDocumentResponse()); } var cache = ServiceHelper.Cache; // Get the cache options, if none, use All (means if the user did not pass a value, we will cache everything in the document) if (request.CacheOptions == DocumentCacheOptions.None) { request.CacheOptions = DocumentCacheOptions.All; } return(PreCacheHelper.AddDocument(cache, request)); }
public ReportPreCacheResponse ReportPreCache([FromUri] ReportPreCacheRequest request) { if (request == null) { throw new ArgumentNullException("request"); } string passToCheck = ServiceHelper.GetSettingValue(ServiceHelper.Key_Access_Passcode); if (!string.IsNullOrWhiteSpace(passToCheck) && request.Passcode != passToCheck) { throw new ServiceException("Pre-cache cannot be reported - passcode is incorrect", HttpStatusCode.Unauthorized); } if (!PreCacheHelper.PreCacheExists) { // Return an empty report return(new ReportPreCacheResponse()); } var cache = ServiceHelper.Cache; return(PreCacheHelper.ReportDocuments(cache, request.Clean)); }
[HttpPost, HttpGet] // Support GET only for testing public LoadFromUriResponse LoadFromUri(LoadFromUriRequest request) { if (request == null) { throw new ArgumentNullException("request"); } if (request.Uri == null) { throw new ArgumentException("uri must be specified"); } ServiceHelper.CheckUriScheme(request.Uri); if (request.Options != null && request.Options.AnnotationsUri != null) { ServiceHelper.CheckUriScheme(request.Options.AnnotationsUri); } if (request.Resolution < 0) { throw new ArgumentException("Resolution must be a value greater than or equal to zero"); } var cache = ServiceHelper.Cache; var loadOptions = new LoadDocumentOptions(); loadOptions.Cache = cache; loadOptions.UseCache = cache != null; loadOptions.CachePolicy = ServiceHelper.CreatePolicy(); loadOptions.WebClient = null; // Use default if (request.Options != null) { loadOptions.DocumentId = request.Options.DocumentId; loadOptions.AnnotationsUri = request.Options.AnnotationsUri; loadOptions.Name = request.Options.Name; loadOptions.Password = request.Options.Password; loadOptions.LoadEmbeddedAnnotations = request.Options.LoadEmbeddedAnnotations; loadOptions.MaximumImagePixelSize = request.Options.MaximumImagePixelSize; loadOptions.FirstPageNumber = request.Options.FirstPageNumber; loadOptions.LastPageNumber = request.Options.LastPageNumber; } // Get the document name var documentName = request.Uri.ToString(); // Check if this document was uploaded, then hope the user has set LoadDocumentOptions.Name to the original file name if (DocumentFactory.IsUploadDocumentUri(request.Uri) && !string.IsNullOrEmpty(loadOptions.Name)) { // Use that instead documentName = loadOptions.Name; } // Most image file formats have a signature that can be used to detect to detect the type of the file. // However, some formats supported by LEADTOOLS do not, such as plain text files (TXT) or DXF CAD format or // For these, we detect the MIME type from the file extension if available and set it in the load document options and the // documents library will use this value if it fails to detect the file format from the data. if (!string.IsNullOrEmpty(documentName)) { loadOptions.MimeType = RasterCodecs.GetExtensionMimeType(documentName); } LEADDocument document = null; try { // first, check if this is pre-cached if (PreCacheHelper.PreCacheExists) { string documentId = PreCacheHelper.CheckDocument(request.Uri, loadOptions.MaximumImagePixelSize); if (documentId != null) { var precachedDocument = DocumentFactory.LoadFromCache(cache, documentId); // Instead of returning the same pre-cached document, we'll return a cloned version. // This allows the user to make changes (get/set annotations) without affecting the pre-cached version. document = precachedDocument.Clone(cache, new CloneDocumentOptions() { CachePolicy = ServiceHelper.CreatePolicy() }); } } // else, load normally if (document == null) { document = DocumentFactory.LoadFromUri(request.Uri, loadOptions); if (document == null) { // This document was rejected due to its mimeType. throw new InvalidOperationException("Document at URI '" + request.Uri + "' uses a blocked mimeType"); } } CacheController.TrySetCacheUri(document); if (ServiceHelper.AutoUpdateHistory) { document.History.AutoUpdate = true; } ServiceHelper.SetRasterCodecsOptions(document.RasterCodecs, request.Resolution); document.AutoDeleteFromCache = false; document.AutoDisposeDocuments = true; document.AutoSaveToCache = false; document.SaveToCache(); /* * NOTE: Use the line below to add this new document * to the pre-cache. By doing so, everyone loading a document from * that URL will get a copy of the same document from the cache/pre-cache. * * if (!isInPrecache) * PreCacheHelper.AddExistingDocument(request.Uri, document); */ return(new LoadFromUriResponse { Document = document }); } finally { if (document != null) { document.Dispose(); } } }