代码之家  ›  专栏  ›  技术社区  ›  santosh kumar patro

如果functionapp托管在Azure环境中,则从字典读取值时出现问题

  •  0
  • santosh kumar patro  · 技术社区  · 6 年前

    https://mitra.computa.asia/articles/msdn-smart-image-re-sizing-azure-functions-and-cognitive-services

    在这里,我试图生成两个不同大小的缩略图图像时,任何图像上传到容器。

    功能应用程序代码:

    using System;
    using System.Text;
    using System.Net.Http;
    using System.Net.Http.Headers;
    using System.Collections.Generic;
    
    
    public static void Run(Stream myBlob,string blobname, string blobextension, Stream outputBlobsm,Stream outputBlobmd, TraceWriter log)
    {
        bool smartCropping = true;
    
        log.Info($"C# Blob trigger function Processed blob\n Name:{blobname} \n Extension: {blobextension} extension");
    
        var sizesm = imageDimensionsTable[ImageSize.Small];
        log.Info($"C# Blob \n Sizesm:{sizesm}");
        log.Info($"C# Blob \n width:{sizesm.item1} \n height: {sizesm.item2}");
        ResizeImage(sizesm.item1, sizesm.item2,smartCropping,myBlob, outputBlobsm);
    
        var sizemd = imageDimensionsTable[ImageSize.Medium];
        log.Info($"C# Blob \n width:{sizemd.item1} \n height: {sizemd.item2}");
        ResizeImage(sizemd.item1, sizemd.item2,smartCropping,myBlob, outputBlobmd);
    }
    
    public void ResizeImage(int width, int height, bool smartCropping,Stream myBlob, Stream outputBlob)
    {    
        string _apiKey = "xxxxxxxxxxxxxxxxxxxxxxxxx";
        string _apiUrlBase = "xxxxxxxxxxxxxxxxxxx/generateThumbnail";
      using (var httpClient = new HttpClient())
        {
            httpClient.BaseAddress = new Uri(_apiUrlBase);
            httpClient.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", _apiKey);
            using (HttpContent content = new StreamContent(myBlob))
            {
                //get response
                content.Headers.ContentType = new MediaTypeWithQualityHeaderValue("application/octet-stream");
                var uri = $"{_apiUrlBase}?width={width}&height={height}&smartCropping={smartCropping.ToString()}";
                var response = httpClient.PostAsync(uri, content).Result;
                var responseBytes = response.Content.ReadAsByteArrayAsync().Result;
    
                //write to output thumb
                outputBlob.Write(responseBytes, 0, responseBytes.Length);
            }
        }
    }
    
    public enum ImageSize { ExtraSmall, Small, Medium }
    
    private static Dictionary<ImageSize, (int, int)> imageDimensionsTable = new Dictionary<ImageSize, (int, int)>() {
        { ImageSize.ExtraSmall, (320, 200) },
        { ImageSize.Small,      (640, 400) },
        { ImageSize.Medium,     (800, 600) }
    };
    

    编译代码时出现以下错误:

    [Error] run.csx(16,41): error CS1061: '(int, int)' does not contain a definition for 'item1' and no extension method 'item1' accepting a first argument of type '(int, int)' could be found (are you missing a using directive or an assembly reference?)
    

    1 回复  |  直到 6 年前
        1
  •  1
  •   James    6 年前

    C#区分大小写。如果没有指定名称,那么新元组应该是Item1、Item2。。。。

    See examples here under "Tuples"

    请注意,您还可以在声明中指定这些int的名称:

     private static Dictionary<ImageSize, (int Width, int Height)> imageDimensionsTable
    

    这使得

    ResizeImage(sizesm.Width, sizesm.Height,smartCropping,myBlob, outputBlobsm);
    

    哦。。。你可能需要 ResizeImage 静止的