Функция Azure не работает должным образом?

У меня есть лазурная функция, которая принимает входной файл, используя мультиформу, подобную этой:

    public static class function
{
    [FunctionName("Function1")]
    public static async Task<HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)]HttpRequestMessage req, TraceWriter log,string imagename)
    {


        // parse query parameter
        string name = req.GetQueryNameValuePairs()
            .FirstOrDefault(q => string.Compare(q.Key, "name", true) == 0)
            .Value;

        // Get request body
        dynamic data = await req.Content.ReadAsAsync<object>();

        // Set name to query string or body data
        name = name ?? data?.name;


       log.Info("C# HTTP trigger function processed a request.");


        return name == null
            ? req.CreateResponse(HttpStatusCode.BadRequest, "Please pass a name on the query string or in the request body")
            : req.CreateResponse(HttpStatusCode.OK, "Hello " + name);
    }

Как видите, в данный момент я ничего не делаю с файлом. Я пытаюсь запустить его в первую очередь.

Мой файл swagger выглядит так:

        {
 "swagger": "2.0",
  "info": {
  "version": "1.0.0",
  "title": "Testfunction"
  },
  "host": "Testfunction.azurewebsites.net",
 "paths": {
   "/api/Function1": {
  "post": {
    "tags": [
      "Function1"
    ],
    "operationId": "UploadImage",
    "consumes": [
      "multipart/form-data"
    ],
    "produces": [
      "application/json",
      "text/json",
      "application/xml",
      "text/xml"
    ],
    "parameters": [
      {
        "name": "file",
        "in": "formData",
        "required": true,
        "type": "file",
        "x-ms-media-kind": "image"
      },
      {
        "name": "fileName",
        "in": "query",
        "required": false,
        "type": "string"
      }
    ],
    "responses": {
      "200": {
        "description": "Saved successfully",
        "schema": {
          "$ref": "#/definitions/UploadedFileInfo"
        }
      },
      "400": {
        "description": "Could not find file to upload"
      }
    },
    "summary": "Image Upload",
    "description": "Image Upload"
  }
}},
"definitions": {
"UploadedFileInfo": {
  "type": "object",
  "properties": {
    "FileName": {
      "type": "string"
    },
    "FileExtension": {
      "type": "string"
    },
    "FileURL": {
      "type": "string"
    },
    "ContentType": {
      "type": "string"
    }
  }
}

},
  "securityDefinitions": {
"AAD": {
  "type": "oauth2",
  "flow": "accessCode",
  "authorizationUrl": "https://login.windows.net/common/oauth2/authorize",
  "tokenUrl": "https://login.windows.net/common/oauth2/token",
  "scopes": {}
   }
 },
 "security": [
  {
   "AAD": []
  }
],
"tags": []

}

Я правильно настроил Auth0, но когда я пытаюсь запустить это в Powerapps, он возвращает неизвестную ошибку в качестве ответа.

Я пытаюсь отправить изображение в лазурную функцию, с помощью которой я хочу преобразовать его в PDF. Как я могу это сделать?


person alan samuel    schedule 09.11.2017    source источник
comment
Не зная никаких подробностей о сообщении об ошибке, которое вы получаете, я бы предложил прочитать этот вопрос: stackoverflow.com/a/8240132/ 7982031 Это может быть связано с тем, как вы пытаетесь получить файл из тела запроса.   -  person Aaron Krone    schedule 10.11.2017


Ответы (1)


Судя по вашему коду, вы используете предварительно скомпилированные функции . Я обнаружил, что ваш код функции HttpTrigger не соответствует предоставленному вами файлу swagger. Для простого способа я просто использую портал Azure и создал свою функцию HttpTrigger следующим образом:

run.csx:

using System.Net;

public static async Task<HttpResponseMessage> Run(HttpRequestMessage request, TraceWriter log)
{
    //Check if the request contains multipart/form-data.
    if (!request.Content.IsMimeMultipartContent())
    {
        return request.CreateResponse(HttpStatusCode.UnsupportedMediaType);
    }
    
    //The root path where the content of MIME multipart body parts are written to
    string root = Path.Combine(System.Environment.GetEnvironmentVariable("HOME"), @"site\wwwroot\HttpTriggerCSharp1\");
    var provider = new MultipartFormDataStreamProvider(root);

    // Read the form data
    await request.Content.ReadAsMultipartAsync(provider);

    List<UploadedFileInfo> files = new List<UploadedFileInfo>();
    // This illustrates how to get the file names.
    foreach (MultipartFileData file in provider.FileData)
    {   
        var fileInfo = new FileInfo(file.Headers.ContentDisposition.FileName.Trim('"'));
        files.Add(new UploadedFileInfo()
        {
            FileName = fileInfo.Name,
            ContentType = file.Headers.ContentType.MediaType,
            FileExtension = fileInfo.Extension,
            FileURL = file.LocalFileName
        });
    }
    return request.CreateResponse(HttpStatusCode.OK, files, "application/json");
}

public class UploadedFileInfo
{
    public string FileName { get; set; }
    public string FileExtension { get; set; }
    public string FileURL { get; set; }
    public string ContentType { get; set; }
}

Примечание. Составные части тела MIME хранятся во временной папке. Вы можете получить полный путь к временному файлу через file.LocalFileName, затем использовать соответствующую библиотеку для обработки преобразования, затем сохранить файл(ы) PDF и удалить временный файл(ы), а затем вернуть преобразованный файл(ы) клиенту.

Тест:

введите здесь описание изображения

Кроме того, я бы рекомендовал хранить файлы в Azure Blob Storage. . И вы можете обратиться к этому официальному toturial для начала работы с ним.

person Bruce Chen    schedule 10.11.2017