Example #1
0
 //DELETE
 public static async Task DeleteMediaAssetAsync(MediaAssetsWithMetaData deleteMediaAssetsWithMetaData)
 {
     await myDocumentClient.DeleteDocumentAsync(UriFactory.CreateDocumentUri(DatabaseId, CollectionId, deleteMediaAssetsWithMetaData.id));
 }
        public static async Task <HttpResponseMessage> RunPostMediaFileToAzureMediaServices([HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "PostMediaFileToAzureMediaServices/{deviceId}/{videoTitle}")] HttpRequestMessage req, string deviceId, string videoTitle, TraceWriter log)
        {
            var fileAsBytes = await req.Content.ReadAsByteArrayAsync();

            var myUploadedFile = new UploadedFile
            {
                Title      = videoTitle,
                FileName   = $"{deviceId}_{DateTime.UtcNow.Ticks}.mp4",
                File       = fileAsBytes,
                UploadedAt = DateTime.UtcNow
            };
            HttpClient httpClient = new HttpClient();

            //CREATE HTTP REQUEST
            HttpRequestMessage myRequest = new HttpRequestMessage(HttpMethod.Post, String.Format("https://login.microsoftonline.com/{0}/oauth2/token", tenantId));

            myRequest.Content = new StringContent("grant_type=" + GrantType + "&client_id=" + ClientID + "&client_secret=" + ClientSecret + "&resource=" + RequestedResource, Encoding.UTF8, "application/x-www-form-urlencoded");

            //SEND HTTP REQUEST AND RECEIVE HTTP RESPONSE MESSAGE
            HttpResponseMessage httpResponseMessageWithADToken = await httpClient.SendAsync(myRequest);

            //EXTRACT AD ACCESS TOKEN FROM HTTP RESPONSE MESSAGE
            var stringResult = httpResponseMessageWithADToken.Content.ReadAsStringAsync().Result;
            var resultObject = Newtonsoft.Json.JsonConvert.DeserializeObject <AzureADResult>(stringResult);
            var azureADToken = resultObject.access_token;

            ////////////////////////////////////////////////////////////////////////////////
            // PostCreateAnAsset
            ////////////////////////////////////////////////////////////////////////////////

            if (httpClient.DefaultRequestHeaders != null)
            {
                httpClient.DefaultRequestHeaders.Clear();
            }

            //  BEARER TOKEN AND HEADERS
            httpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", azureADToken);
            httpClient.DefaultRequestHeaders.Add("x-ms-version", "2.15");
            httpClient.DefaultRequestHeaders.Add("DataServiceVersion", "3.0");
            httpClient.DefaultRequestHeaders.Add("Accept", "application/json;odata=verbose");

            //CREATE HTTP REQUEST
            HttpRequestMessage myPostCreateAssetRequest = new HttpRequestMessage(HttpMethod.Post, String.Format("https://xamcammediaservice.restv2.westus.media.azure.net/api/Assets"));

            //ASSEMBLE THE CONTENT OF THE REQUEST INCLUDING JSON BODY FOR REQUEST
            XamCamFunctions.DataModels.CreateAnAsset.CreateAnAssetBody createAnAssetBody = new XamCamFunctions.DataModels.CreateAnAsset.CreateAnAssetBody {
                Name = "TestAsset7", Options = "0"
            };
            string PostCreateAnAssetjsonBody = JsonConvert.SerializeObject(createAnAssetBody);

            myPostCreateAssetRequest.Content = new StringContent(PostCreateAnAssetjsonBody, Encoding.UTF8, "application/json");

            //SEND HTTP REQUEST AND RECEIVE HTTP RESPONSE MESSAGE
            HttpResponseMessage myPostCreateAssetResponseMessage = await httpClient.SendAsync(myPostCreateAssetRequest);

            //EXTRACT RESPONSE FROM HTTP RESPONSE MESSAGE
            var PostCreateAssetStringResult = await myPostCreateAssetResponseMessage.Content.ReadAsStringAsync();

            //DESERIALIZE RESPONSE FROM HTTP RESPONSE MESSAGE (JSON->OBJECT)
            var myPostCreateAssetResponseMessageResultObject = Newtonsoft.Json.JsonConvert.DeserializeObject <XamCamFunctions.DataModels.CreateAnAsset.RootObject>(PostCreateAssetStringResult);

            var myPostCreateAssetRequestdObjectResults         = myPostCreateAssetResponseMessageResultObject.d;
            var myPostCreateAssetRequestdObjectResultsResultId = myPostCreateAssetRequestdObjectResults.Id;

            ////////////////////////////////////////////////////////////////////////////////
            // PostCreateAnAssetFile
            ////////////////////////////////////////////////////////////////////////////////

            if (httpClient.DefaultRequestHeaders != null)
            {
                httpClient.DefaultRequestHeaders.Clear();
            }

            //  BEARER TOKEN AND HEADERS
            httpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", azureADToken);
            httpClient.DefaultRequestHeaders.Add("x-ms-version", "2.15");
            httpClient.DefaultRequestHeaders.Add("DataServiceVersion", "3.0");
            httpClient.DefaultRequestHeaders.Add("Accept", "application/json;odata=verbose");

            //CREATE HTTP REQUEST
            HttpRequestMessage myPostCreateAnAssetFileRequest = new HttpRequestMessage(HttpMethod.Post, String.Format("https://xamcammediaservice.restv2.westus.media.azure.net/api/Files"));

            //ASSEMBLE THE CONTENT OF THE REQUEST INCLUDING JSON BODY FOR REQUEST
            XamCamFunctions.DataModels.CreateAssetFile.CreateAssetFileBody createdAssetFileBody = new XamCamFunctions.DataModels.CreateAssetFile.CreateAssetFileBody
            {
                IsEncrypted = "false",
                IsPrimary   = "true",
                MimeType    = "video/mp4",
                Name        = "TestVideo.mp4",
                //ParentAssetId = "nb:cid:UUID:498c1cac-fe58-4099-9c72-32cfde165f01"
                ParentAssetId = myPostCreateAssetRequestdObjectResultsResultId
            };

            string myPostCreateAnAssetFilejsonBody = JsonConvert.SerializeObject(createdAssetFileBody);

            myPostCreateAnAssetFileRequest.Content = new StringContent(myPostCreateAnAssetFilejsonBody, Encoding.UTF8, "application/json");

            //SEND HTTP REQUEST AND RECEIVE HTTP RESPONSE MESSAGE
            HttpResponseMessage myPostCreateAnAssetFileResponseMessage = await httpClient.SendAsync(myPostCreateAnAssetFileRequest);

            //EXTRACT RESPONSE FROM HTTP RESPONSE MESSAGE
            var myPostCreateAnAssetFileResponseMessagestringResult = myPostCreateAnAssetFileResponseMessage.Content.ReadAsStringAsync().Result;

            //DESERIALIZE RESPONSE FROM HTTP RESPONSE MESSAGE (JSON->OBJECT)
            var myPostCreateAnAssetFileResponseMessageresultObject = Newtonsoft.Json.JsonConvert.DeserializeObject <XamCamFunctions.DataModels.CreateAssetFile.RootObject>(myPostCreateAnAssetFileResponseMessagestringResult);

            var myPostCreateAnAssetFiledObjectResults    = myPostCreateAnAssetFileResponseMessageresultObject.d;
            var myPostCreateAnAssetFilecreateAssetFileId = myPostCreateAnAssetFiledObjectResults.Id;

            ////////////////////////////////////////////////////////////////////////////////
            // PostCreateAccessPolicy
            ////////////////////////////////////////////////////////////////////////////////

            if (httpClient.DefaultRequestHeaders != null)
            {
                httpClient.DefaultRequestHeaders.Clear();
            }

            //  BEARER TOKEN AND HEADERS
            httpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", azureADToken);
            httpClient.DefaultRequestHeaders.Add("x-ms-version", "2.15");
            httpClient.DefaultRequestHeaders.Add("DataServiceVersion", "1.0");
            httpClient.DefaultRequestHeaders.Add("Accept", "application/json;odata=verbose");

            //CREATE HTTP REQUEST
            HttpRequestMessage myPostCreateAccessPolicyRequest = new HttpRequestMessage(HttpMethod.Post, String.Format("https://xamcammediaservice.restv2.westus.media.azure.net/api/AccessPolicies"));

            //ASSEMBLE THE CONTENT OF THE REQUEST INCLUDING JSON BODY FOR REQUEST
            XamCamFunctions.DataModels.CreateAccessPolicy.CreateAccessPolicyBody createdAccessPolicyBody = new XamCamFunctions.DataModels.CreateAccessPolicy.CreateAccessPolicyBody {
                Name = "NewUploadPolicy", DurationInMinutes = "440", Permissions = "2"
            };
            string myPostCreateAccessPolicyjsonBody = JsonConvert.SerializeObject(createdAccessPolicyBody);

            myPostCreateAccessPolicyRequest.Content = new StringContent(myPostCreateAccessPolicyjsonBody, Encoding.UTF8, "application/json");

            //SEND HTTP REQUEST AND RECEIVE HTTP RESPONSE MESSAGE
            HttpResponseMessage myPostCreateAccessPolicyResponseMessage = await httpClient.SendAsync(myPostCreateAccessPolicyRequest);


            //EXTRACT RESPONSE FROM HTTP RESPONSE MESSAGE
            var myPostCreateAccessPolicystringResult = myPostCreateAccessPolicyResponseMessage.Content.ReadAsStringAsync().Result;

            //DESERIALIZE RESPONSE FROM HTTP RESPONSE MESSAGE (JSON->OBJECT)
            var myPostCreateAccessPolicyresultObject = Newtonsoft.Json.JsonConvert.DeserializeObject <XamCamFunctions.DataModels.CreateAccessPolicy.RootObject>(myPostCreateAccessPolicystringResult);

            var myPostCreateAccessPolicydObjectResults        = myPostCreateAccessPolicyresultObject.d;
            var myPostCreateAccessPolicyaccessPolicyIdResults = myPostCreateAccessPolicydObjectResults.Id;

            ////////////////////////////////////////////////////////////////////////////////
            // PostCreateLocator
            ////////////////////////////////////////////////////////////////////////////////

            if (httpClient.DefaultRequestHeaders != null)
            {
                httpClient.DefaultRequestHeaders.Clear();
            }

            //  BEARER TOKEN AND HEADERS
            httpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", azureADToken);
            httpClient.DefaultRequestHeaders.Add("x-ms-version", "2.15");
            httpClient.DefaultRequestHeaders.Add("DataServiceVersion", "1.0");
            httpClient.DefaultRequestHeaders.Add("Accept", "application/json;odata=verbose");

            //CREATE HTTP REQUEST
            HttpRequestMessage myPostCreateLocatorRequest = new HttpRequestMessage(HttpMethod.Post, String.Format("https://xamcammediaservice.restv2.westus.media.azure.net/api/Locators"));

            //ASSEMBLE THE CONTENT OF THE REQUEST INCLUDING JSON BODY FOR REQUEST
            XamCamFunctions.DataModels.CreateLocator.CreateLocatorBody createdLocatorBody = new XamCamFunctions.DataModels.CreateLocator.CreateLocatorBody
            {
                AccessPolicyId = myPostCreateAccessPolicyaccessPolicyIdResults,
                AssetId        = myPostCreateAssetRequestdObjectResultsResultId,
                StartTime      = DateTime.Now,
                Type           = 1
            };
            string myPostCreateLocatorjsonBody = JsonConvert.SerializeObject(createdLocatorBody);

            myPostCreateLocatorRequest.Content = new StringContent(myPostCreateLocatorjsonBody, Encoding.UTF8, "application/json");

            //SEND HTTP REQUEST AND RECEIVE HTTP RESPONSE MESSAGE
            HttpResponseMessage myPostCreateLocatorResponseMessage = await httpClient.SendAsync(myPostCreateLocatorRequest);

            //EXTRACT RESPONSE FROM HTTP RESPONSE MESSAGE
            var myPostCreateLocatorstringResult = myPostCreateLocatorResponseMessage.Content.ReadAsStringAsync().Result;

            //DESERIALIZE RESPONSE FROM HTTP RESPONSE MESSAGE (JSON->OBJECT)
            var myPostCreateLocatorresultObject = Newtonsoft.Json.JsonConvert.DeserializeObject <XamCamFunctions.DataModels.CreateLocator.RootObject>(myPostCreateLocatorstringResult);

            var myPostCreateLocatordObjectResults = myPostCreateLocatorresultObject.d;
            var myPostCreateLocatorlocatorResults = myPostCreateLocatordObjectResults.Id;

            const string assetIDSearchString       = "blob.core.windows.net/";
            var          indexOfContainerNameStart = myPostCreateLocatordObjectResults.BaseUri.IndexOf(assetIDSearchString) + assetIDSearchString.Length;
            var          containerName             = myPostCreateLocatordObjectResults.BaseUri.Substring(indexOfContainerNameStart);

            string firstLocator    = myPostCreateLocatordObjectResults.__metadata.uri;
            string preFirstAssetId = myPostCreateLocatordObjectResults.AccessPolicyId;

            var    indexOfLocatorWord = firstLocator.IndexOf("Locator");
            string shortFirstLocator  = firstLocator.Substring(0, indexOfLocatorWord);

            string pattern              = ":";
            string replacement          = "%3A";
            Regex  rgx                  = new Regex(pattern);
            string htmlSafeFirstAssetId = rgx.Replace(preFirstAssetId, replacement);

            var finalAccessPolicyId = String.Format("{0}AccessPolicies('{1}')", shortFirstLocator, htmlSafeFirstAssetId);

            ///////////////////////////////////
            ///// UPLOAD TO BLOB STORAGE
            //////////////////////////////////

            //ALTERNATIVE INSTANTIATION VIA CONFIGURATION FILE
            //CloudStorageAccount storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageConnectionString"));
            //CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();

            CloudStorageAccount storageAccount = CloudStorageAccount.Parse(Constants.BlobURLAndKey);
            CloudBlobClient     blobClient     = storageAccount.CreateCloudBlobClient();

            // RETRIEVE REFERENCE TO CONTAINER
            CloudBlobContainer container = blobClient.GetContainerReference(containerName);

            // CREATE CONTAINER IF IT DOES NOT EXIST
            container.CreateIfNotExists();

            //DEFAULT BEHAVIOR MAKES BLOCKS PRVIATE (YOU MUST USE SPECIFIC STORAGE
            //ACCESS KEYS TO DOWNLOAD BLBOS FROM THE CONTAINER.)
            //MAKE FILES AVAILABLE TO PUBLIC VIA THE FOLLOWING CODE:
            container.SetPermissions(new BlobContainerPermissions {
                PublicAccess = BlobContainerPublicAccessType.Blob
            });

            //RETRIEVE REFERENCE TO BLOB BY FILENAME
            CloudBlockBlob blockBlob = container.GetBlockBlobReference(myUploadedFile.FileName);

            //IN CASE YOU NEED TO SET THE MEDIA TYPE
            //https://stackoverflow.com/questions/24621664/uploading-blockblob-and-setting-contenttype

            //UPLOAD THE BYTE ARRAY
            blockBlob.UploadFromByteArray(myUploadedFile.File, 0, myUploadedFile.File.Length);

            ///////////////////////////////////
            ///// OPTIONAL: UPDATE THE ASSET FILE WITH ANY PROPERTIES
            //////////////////////////////////

            ///////////////////////////////////
            ///// OPTIONAL: ENCODE SOURCE
            //////////////////////////////////

            ///////////////////////////////////
            ///// DELETE THE LOCATOR
            //////////////////////////////////

            if (httpClient.DefaultRequestHeaders != null)
            {
                httpClient.DefaultRequestHeaders.Clear();
            }

            //  Bearer Token
            httpClient.DefaultRequestHeaders.Authorization =
                new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", azureADToken);
            httpClient.DefaultRequestHeaders.Add("DataServiceVersion", "1.0");
            httpClient.DefaultRequestHeaders.Add("MaxDataServiceVersion", "3.0");
            httpClient.DefaultRequestHeaders.Add("Accept", "application/json");
            httpClient.DefaultRequestHeaders.Add("x-ms-version", "2.11");

            //CREATE HTTP REQUEST
            HttpRequestMessage myDeleteLocatorRequest =
                new HttpRequestMessage
                (
                    HttpMethod.Delete,
                    String.Format("{0}", firstLocator)
                );

            //SEND HTTP REQUEST AND RECEIVE HTTP RESPONSE MESSAGE
            HttpResponseMessage myDeleteTheLocatorReponseMessage =
                await httpClient.SendAsync(myDeleteLocatorRequest);

            ///////////////////////////////////
            ///// DELETE THE ASSET FILE
            //////////////////////////////////

            if (httpClient.DefaultRequestHeaders != null)
            {
                httpClient.DefaultRequestHeaders.Clear();
            }

            //  Bearer Token
            httpClient.DefaultRequestHeaders.Authorization =
                new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", azureADToken);
            httpClient.DefaultRequestHeaders.Add("DataServiceVersion", "1.0");
            httpClient.DefaultRequestHeaders.Add("MaxDataServiceVersion", "3.0");
            httpClient.DefaultRequestHeaders.Add("Accept", "application/json");
            httpClient.DefaultRequestHeaders.Add("x-ms-version", "2.11");

            //CREATE HTTP REQUEST
            HttpRequestMessage myDeleteAccessPolicyRequest =
                new HttpRequestMessage
                (
                    HttpMethod.Delete,
                    String.Format("{0}", finalAccessPolicyId)
                );

            //SEND HTTP REQUEST AND RECEIVE HTTP RESPONSE MESSAGE
            HttpResponseMessage myDeleteAccessPolicyResponseMessage =
                await httpClient.SendAsync(myDeleteAccessPolicyRequest);

            ////////////////////////////////////////////////////////////////////////////////
            // PostCreateAccessPolicy
            ////////////////////////////////////////////////////////////////////////////////

            if (httpClient.DefaultRequestHeaders != null)
            {
                httpClient.DefaultRequestHeaders.Clear();
            }

            //  BEARER TOKEN AND HEADERS
            httpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", azureADToken);
            httpClient.DefaultRequestHeaders.Add("x-ms-version", "2.15");
            httpClient.DefaultRequestHeaders.Add("DataServiceVersion", "1.0");
            httpClient.DefaultRequestHeaders.Add("Accept", "application/json;odata=verbose");

            //CREATE HTTP REQUEST
            HttpRequestMessage myPostCreateAccessPolicyRequest2 =
                new HttpRequestMessage
                (
                    HttpMethod.Post,
                    String.Format("https://xamcammediaservice.restv2.westus.media.azure.net/api/AccessPolicies")
                );

            //ASSEMBLE THE CONTENT OF THE REQUEST INCLUDING JSON BODY FOR REQUEST
            XamCamFunctions.DataModels.CreateAccessPolicy.CreateAccessPolicyBody createdAccessPolicyBody2 =
                new XamCamFunctions.DataModels.CreateAccessPolicy.CreateAccessPolicyBody
            {
                Name = "DownloadPolicy",
                DurationInMinutes = "144000",
                Permissions       = "1"
            };
            string myPostCreateAccessPolicyjsonBody2 = JsonConvert.SerializeObject(createdAccessPolicyBody2);

            myPostCreateAccessPolicyRequest2.Content =
                new StringContent(myPostCreateAccessPolicyjsonBody2, Encoding.UTF8, "application/json");

            //SEND HTTP REQUEST AND RECEIVE HTTP RESPONSE MESSAGE
            HttpResponseMessage myPostCreateAccessPolicyResponseMessage2 =

                await httpClient.SendAsync(myPostCreateAccessPolicyRequest2);

            //EXTRACT RESPONSE FROM HTTP RESPONSE MESSAGE
            var myPostCreateAccessPolicystringResult2 =
                myPostCreateAccessPolicyResponseMessage2.Content.ReadAsStringAsync().Result;

            //DESERIALIZE RESPONSE FROM HTTP RESPONSE MESSAGE (JSON->OBJECT)
            var myPostCreateAccessPolicyresultObject2 =
                Newtonsoft.Json.JsonConvert.DeserializeObject <XamCamFunctions.DataModels.CreateAccessPolicy.RootObject>(myPostCreateAccessPolicystringResult2);

            var myPostCreateAccessPolicydObjectResults2        = myPostCreateAccessPolicyresultObject2.d;
            var myPostCreateAccessPolicyaccessPolicyIdResults2 = myPostCreateAccessPolicydObjectResults2.Id;

            ////////////////////////////////////////////////////////////////////////////////
            // PostCreateLocator
            ////////////////////////////////////////////////////////////////////////////////

            if (httpClient.DefaultRequestHeaders != null)
            {
                httpClient.DefaultRequestHeaders.Clear();
            }

            //  BEARER TOKEN AND HEADERS
            httpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", azureADToken);
            httpClient.DefaultRequestHeaders.Add("x-ms-version", "2.15");
            httpClient.DefaultRequestHeaders.Add("DataServiceVersion", "1.0");
            httpClient.DefaultRequestHeaders.Add("Accept", "application/json;odata=verbose");

            //CREATE HTTP REQUEST
            HttpRequestMessage myPostCreateLocatorRequest2 =
                new HttpRequestMessage(HttpMethod.Post, String.Format("https://xamcammediaservice.restv2.westus.media.azure.net/api/Locators"));

            //ASSEMBLE THE CONTENT OF THE REQUEST INCLUDING JSON BODY FOR REQUEST
            XamCamFunctions.DataModels.CreateLocator.CreateLocatorBody createdLocatorBody2 =
                new XamCamFunctions.DataModels.CreateLocator.CreateLocatorBody
            {
                AccessPolicyId = myPostCreateAccessPolicyaccessPolicyIdResults2,
                AssetId        = myPostCreateAssetRequestdObjectResultsResultId,
                StartTime      = DateTime.Now,
                Type           = 1
            };
            string myPostCreateLocatorjsonBody2 = JsonConvert.SerializeObject(createdLocatorBody2);

            myPostCreateLocatorRequest2.Content =
                new StringContent(myPostCreateLocatorjsonBody2, Encoding.UTF8, "application/json");

            //SEND HTTP REQUEST AND RECEIVE HTTP RESPONSE MESSAGE
            HttpResponseMessage myPostCreateLocatorResponseMessage2 =
                await httpClient.SendAsync(myPostCreateLocatorRequest2);

            //EXTRACT RESPONSE FROM HTTP RESPONSE MESSAGE
            var myPostCreateLocatorstringResult2 =
                myPostCreateLocatorResponseMessage2.Content.ReadAsStringAsync().Result;

            //DESERIALIZE RESPONSE FROM HTTP RESPONSE MESSAGE (JSON->OBJECT)
            var myPostCreateLocatorresultObject2 =
                Newtonsoft.Json.JsonConvert.DeserializeObject <XamCamFunctions.DataModels.CreateLocator.RootObject>
                    (myPostCreateLocatorstringResult2);

            var myPostCreateLocatordObjectResults2 = myPostCreateLocatorresultObject2.d;
            var myPostCreateLocatorlocatorResults2 = myPostCreateLocatordObjectResults2.Id;

            var    firstHalfLocatorAMS      = myPostCreateLocatorresultObject2.d.BaseUri;
            var    uploadFileName           = myUploadedFile.FileName;
            var    myContentAccessComponent = myPostCreateLocatorresultObject2.d.ContentAccessComponent;
            string newLocator = String.Format("{0}/{1}{2}", firstHalfLocatorAMS, uploadFileName, myContentAccessComponent);

            ////////////////////////////////////////////////////////////////////////////////
            //  SAVE TO COSMOS DB
            ////////////////////////////////////////////////////////////////////////////////

            MediaAssetsWithMetaData uploadMediaAssetsWithMetaData = new MediaAssetsWithMetaData()
            {
                id            = Guid.NewGuid().ToString(),
                email         = "*****@*****.**",
                mediaAssetUri = newLocator,
                title         = myUploadedFile.Title,
                fileName      = myUploadedFile.FileName,
                uploadedAt    = myUploadedFile.UploadedAt
            };

            await XamCamFunctions.CosmosDB.CosmosDBService.PostMediaAssetAsync(uploadMediaAssetsWithMetaData);

            var httpRM = new HttpResponseMessage(HttpStatusCode.OK);

            return(httpRM);
        }
