/// <summary> /// Upload Chunk /// </summary> /// <param name="uow">Uow</param> /// <param name="oid">Oid</param> /// <param name="request">Request</param> private void UploadChunk(IFlowDocsUnitOfWork uow, Guid oid, UploadDocumentRequest request) { var dbId = uow.Attachments.FirstOrDefault(a => a.OidDocument == oid); int identity = request.ChunkNumber == 0 ? -1 : dbId.AttachmentId; CheckHash(uow, oid, request); SqlServerBlobStream blob = null; try { blob = new SqlServerBlobStream( _provider.ConnectionString, _provider.TableName, _provider.DataColumnName, _provider.PartialFlagColumnName, _provider.FileNameColumnName, request.DocumentName, _provider.MIMETypeColumnName, "", _provider.CreateProcedure, _provider.OpenProcedure, _provider.WriteProcedure, _provider.ReadProcedure, _provider.CleanupProcedure, _provider.RenameProcedure, _provider.StoreHashProcedure, _provider.DeleteProcedure, identity); blob.Seek(0, SeekOrigin.End); blob.Write(request.DataField, 0, request.DataField.Length); } finally { if (blob != null) { blob.Close(); //blob.Dispose(); } } UpdateDbForUpload(uow, oid, request, identity, blob.Identity); }
/// <summary> /// Download Chunk /// </summary> /// <param name="uow">Uow</param> /// <param name="request">Request</param> /// <param name="response">Response</param> private void DownloadChunk(IFlowDocsUnitOfWork uow, DownloadDocumentRequest request, ref DownloadDocumentResponse response) { Document doc = null; int identity = 0; identity = GetDocument(uow, request, ref doc); response = new DownloadDocumentResponse(); response.DocumentName = doc.DocumentName; response.Version = doc.Version; response.Description = doc.Description; response.Owner = doc.Owner; response.Path = doc.Path; response.MimeType = doc.MimeType; response.FileSize = doc.FileSize; SqlServerBlobStream blob = null; try { if (_provider.OpenProcedure != null && _provider.ReadProcedure != null) { blob = new SqlServerBlobStream( _provider.ConnectionString, identity, _provider.OpenProcedure, _provider.ReadProcedure, FileAccess.Read); } else { blob = new SqlServerBlobStream( _provider.ConnectionString, _provider.TableName, _provider.DataColumnName, identity, _provider.FileNameColumnName, _provider.MIMETypeColumnName, FileAccess.Read); } blob.Seek(request.ChunkNumber * request.ChunkSize, SeekOrigin.Begin); response.DataField = new byte[request.ChunkSize]; response.ChunkSize = blob.Read(response.DataField, 0, request.ChunkSize); response.ChunkNumber = request.ChunkNumber; response.ChunkTotal = (int)Math.Ceiling((decimal)blob.Length / request.ChunkSize); response.FileHash = Md5Hash.CreateMd5Hash(response.DataField); } finally { if (blob != null) { blob.Close(); //blob.Dispose(); } } }
protected void Page_Load(object sender, EventArgs e) { //Make sure there is an 'id' in the query string if (Request.QueryString["id"] == null) { throw new ArgumentException("No file id was specified"); } //Make sure there is no crap in the HTTP headers that would be sent Response.ClearHeaders(); Response.BufferOutput = false; //Get ID of file to load form the database int id = int.Parse(Request.QueryString["id"]); SqlServerUploadStorageProvider provider = (SqlServerUploadStorageProvider)UploadStorage.Provider; // Use the provider attributes to connect to the database and use stored procs or generated sql // to get a stream on the file. SqlServerBlobStream blob = null; if (provider.OpenProcedure != null && provider.ReadProcedure != null) { blob = new SqlServerBlobStream( provider.ConnectionString, id, provider.OpenProcedure, provider.ReadProcedure, FileAccess.Read); } else { blob = new SqlServerBlobStream( provider.ConnectionString, provider.TableName, provider.DataColumnName, id, provider.FileNameColumnName, provider.MIMETypeColumnName, FileAccess.Read); } // Set the filename and MIME-type of the response to that given by the file Response.ContentType = blob.MIMEType; Response.AddHeader("Content-disposition", "attachment;filename=\"" + blob.FileName + "\""); //Pipe the file data to the browser DataPipe.Pipe(blob, Response.OutputStream); // Close the stream from the DB. blob.Close(); //Finished! Response.End(); }