Azure function not working properly ?

半世苍凉 提交于 2019-12-12 04:43:03

问题


I have an azure function which takes an input file using multi form like this -

    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);
    }

As you can see at the moment I am not doing anything with the file. I am trying to get it run first.

My swagger file looks like this :

        {
 "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": []

}

I have configured the Auth0 properly but when I try to run this in Powerapps, it returns with unknown error as the response.

I am trying to send an image to the azure function with which I want to convert it to PDF. How can I do this?


回答1:


According to your code, it seems that you are using the precompiled functions. I found your HttpTrigger function code does not match the swagger file you provided. For a simple way, I just use the Azure Portal and created my HttpTrigger function as follow:

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; }
}

Note: The MIME multipart body parts are stored under your temp folder. You could retrieve the temp file full path via file.LocalFileName, then use the related library to process the conversion, then save the PDF file(s) and remove the temp file(s), then return the converted file(s) to the client.

Test:

Additionally, I would recommend you store your files under Azure Blob Storage. And you could refer to this official toturial for getting started with it.



来源:https://stackoverflow.com/questions/47194805/azure-function-not-working-properly

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!