Пример #1
0
        /// <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);
        }
Пример #2
0
        /// <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();
                }
            }
        }
Пример #3
0
        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();
        }