public async Task <IActionResult> Upload([FromRoute] string path, [FromForm] IEnumerable <IFormFile> files) { if (!ModelState.IsValid) { TempData[ERROR_MESSAGES] = "InvalidRequest"; return(RedirectToIndexWithQueryString()); } var folder = await _storage.FindFolderAsync(path ?? string.Empty); if (folder == null) { TempData[ERROR_MESSAGES] = $"NotFound:{path}"; return(RedirectToIndexWithQueryString()); } var children = await _storage.GetFilesAsync(folder); var errors = new List <string>(); var successes = new List <string>(); foreach (var file in files) { var name = file.FileName ?? file.Name; if (children.Any(f => f.Name == name)) { errors.Add($"Conflict:{name}"); continue; } try { using (var stream = file.OpenReadStream()) { var added = await _storage.AddFileAsync(folder, name, file.ContentType, stream); successes.Add($"Upload:{added.Name}"); } } catch (Exception) { errors.Add($"Unknown:{name}"); } } if (errors.Count > 0) { TempData[ERROR_MESSAGES] = TempData[ERROR_MESSAGES] + "," + string.Join(",", errors); } if (successes.Count > 0) { TempData[SUCCESS_MESSAGES] = string.Join(",", successes); } return(RedirectToIndexWithQueryString()); }
public async Task <IActionResult> Post(string path, IEnumerable <IFormFile> files) { var folder = await _storage.FindFolderAsync(path); if (folder == null) { return(NotFound()); } var children = await _storage.GetFilesAsync(folder); var errors = new List <string>(); foreach (var file in files.Where(f => f.Length > 0)) { if (children.Any(f => f.Name == file.Name)) { errors.Add(file.FileName); continue; } else { try { using (var stream = file.OpenReadStream()) { await _storage.AddFileAsync(folder, file.FileName, file.ContentType, stream); } } catch (Exception) { errors.Add(file.FileName); } } } return(Ok(new FileUploadViewModel { Count = files.Count() - errors.Count, Size = files.Sum(f => f.Length), Errors = errors })); }
public async Task <bool> LockAsync(string name) { var folder = await _storage.FindFolderAsync("/locks"); if (folder == null) { var home = await _storage.GetHomeAsync(); folder = await _storage.AddFolderAsync(home, "locks"); } try { await _storage.AddFileAsync(folder, name, "text/plain", new MemoryStream(new byte[] { 0 })); return(true); } catch { return(false); } }