Example #3
0
 //PUT
 public static async Task PutMediaAssetAsync(MediaAssetsWithMetaData aMediaAssetsWithMetaData)
 {
     await myDocumentClient.ReplaceDocumentAsync(UriFactory.CreateDocumentUri(DatabaseId, CollectionId, aMediaAssetsWithMetaData.id), aMediaAssetsWithMetaData);
 }
Example #4
0
        public static async Task <HttpResponseMessage> MVPRunPostItemToSpecifiedBlobContainer([HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "PostMediaAssetToSpecifiedBlobContainer/{deviceId}/{videoTitle}")] HttpRequestMessage req, string deviceId, string videoTitle, TraceWriter log)
        {
            var fileAsBytes = await req.Content.ReadAsByteArrayAsync();

            var myUploadedFile = new UploadedFile
            {
                Title      = videoTitle,
                FileName   = $"{deviceId}_{DateTime.UtcNow.Ticks}.mp4",
                File       = fileAsBytes,
                UploadedAt = DateTime.UtcNow
            };

            ///////////////////////////////////
            ///// UPLOAD TO BLOB STORAGE
            //////////////////////////////////

            //THIS REQUIRES CONFIGURATION FILE
            //CloudStorageAccount storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageConnectionString"));
            //CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();

            CloudStorageAccount storageAccount = CloudStorageAccount.Parse(Constants.BlobURLAndKey);
            CloudBlobClient     blobClient     = storageAccount.CreateCloudBlobClient();

            string containerName = "mediaassetblobcontainer20170928";

            // Retrieve a reference to a container.
            CloudBlobContainer container = blobClient.GetContainerReference(containerName);

            // Create the container if it doesn't already exist.
            container.CreateIfNotExists();

            //By default, the new container is private,
            //meaning that you must specify your storage access key to download blobs
            //from this container.If you want to make the files within the container available
            //to everyone, you can set the container to be public using the following code:

            var perm = new BlobContainerPermissions();

            perm.PublicAccess = BlobContainerPublicAccessType.Blob;
            container.SetPermissions(perm);

            //container.SetPermissions(new BlobContainerPermissions
            //{
            //    PublicAccess = BlobContainerPublicAccessType.Blob
            //});

            // Retrieve reference to a blob named "myblob".
            CloudBlockBlob blockBlob = container.GetBlockBlobReference(myUploadedFile.FileName);

            //IN CASE YOU NEED TO SET THE MEDIA TYPE
            //https://stackoverflow.com/questions/24621664/uploading-blockblob-and-setting-contenttype

            try
            {
                ////////////////////////////////////////////////////////
                //UPLOAD FILE FROM BYTE ARRAY
                ////////////////////////////////////////////////////////

                blockBlob.UploadFromByteArray(myUploadedFile.File, 0, myUploadedFile.File.Length);

                //////////////////////////////////////////////////////
                /////////  SAVE TO COSMOS DB
                //////////////////////////////////////////////////////

                MediaAssetsWithMetaData uploadMediaAssetsWithMetaData = new MediaAssetsWithMetaData()
                {
                    id    = Guid.NewGuid().ToString(),
                    email = "*****@*****.**",
                    //mediaAssetUri = newLocator,
                    title      = myUploadedFile.Title,
                    fileName   = myUploadedFile.FileName,
                    uploadedAt = myUploadedFile.UploadedAt
                };

                await CosmosDB.CosmosDBService.PostMediaAssetAsync(uploadMediaAssetsWithMetaData);

                ////////////////////////////////////////////////////////
                //SEND HTTP RESPONSE MESSAGE
                ////////////////////////////////////////////////////////

                //HttpResponseMessage postFileInCreatedBlob2 = new HttpResponseMessage(HttpStatusCode.OK, "success");
                //httpRM.Content = new StringContent(jsonObject, System.Text.Encoding.UTF8, "application/json");

                return(req.CreateResponse <string>(HttpStatusCode.OK, "success"));
            }

            catch (Exception ex)
            {
                log.Error($"ERROR copying blobs to target output: {ex.Message}");

                ////////////////////////////////////////////////////////
                //SEND HTTP RESPONSE MESSAGE
                ////////////////////////////////////////////////////////

                HttpResponseMessage errorInCreatingBlob = new HttpResponseMessage(HttpStatusCode.BadRequest);
                var errorMessage = "Function did not upload to blob container.";
                errorInCreatingBlob.Content = new StringContent(errorMessage, System.Text.Encoding.UTF8, "application/json");
                return(errorInCreatingBlob);
            }
        }