Пример #1
0
        public async Task <IHttpActionResult> PostSave(string purpose, SaveFileBindingModel model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }
            var fileEntries = await userFileRepository.Objects.Where(e => model.FileId.Contains(e.UserFileId)).ToListAsync();

            if (fileEntries.Count != model.FileId.Count)
            {
                return(BadRequest());
            }
            var forHash = fileEntries.Aggregate("", (h, f) => h + f.UserFileId.ToString() + f.FileSize.ToString());

            if (forHash.GetHashCode() != model.Hash)
            {
                return(BadRequest());
            }
            await Task.WhenAll(fileEntries.Select(f => {
                f.State = UserFileState.Saved;
                return(userFileRepository.SaveInstance(f));
            }));

            var result = fileEntries.Select(f => new SavedFileViewModel {
                Id = f.UserFileId, FileSize = f.FileSize, Url = f.FilePath
            });

            return(Ok(result));
        }
Пример #2
0
        public async Task <IHttpActionResult> PostUpload()
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }
            string forHash = "";
            var    answer  = new SaveFileBindingModel()
            {
                FileId = new List <int>()
                {
                }
            };
            HttpRequestMessage request = this.Request;

            if (!request.Content.IsMimeMultipartContent())
            {
                throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
            }
            var rnd = new System.Random((int)DateTime.Now.Ticks + Request.GetHashCode());

            Func <int, string> randomFileName = (n) =>
                                                new String(
                Enumerable.Range(1, n)
                .Select(x => fileNameChars[rnd.Next(fileNameChars.Length)])
                .ToArray());

            string        newDir;
            DirectoryInfo di;

            do
            {
                newDir = randomFileName(randomDirNameLen);
                di     = Directory.CreateDirectory(UploadsFolder + newDir);
            } while (di.CreationTime.AddSeconds(10) < DateTime.Now);
            string root     = UploadsFolder + newDir + @"\";
            var    provider = new MultipartFormDataStreamProvider(root);

            await request.Content.ReadAsMultipartAsync(provider);

            MultipartFileData file = provider.FileData.First();

            if (file == null)
            {
                return(BadRequest("Not file in input"));
            }
            var originalName = file.Headers.ContentDisposition.FileName;
            var newName      = randomFileName(10) + Path.GetExtension(originalName);
            var newLocalName = UploadsFolder + newDir + @"\" + newName;

            File.Move(file.LocalFileName, newLocalName);

            var userFile = new UserFile
            {
                UserId     = CurrentUser.UserId,
                FilePath   = newDir + @"/" + newName,
                FileSize   = (int)new System.IO.FileInfo(newLocalName).Length,
                State      = UserFileState.JustUploaded,
                DateCreate = DateTime.Now,
                ServerId   = 1
            };

            var addedFile = await userFileRepository.SaveInstance(userFile);

            answer.FileId.Add(addedFile.UserFileId);
            forHash = forHash + addedFile.UserFileId.ToString() + addedFile.FileSize.ToString();

            answer.Hash = forHash.GetHashCode();
            return(Ok(answer));
        }