public byte[] CreateArchive(SageImageWorkOrder pictures) { var pathToImg = Path.Combine(_urlToFolderPhotoWorkOrders, pictures.WorkOrder.ToString()); var path = _storageProvider.GetPublicUrl(pathToImg); var outputMemStream = new MemoryStream(); var zipStream = new ZipOutputStream(outputMemStream); zipStream.SetLevel(3); foreach (var record in pictures.Images.Where(x => !x.IsDeleted)) { byte[] bytes; try { bytes = _storageProvider.GetFile(Path.Combine(path, record.BigImage)).OpenRead().ReadAsBytes(); } catch (Exception) { continue; } var newEntry = new ZipEntry(record.BigImage) { DateTime = DateTime.Now }; zipStream.PutNextEntry(newEntry); var inStream = new MemoryStream(bytes); StreamUtils.Copy(inStream, zipStream, new byte[4096]); inStream.Close(); zipStream.CloseEntry(); } zipStream.IsStreamOwner = false; zipStream.Close(); outputMemStream.Position = 0; return(outputMemStream.ToArray()); }
public ImageLocation SavePhotoForWorkOrder(ImageModel model) { var workOrder = this.repository.SearchFor <SageWorkOrder>(x => x.WorkOrder == model.IdWorkOrder).SingleOrDefault(); if (workOrder == null) { return(null); } var imagesDb = repository.SearchFor <SageImageWorkOrder>(x => x.WorkOrder == model.IdWorkOrder).SingleOrDefault(); var countImage = 1; if (imagesDb != null && imagesDb.Images != null) { countImage = imagesDb.Images.Last().Id + 1; } else { imagesDb = new SageImageWorkOrder { Images = new List <ImageLocation>(), WorkOrder = model.IdWorkOrder, WorkOrderBsonId = workOrder.Id, }; } //var pathToImage = Path.Combine(this.httpContextProvider.MapPath(this._urlToFolderPhotoWorkOrders), model.IdWorkOrder.ToString()); var pathToImage = _storageProvider.GetPublicUrl(Path.Combine(this._urlToFolderPhotoWorkOrders, model.IdWorkOrder.ToString())); var nameBig = $"{workOrder.WorkOrder}-{countImage}"; var nameSmall = $"{small}-{workOrder.WorkOrder}-{countImage}"; var fileName = SavePhotoForWorkOrder(model.Image, pathToImage, nameBig, settings.SizeBigPhoto, workOrder, countImage); var fileNameSmall = SavePhotoForWorkOrder(model.Image, pathToImage, nameSmall, this.settings.SizeSmallPhoto, workOrder, countImage); var maxId = imagesDb.Images.Any() ? imagesDb.Images.Max(x => x.Id) : 0; var image = new ImageLocation { Image = fileNameSmall, BigImage = fileName, Latitude = model.Latitude, Longitude = model.Longitude, Id = maxId + 1, Description = model.Description }; imagesDb.Images.Add(image); repository.Add(imagesDb); var milliseconds = DateTime.Now.TimeOfDay.TotalMilliseconds; image.Image += $"?{milliseconds}"; image.BigImage += $"?{milliseconds}"; _hub.UpdateWorkOrderPicture(imagesDb); return(image); }
public void UpdateWorkOrderPicture(SageImageWorkOrder model) { this._clients.All.UpdateWorkOrderPicture(model); }