Esempio n. 1
0
        private async Task <ItemCollectionInternal> getVersions(BoxFileInternal fileEntry)
        {
            var response = await _client.GetAsync(string.Format("{0}/{1}/files/{2}/versions", ApiBaseUrl, Version, fileEntry.Id));

            switch (response.StatusCode)
            {
            case HttpStatusCode.OK:
                break;

            case HttpStatusCode.Unauthorized:
                var msg = await response.Content.ReadAsStringAsync( );

                throw new CloudStorageAuthorizationException(msg);

            case HttpStatusCode.Forbidden:
                return(null);

            default:
                throw new HttpException((int)response.StatusCode, response.Content.ReadAsStringAsync( ).Result);
            }
            return(await response.Content.ReadAsAsync <ItemCollectionInternal>( ));
        }
Esempio n. 2
0
 private void mergeItemToFile(BoxItemInternal boxItem, BoxFileInternal file)
 {
     file.Type                = boxItem.Type;
     file.Id                  = boxItem.Id;
     file.Sequence_Id         = boxItem.Sequence_Id;
     file.ETag                = boxItem.ETag;
     file.SHA1                = boxItem.SHA1;
     file.Name                = boxItem.Name;
     file.Description         = boxItem.Description;
     file.Size                = boxItem.Size;
     file.Path_Collection     = boxItem.Path_Collection;
     file.Created_At          = boxItem.Created_At;
     file.Modified_At         = boxItem.Modified_At;
     file.Trashed_At          = boxItem.Trashed_At;
     file.Purged_At           = boxItem.Purged_At;
     file.Content_Created_At  = boxItem.Content_Created_At;
     file.Content_Modified_At = boxItem.Content_Modified_At;
     file.Created_By          = boxItem.Created_By;
     file.Modified_By         = boxItem.Modified_By;
     file.Owned_By            = boxItem.Owned_By;
     //file.Shared_Link = boxItem.Shared_Link;
     file.Parent      = boxItem.Parent;
     file.Item_Status = boxItem.Item_Status;
 }
Esempio n. 3
0
        private async Task <MetaDataBase> uploadFile(string path, HttpContent dataContent)
        {
            path = FixPath(path);

            var parts = extractParentDirectoryAndItemNameFromFullPath(path);

            var targetFolder = await this.getFolderByPath(parts.Item1, false);

            var fileEntry = targetFolder.Item_Collection.Entries.FirstOrDefault(e => e.Name == parts.Item2);
            HttpResponseMessage response;

            if (fileEntry != null)
            {
                //file already exists and needs to be updated
                var multipartContent = new MultipartFormDataContent( );
                multipartContent.Headers.TryAddWithoutValidation("If-Match", fileEntry.ETag);

                dataContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data")
                {
                    Name     = "\"file\"",
                    FileName = string.Format("\"{0}\"", parts.Item2)
                };
                dataContent.Headers.ContentType = MediaTypeHeaderValue.Parse("application/octet-stream");

                multipartContent.Add(dataContent);

                response = await this._client.PostAsync(string.Format("{0}/{1}/files/{2}/content", ApiUploadUrl, Version, fileEntry.Id), multipartContent);
            }
            else
            {
                //file is new
                var multipartContent = new MultipartFormDataContent( );

                dataContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data")
                {
                    Name     = "\"file\"",
                    FileName = string.Format("\"{0}\"", parts.Item2)
                };
                dataContent.Headers.ContentType = MediaTypeHeaderValue.Parse("application/octet-stream");

                var metadata = new {
                    parent = new {
                        id = targetFolder.Id
                    },
                    name = parts.Item2
                };

                var metadataContent = new ObjectContent(metadata.GetType( ), metadata, new JsonMediaTypeFormatter( ));
                metadataContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data")
                {
                    Name = "\"metadata\""
                };

                multipartContent.Add(dataContent);
                multipartContent.Add(metadataContent);
                response = await this._client.PostAsync(string.Format("{0}/{1}/files/content", ApiUploadUrl, Version), multipartContent);
            }

            switch (response.StatusCode)
            {
            case HttpStatusCode.OK:
            case HttpStatusCode.Created:
                break;

            default:
                throw new CloudStorageRequestFailedException("Unable to upload file.");
            }

            // Read response asynchronously as JsonValue and write out tweet texts
            var col = await response.Content.ReadAsAsync <ItemCollectionInternal>( );

            var file = new BoxFileInternal( );

            mergeItemToFile(col.Entries.First( ), file);
            if (!cached.ContainsKey(path))
            {
                cached.GetOrAdd(path, s => new FileInfo {
                    Id = file.Id, IsFolder = false
                });
            }

            return(new BoxFileMetaData(file));
        }