2014-09-30 3 views

답변

1

원래 대답을 들었을 때 정말 가치가 없었습니다. 그래서 나는 확장하려고합니다.

비동기가 아닙니다.

처음에는 컨트롤러와 똑같은 컨트롤러가 있습니다. 그런 다음 그 URL 이제

: 푸른에 직접 바이트 배열을 업로드 아래의 방법에 그것을 사용할 수 있습니다 당신이 response.RawBytes를 보면

 var client = new RestClient("http://some.url.com"); 

     var request = new RestRequest("mvc/GeneratePDF", Method.GET); 
     // execute the request 
     RestResponse response = (RestResponse)client.Execute(request); 

     // Zwracamy byte[] ktory jest naszym plikiem PDF 
     return response; 

에 전화를 걸 restsharp를 사용 바이트 또는 스트림을 업로드하는 두 가지 방법 중 하나를 호출합니다.

public static class AzureStorage 
{ 
    /// <summary> 
    /// Metoda zajmujaca sie uploadem do Azure 
    /// </summary> 
    public static string _uploadToAzureBlob(byte[] arrPDF, string azureContainer, string filename) 
    { 
     // Retrieve connection string 
     CloudStorageAccount storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageConn")); 
     // Create blob client 
     CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient(); 
     // Retrieve reference to a previously created container. 
     CloudBlobContainer container = blobClient.GetContainerReference(azureContainer); 
     // Create object blob 
     CloudBlockBlob blob = container.GetBlockBlobReference(filename); 
     // Upload 
     blob.UploadFromByteArray(arrPDF, 0, arrPDF.Length); 

     return blob.Uri.ToString(); 
    } 

    /// <summary> 
    /// Metoda zajmujaca sie uploadem do Azure 
    /// </summary> 
    public static string _uploadToAzureBlob(Stream iostream, string azureContainer, string filename, bool ApplyReadPermissions = true) 
    { 
     // Retrieve connection string 
     CloudStorageAccount storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageConn")); 
     // Create blob client 
     CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient(); 
     // Retrieve reference to a previously created container. 
     CloudBlobContainer container = blobClient.GetContainerReference(azureContainer); 

     // Create container if it does not exist 
     container.CreateIfNotExists(); 

     // Create object blob 
     CloudBlockBlob blob = container.GetBlockBlobReference(filename); 

     iostream.Position = 0;//Move the pointer to the start of stream.. 

     using (var fileStream = iostream) 
     { 
      blob.UploadFromStream(fileStream); 
     } 

     // Here we need to share the URL for reading the barcode! Otherwise we dont have access to it 
     if (ApplyReadPermissions) 
     { 
      var builder = new UriBuilder(blob.Uri); 
      builder.Query = blob.GetSharedAccessSignature(
       new SharedAccessBlobPolicy 
       { 
        Permissions = SharedAccessBlobPermissions.Read, 
        SharedAccessStartTime = new DateTimeOffset(DateTime.UtcNow.AddMinutes(-5)), 
        SharedAccessExpiryTime = new DateTimeOffset(DateTime.UtcNow.AddMinutes(5)) 
       }).TrimStart('?'); 

      var x = builder.Uri.ToString(); 

      return x; 
     } 

     return null; 
    } 
} 

이 정보가 도움이되는지 알려주세요. 그것은 내 푸른 환경에서 나를 위해 작동합니다. 나는 그 파일을 생성하고 blob에 자동 저장하는 webjob을 가지고 있습니다.

업데이트 :

public async Task<ActionResult> asyncPDF() 
    { 
     return await AzureStorage._uploadToAzureBlob(ControllerContext.GeneratePdf(objModel, "VIEW_NAME")) ; 
    } 

내가 그 방법을 테스트한다 : 비동기

당신은 다음 호출을 수행 할 수 있도록 할 비동기 다음 아래와 같은 무언가를 가진 것으로 하늘빛에 업로드하는 방법을 다시 할 경우 그것의 행동을 확인하기 위해 더 자세히.

의견 환영 : D