public virtual async Task <IHttpActionResult> Download(Guid sourceId) { var fileSource = context.GetDataSource <FileDataSource>(sourceId); if (fileSource == null) { return(NotFound()); } var memoryStream = await streamManager.RetrieveData(sourceId, fileSource.CurrentFileName); var contentLength = memoryStream.Length; MediaTypeHeaderValue mediaType; MediaTypeHeaderValue.TryParse(fileSource.MediaType, out mediaType); var contentDisposition = new ContentDispositionHeaderValue("attachment") { FileName = fileSource.OriginalFileName, Size = contentLength }; var result = new FileActionResult( Request, memoryStream, mediaType, memoryStream.Length, contentDisposition); return(result); }
public virtual SourceResultDataContract ValidateSource(Guid sourceId) { var fileSource = Context.GetDataSource <FileDataSource>(sourceId); if ((fileSource == null) || (fileSource.InputStatus != SourceStatus.PendingExtraction)) { return(DataContractError(sourceId, DataSourceServiceResources.FileSourceIsNotPendingExtraction)); } Context.RemoveSourceErrors(sourceId); var returnResult = DataContractSuccess(sourceId); var handler = handlerFactory.CreateHandler(fileSource.HandlerName); if (Context.FileIsDuplicate(fileSource)) { var message = DataSourceServiceResources.DuplicateFile; ReportSourceError(sourceId, SourceErrorType.DuplicateFile, message); returnResult.Succeeded = false; returnResult.ErrorMessages.Add(message); return(returnResult); } if (handler == null) { var message = string.Format(DataSourceServiceResources.InvalidHandlerMessage, fileSource.HandlerName); ReportSourceError(sourceId, SourceErrorType.FileTypeNotFound, message); returnResult.Succeeded = false; returnResult.ErrorMessages.Add(message); return(returnResult); } try { using (var fileStream = streamManager.RetrieveData(sourceId, fileSource.CurrentFileName).Result) { foreach (var missingColumn in handler.MissingColumns(fileSource.CurrentFileName, fileStream)) { var message = DataSourceServiceResources.MissingRowsMessage; var columns = string.Join(",", missingColumn.Value); message = string.Format(message, missingColumn.Key, columns); ReportSourceError(sourceId, SourceErrorType.MissingFields, message); returnResult.Succeeded = false; returnResult.ErrorMessages.Add(message); } } } catch (Exception ex) { ExceptionPolicy.HandleException(ex, Policy.DataEntry); var message = DataSourceServiceResources.UnReadableFile; returnResult.Succeeded = false; returnResult.ErrorMessages.Add(message); ReportSourceError(sourceId, SourceErrorType.UnReadableFile, message); } return(returnResult); }