我有一个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中运行它时,它会返回未知错误作为响应。
我正在尝试将图像发送到我要将其转换为PDF的azure函数。我怎样才能做到这一点?
答案 0 :(得分:1)
根据您的代码,您似乎正在使用precompiled functions。我发现你的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开始使用它。