Esempio n. 1
0
        /// <summary>
        /// Get a stream for writing the contents of an item
        /// </summary>
        /// <param name="entry">The entry representing the file to be uploaded</param>
        /// <param name="length">The length of the file to be uploaded</param>
        /// <returns>The <see cref="Stream"/>that the file's content can be written to</returns>
        public override Stream GetWriteStreamForEntry(SyncEntry entry, long length)
        {
            // Create a default session. By itself, the file will be uploaded to Backblaze when the stream
            // containins the session is disposed.
            BackblazeB2UploadSession session = new BackblazeB2UploadSession(entry, length);

            // If the file is large enough, call the method below to get the large file upload information. When
            // these properties are present, the stream will upload the file's parts individually.
            if (length >= this.TypedConfiguration.ConnectionInfo.RecommendedPartSize)
            {
                session.StartLargeFileResponse =
                    this.backblazeClient.StartLargeUpload(
                        this.TypedConfiguration.BucketId,
                        entry.GetRelativePath(null, "/"))
                    .Result;

                session.GetUploadPartUrlResponse =
                    this.backblazeClient.GetUploadPartUrl(session.StartLargeFileResponse.FileId).Result;

                // Return the stream type dedicated to uploading large files (via parts)
                return(new BackblazeB2LargeUploadStream(
                           this,
                           session,
                           Constants.LimitPartMaximumSize,
                           length));
            }

            // The file size is below the large-file limit, so upload directly
            return(new BackblazeB2UploadStream(this, session));
        }
Esempio n. 2
0
        public BackblazeB2UploadStream(
            BackblazeB2Adapter adapter,
            BackblazeB2UploadSession session)
        {
            this.adapter = adapter;
            this.Session = session;

            this.memoryStream = new MemoryStream();
        }
 public BackblazeB2LargeUploadStream(
     BackblazeB2Adapter adapter,
     BackblazeB2UploadSession session,
     long partSize,
     long fileSize)
     : base(partSize, fileSize)
 {
     this.adapter = adapter;
     this.Session = session;
 }
Esempio n. 4
0
 public async Task <UploadPartResponse> UploadPart(
     BackblazeB2UploadSession session,
     int partNumber,
     string sha1Hash,
     long size,
     Stream contentStream)
 {
     return(await this.backblazeClient.UploadPart(
                session.GetUploadPartUrlResponse.UploadUrl,
                session.GetUploadPartUrlResponse.AuthorizationToken,
                partNumber,
                sha1Hash,
                size,
                contentStream)
            .ConfigureAwait(false));
 }