Как загрузить файл в хранилище через URL-адрес с помощью приложения-функции Azure - PullRequest
0 голосов
/ 05 июля 2018

Я хочу выгрузить выгрузить файл в хранилище через URL-адрес с помощью приложения-функции Azure из хранилища BLOB-объектов Azure. Я могу извлечь файл из BLOB-объекта Azure. Но не удалось загрузить файл через URL. Ниже я приложил код, который я написал. Может ли кто-нибудь помочь мне в этом?

#r "Newtonsoft.Json"
#r "Microsoft.WindowsAzure.Storage"
#r "System.IO"


using System;
using System.IO;
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Blob;
using Microsoft.WindowsAzure.Storage.Auth;
using System.Xml;
using System.Collections.Generic;
using Newtonsoft.Json;
using System.Net;

public static void Run(string input, TraceWriter log)
{
        log.Info($"C# manual trigger function processed\n");
        const string StorageAccountName = "";
        const string StorageAccountKey = "";

        var storageAccount = new CloudStorageAccount(new StorageCredentials(StorageAccountName, StorageAccountKey), true);
        var blobClient = storageAccount.CreateCloudBlobClient();
        var container = blobClient.GetContainerReference("hannahtest");
        var Destcontainer = blobClient.GetContainerReference("hannahtestoutput");
        var blobs = container.ListBlobs();
        log.Info($"Creating Client and Connecting");
        foreach (IListBlobItem item in container.ListBlobs(null, false))
        {

               if (item is CloudBlockBlob blockBlob)
               {
                    using (StreamReader reader = new StreamReader(blockBlob.OpenRead())                                     
                    {
                        //old content string will read the blockblob (xml)till end 
                        string oldContent1 = reader.ReadToEnd();    
                        log.Info(oldContent1);

                        var content = new FormUrlEncodedContent(oldContent1);

                        var response = await client.PostAsync("http://www.example.com/recepticle.aspx", content);

                        var responseString = await response.Content.ReadAsStringAsync();
                        log.Info($"Success");
                    }
                }
         }
}

Ответы [ 2 ]

0 голосов
/ 05 марта 2019

Функция Azure для загрузки нескольких файлов изображений в хранилище BLOB-объектов.

  • с использованием Microsoft.WindowsAzure.Storage.Auth;
  • с использованием Microsoft.WindowsAzure.Storage;
  • с использованием Microsoft.WindowsAzure.Storage.Blob;

    public static class ImageUploadFunction
    {
        [FunctionName("ImageUploadFunction")]
        public static async Task<IActionResult> Run([HttpTrigger(AuthorizationLevel.Function, "post")]HttpRequestMessage req, ILogger log)
        {
    
            var provider = new MultipartMemoryStreamProvider();
            await req.Content.ReadAsMultipartAsync(provider);
            var files = provider.Contents;
            List<string> uploadsurls = new List<string>();
            foreach (var file in files) {
                var fileInfo = file.Headers.ContentDisposition;
                Guid guid = Guid.NewGuid();
                string oldFileName = fileInfo.FileName;
                string newFileName = guid.ToString();
                var fileExtension = oldFileName.Split('.').Last().Replace("\"", "").Trim();
                var fileData = await file.ReadAsByteArrayAsync();
                try {
                    //Upload file to azure blob storage method
                    var upload = await UploadFileToStorage(fileData, newFileName + "." + fileExtension);
                    uploadsurls.Add(upload);
                }
                catch (Exception ex) {
                    log.LogError(ex.Message);
                    return new BadRequestObjectResult("Somthing went wrong.");
                }
            }
            return uploadsurls != null
                  ? (ActionResult)new OkObjectResult(uploadsurls)
                   : new BadRequestObjectResult("Somthing went wrong.");                 
        }
        private static async Task<string> UploadFileToStorage(byte[] fileStream, string fileName)
        {
            // Create storagecredentials object by reading the values from the configuration (appsettings.json)
            StorageCredentials storageCredentials = new StorageCredentials("<AccountName>", "<KeyValue>");
    
            // Create cloudstorage account by passing the storagecredentials
            CloudStorageAccount storageAccount = new CloudStorageAccount(storageCredentials, true);
    
            // Create the blob client.
            CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
    
            // Get reference to the blob container by passing the name by reading the value from the configuration (appsettings.json)
            CloudBlobContainer container = blobClient.GetContainerReference("digital-material-library-images");
    
            // Get the reference to the block blob from the container
            CloudBlockBlob blockBlob = container.GetBlockBlobReference(fileName);
    
            // Upload the file
            await blockBlob.UploadFromByteArrayAsync(fileStream,0, fileStream.Length);
    
            blockBlob.Properties.ContentType = "image/jpg";
            await blockBlob.SetPropertiesAsync();
    
            return blockBlob.Uri.ToString();
            //return await Task.FromResult(true);
        }
    
    
    }
    
0 голосов
/ 05 июля 2018

Взгляните на Связывание вывода BLOB-объектов - именно так капли предназначены для загрузки из функций Azure, не мешая с Azure Storage SDK.

...