Функция Azure не работает должным образом?
У меня есть функция 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": "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, он возвращает с неизвестной ошибкой в качестве ответа.
Я пытаюсь отправить изображение в функцию Azure, с помощью которой я хочу преобразовать его в PDF. Как я могу это сделать?
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 и удалите временный файл (ы), а затем верните преобразованный файл (ы) клиенту.
Тестовое задание:
Кроме того, я бы порекомендовал вам хранить файлы в хранилище BLOB-объектов Azure. И вы можете сослаться на этот официальный сборник для начала работы с ним.