Exemplo n.º 1
0
        public async Task <HttpResponseMessage> UploadFile()
        {
            if (!Request.Content.IsMimeMultipartContent())
            {
                Request.CreateResponse(HttpStatusCode.UnsupportedMediaType);
            }

            var provider = GetMultipartMemoryStreamProvider();

            var tt = await Request.Content.ReadAsMultipartAsync(provider).ContinueWith(p =>
            {
                var result = p.Result;
                // var myParameter = result.FormData.GetValues("myParameter").FirstOrDefault();
                var file = _fileService.Create();
                foreach (var stream in result.Contents.Where((content, idx) => result.IsStream(idx)))
                {
                    string fileName = GetFileInfo.GetDeserializedFileName(stream);
                    var contentType = GetFileInfo.GetContentType(stream);

                    if (_fileService.IsValidType(fileName) && _fileService.IsValidContent(contentType.MediaType))
                    {
                        file.FileBinary = stream.ReadAsByteArrayAsync().Result;
                        file.Size       = stream.Headers.ContentLength;
                        file.IsDeleted  = false;
                        file.Extention  = contentType.MediaType;
                        file.Guid       = Guid.NewGuid();
                        file.Name       = fileName;
                        file.UploadDate = DateTime.UtcNow;
                        //  var file = new this.GetFormData<string >(stream.Headers.ContentDisposition.FileName);
                        //  var contentTest =  stream.ReadAsByteArrayAsync();
                        // ... and so on, as per your original code.
                        _fileService.Add(file);
                        _unitOfWork.SaveChanges();
                    }
                }
                return(file);
            });



            /*var result = await Request.Content.ReadAsMultipartAsync(provider);
             *
             *
             * // On upload, files are given a generic name like "BodyPart_26d6abe1-3ae1-416a-9429-b35f15e6e5d5"
             * // so this is how you can get the original file name
             *
             * var originalFileName = GetDeserializedFileName(result.FileData.First());
             *
             * // uploadedFileInfo object will give you some additional stuff like file length,
             * // creation time, directory name, a few filesystem methods etc..
             *
             * var uploadedFileInfo = new FileInfo(result.FileData.First().LocalFileName);
             *
             * // Remove this line as well as GetFormData method if you're not
             * // sending any form data with your upload request
             *
             * var fileUploadObj = GetFormData<UploadDataModel>(result);
             *
             * // Through the request response you can return an object to the Angular controller
             * // You will be able to access this in the .success callback through its data attribute
             * // If you want to send something to the .error callback, use the HttpStatusCode.BadRequest instead
             *
             * var returnData = "ReturnTest";
             *
             *
             */
            return(this.Request.CreateResponse(HttpStatusCode.OK, new { id = tt.Id }));
        }