public async Task <HttpResponseMessage> Put(string name, bool preserveTimestamps = false) { var metadata = GetFilteredMetadataFromHeaders(ReadInnerHeaders); var etag = GetEtag(); var options = new FileActions.PutOperationOptions(); long contentSize; if (long.TryParse(GetHeader(Constants.FileSystem.RavenFsSize), out contentSize)) { options.ContentSize = contentSize; } DateTimeOffset lastModified; if (DateTimeOffset.TryParse(GetHeader(Constants.RavenLastModified), out lastModified)) { options.LastModified = lastModified; } options.PreserveTimestamps = preserveTimestamps; options.ContentLength = Request.Content.Headers.ContentLength; options.TransferEncodingChunked = Request.Headers.TransferEncodingChunked ?? false; await FileSystem.Files.PutAsync(name, etag, metadata, () => Request.Content.ReadAsStreamAsync(), options); Synchronizations.StartSynchronizeDestinationsInBackground(); return(GetEmptyMessage(HttpStatusCode.Created)); }
public async Task <HttpResponseMessage> Put(string name, bool preserveTimestamps = false) { var metadata = GetFilteredMetadataFromHeaders(ReadInnerHeaders); var etag = GetEtag(); if (name.Length > AbstractPager.GetMaxKeySize()) { if (Log.IsDebugEnabled) { Log.Debug("File '{0}' was not created due to illegal name length", name); } return(GetMessageWithString(string.Format("File '{0}' was not created due to illegal name length", name), HttpStatusCode.BadRequest)); } var options = new FileActions.PutOperationOptions(); long contentSize; if (long.TryParse(GetHeader(Constants.FileSystem.RavenFsSize), out contentSize)) { options.ContentSize = contentSize; } DateTimeOffset lastModified; if (DateTimeOffset.TryParse(GetHeader(Constants.RavenLastModified), out lastModified)) { options.LastModified = lastModified; } options.PreserveTimestamps = preserveTimestamps; options.ContentLength = Request.Content.Headers.ContentLength; options.TransferEncodingChunked = Request.Headers.TransferEncodingChunked ?? false; await FileSystem.Files.PutAsync(name, etag, metadata, () => Request.Content.ReadAsStreamAsync(), options).ConfigureAwait(false); SynchronizationTask.Context.NotifyAboutWork(); return(GetEmptyMessage(HttpStatusCode.Created)); }
public async Task <HttpResponseMessage> Import() { using (var stream = await Request.Content.ReadAsStreamAsync().ConfigureAwait(false)) { var binaryReader = new BinaryReader(stream); long count = 0; while (true) { string name; try { name = binaryReader.ReadString(); } catch (EndOfStreamException) { break; // done } var metadata = RavenJObject.Parse(binaryReader.ReadString()); if (name.Length > SystemParameters.KeyMost) { if (Log.IsDebugEnabled) { Log.Debug("File '{0}' was not created due to illegal name length", name); } return(GetMessageWithString(string.Format("File '{0}' was not created due to illegal name length", name), HttpStatusCode.BadRequest)); } var contentSize = binaryReader.ReadInt64(); var options = new FileActions.PutOperationOptions { ContentSize = contentSize }; RavenJToken lastModifiedJToken; if (metadata.TryGetValue(Constants.RavenLastModified, out lastModifiedJToken)) { DateTimeOffset lastModified; if (DateTimeOffset.TryParse(lastModifiedJToken.Value <string>(), out lastModified)) { options.LastModified = lastModified; } } options.PreserveTimestamps = true; var fileStream = new PartialStream(stream, contentSize); var tcs = new TaskCompletionSource <Stream>(); tcs.SetResult(fileStream); await FileSystem.Files.PutAsync(name, null, metadata, () => tcs.Task, options).ConfigureAwait(false); if (count % 100 == 0) { SynchronizationTask.Context.NotifyAboutWork(); } } SynchronizationTask.Context.NotifyAboutWork(); } return(new HttpResponseMessage(HttpStatusCode.OK) { }); }