Beispiel #1
0
        public async Task <IHttpActionResult> Upload(int id)
        {
            if (!Request.Content.IsMimeMultipartContent("form-data"))
            {
                return(BadRequest("Unsupported media type"));
            }

            try
            {
                var provider = new MultipartFormDataStreamProvider(HttpContext.Current.Server.MapPath("~/uploads/"));
                var content  = new StreamContent(HttpContext.Current.Request.GetBufferlessInputStream(true));

                foreach (var header in Request.Content.Headers)
                {
                    content.Headers.TryAddWithoutValidation(header.Key, header.Value);
                }
                await content.ReadAsMultipartAsync(provider);

                using (var context = new DocumentEntities())
                {
                    foreach (var file in provider.FileData)
                    {
                        using (var ts = new TransactionScope())
                        {
                            var documentMeta = new DocumentMeta
                            {
                                CollectionId = id,
                                FileName     = file.Headers.ContentDisposition.Name.Trim(new char[] { '"' }).Replace("&", "and"),
                                UploadTime   = DateTime.Now
                            };

                            context.DocumentMeta.Add(documentMeta);
                            context.SaveChanges();

                            var documentContent = new DocumentContent
                            {
                                Id      = documentMeta.Id,
                                RowGuid = Guid.NewGuid(),
                                Data    = new Byte[0]
                            };

                            context.DocumentContent.Add(documentContent);
                            context.SaveChanges();
                            using (var stream = File.OpenRead(file.LocalFileName))
                            {
                                DocumentContentHelper.AddContentData(documentContent.Id, context, stream);
                            }

                            ts.Complete();
                        }
                    }
                }

                return(Ok());
            }
            catch (Exception ex)
            {
                return(BadRequest(ex.GetBaseException().Message));
            }
        }
Beispiel #2
0
        public HttpResponseMessage Get(int id)
        {
            using (var context = new DocumentEntities())
            {
                var documentMeta = context.DocumentMeta.FirstOrDefault(d => d.Id == id && d.DeleteTime == null);
                if (documentMeta == null)
                {
                    return(new HttpResponseMessage(HttpStatusCode.NotFound));
                }
                var stream = new MemoryStream();

                var result = new HttpResponseMessage(HttpStatusCode.OK)
                {
                    Content = DocumentContentHelper.GetContentData(id, context, stream)
                };
                result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
                {
                    FileName = documentMeta.FileName
                };
                result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");

                return(result);
            }
        }