private static void EditFileStream(FileDoc fileRecord, Action <XmlDocument> action)
        {
            var ctx = BlobStorage.GetBlobStorageContextAsync(fileRecord.FileId, CancellationToken.None)
                      .GetAwaiter().GetResult();
            var blobProvider = ctx.Provider;

            var gcXmlDoc = new XmlDocument();

            using (var xmlReaderStream = blobProvider.GetStreamForRead(ctx))
                gcXmlDoc.Load(xmlReaderStream);

            action(gcXmlDoc);

            var ctdString = gcXmlDoc.OuterXml;

            var blobProvider2 = BlobStorage.GetProvider(ctdString.Length);
            var ctx2          = new BlobStorageContext(blobProvider)
            {
                VersionId      = ctx.VersionId,
                PropertyTypeId = ctx.PropertyTypeId,
                Length         = ctdString.Length
            };

            blobProvider2.AllocateAsync(ctx2, CancellationToken.None).GetAwaiter().GetResult();

            using (var xmlWriterStream = blobProvider2.GetStreamForWrite(ctx2))
            {
                xmlWriterStream.Write(Encoding.UTF8.GetBytes(ctdString));
                xmlWriterStream.Flush();
                fileRecord.Size = xmlWriterStream.Length;
            }

            fileRecord.BlobProvider     = blobProvider2.GetType().FullName;
            fileRecord.BlobProviderData = BlobStorageContext.SerializeBlobProviderData(ctx2.BlobProviderData);
        }
Пример #2
0
        public async Task <string> UploadFileToResponse(IFormFile file, string homeworkID, string senderID, string subjectID, string classID)
        {
            try
            {
                _files = database.GetCollection <FileDoc>(homeworkID + "_re_files");
            }
            catch
            {
                return(null);
            }
            byte[] binaryContent;
            using (var uploadedFile = file.OpenReadStream())
            {
                using (var memoryStream = new MemoryStream())
                {
                    uploadedFile.CopyTo(memoryStream);
                    binaryContent = memoryStream.ToArray();
                }
            }
            FileDoc fileDoc = new FileDoc
            {
                fileContent = binaryContent,
                senderID    = senderID,
                contentType = file.ContentType,
                fileName    = file.FileName,
                subjectID   = subjectID,
                classID     = classID
            };

            await _files.InsertOneAsync(fileDoc);

            return(fileDoc.Id);
        }
Пример #3
0
 private DbFile CreateFromFileRow(FileDoc file)
 {
     return(new DbFile
     {
         FileId = file.FileId,
         ContentType = file.ContentType,
         FileNameWithoutExtension = file.FileNameWithoutExtension,
         Extension = file.Extension,
         Size = file.Size,
         //Checksum = null,
         Stream = file.Buffer,
         CreationDate = file.CreationDate,
         //RowGuid = Guid.Empty,
         Timestamp = file.Timestamp,
         Staging = file.Staging,
         //StagingVersionId = 0,
         //StagingPropertyTypeId = 0,
         IsDeleted = file.IsDeleted,
         BlobProvider = file.BlobProvider,
         BlobProviderData = file.BlobProviderData,
         ExternalStream = GetExternalData(file),
     });
 }
        private BinaryDataValue CreateBinaryDataValue(InMemoryDataBase db, BinaryPropertyDoc binaryDoc, FileDoc fileDoc = null)
        {
            if (fileDoc == null)
            {
                fileDoc = db.Files.FirstOrDefault(x => x.FileId == binaryDoc.FileId);
            }

            return(new BinaryDataValue
            {
                Id = binaryDoc.BinaryPropertyId,
                FileId = binaryDoc.FileId,
                Checksum = null,
                FileName = fileDoc == null ? null : new BinaryFileName(fileDoc.FileNameWithoutExtension.Trim('.'), fileDoc.Extension.Trim('.')),
                ContentType = fileDoc?.ContentType,
                Size = fileDoc?.Size ?? 0L,
                BlobProviderName = fileDoc?.BlobProvider,
                BlobProviderData = fileDoc?.BlobProviderData,
                Timestamp = fileDoc?.Timestamp ?? 0L
            });
        }
Пример #5
0
 private byte[] GetExternalData(FileDoc file)
 {
     return(GetExternalData(file.BlobProvider, file.BlobProviderData, file.Size));
 }