public async Task <IActionResult> Upload() { if (!MultipartRequestHelper.IsMultipartContentType(Request.ContentType)) { return(BadRequest()); } try { if (!Request.Form.Files.Any()) { return(BadRequest("There is no file.")); } var client = new MongoDB.Driver.MongoClient("mongodb://*****:*****@localhost/?safe=true"); var db = client.GetDatabase("memoryvault"); var coll = db.GetCollection <MemoryItemModel>("memories"); foreach (var fileReq in Request.Form.Files) { GridFSBucketOptions opts = new GridFSBucketOptions(); opts.BucketName = "memoryfiles"; var bucket = new GridFSBucket(db, opts); ObjectId res; using (var stream = fileReq.OpenReadStream()) { res = await bucket.UploadFromStreamAsync(fileReq.FileName, stream); } var ext = System.IO.Path.GetExtension(fileReq.FileName); var memory = new MemoryItemModel { CreateTime = DateTime.Now, ItemId = res, FileName = fileReq.FileName, FileExtension = ext }; await coll.InsertOneAsync(memory); QueueRepository.Enqueue(new CreateThumbnailCommand { MemoryId = memory.Id.ToString() }); } } catch (MongoWriteException exc) { if (((MongoBulkWriteException)exc.InnerException).WriteErrors.Any(p => p.Category == ServerErrorCategory.DuplicateKey)) { return(Ok()); } return(Ok(exc.Message)); } catch (Exception exc) { return(Ok(exc.Message)); } return(Ok()); }