Ich versuche eine einfache Azure-Funktion zu erstellen, die auf der ImageResizer example basiert, verwendet aber die Microsoft Cognitive Server Computer Vision API, um die Größenänderung vorzunehmen.Mein Azure Storage-Ausgabeblob wird nie angezeigt.
Ich habe working code for the Computer Vision API, die ich in die Azure-Funktion portiert habe.
Es scheint alles ok zu funktionieren (keine Fehler), aber mein Ausgabeblob wird nie gespeichert oder erscheint im Speichercontainer. Ich bin mir nicht sicher, was ich falsch mache, da es keine Fehler gibt, mit denen ich arbeiten kann.
Mein CSX (C# Funktionscode) ist als
using System;
using System.Text;
using System.Net.Http;
using System.Net.Http.Headers;
public static void Run(Stream original, Stream thumb, TraceWriter log)
{
//log.Verbose($"C# Blob trigger function processed: {myBlob}. Dimensions");
string _apiKey = "PutYourComputerVisionApiKeyHere";
string _apiUrlBase = "https://api.projectoxford.ai/vision/v1.0/generateThumbnail";
string width = "100";
string height = "100";
bool smartcropping = true;
using (var httpClient = new HttpClient())
{
//setup HttpClient
httpClient.BaseAddress = new Uri(_apiUrlBase);
httpClient.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", _apiKey);
//setup data object
HttpContent content = new StreamContent(original);
content.Headers.ContentType = new MediaTypeWithQualityHeaderValue("application/octet-stream");
// Request parameters
var uri = $"{_apiUrlBase}?width={width}&height={height}&smartCropping={smartcropping}";
//make request
var response = httpClient.PostAsync(uri, content).Result;
//log result
log.Verbose($"Response: IsSucess={response.IsSuccessStatusCode}, Status={response.ReasonPhrase}");
//read response and write to output stream
thumb = new MemoryStream(response.Content.ReadAsByteArrayAsync().Result);
}
}
Meine Funktion json folgt als
{
"bindings": [
{
"path": "originals/{name}",
"connection": "thumbnailgenstorage_STORAGE",
"name": "original",
"type": "blobTrigger",
"direction": "in"
},
{
"path": "thumbs/%rand-guid%",
"connection": "thumbnailgenstorage_STORAGE",
"type": "blob",
"name": "thumb",
"direction": "out"
}
],
"disabled": false
}
Mein Azure-Speicher-Konto genannt wird 'thumbnailgenstorage' folgt und es hat zwei Container genannt 'originals' und 'thumbs'. Der Speicherkontoschlüssel lautet KGdcO+hjvARQvSwd2rfmdc+rrAsK0tA5xpE4RVNmXZgExCE+Cyk4q0nSiulDwvRHrSAkYjyjVezwdaeLCIb53g==
.
Ich bin vollkommen glücklich, dass Leute meine Schlüssel benutzen, um mir zu helfen, das herauszufinden! :)
Ich glaube, ich habe dieses Problem behoben. Ich bin mir nicht sicher, ob ich richtig in den Ausgabe-Blob geschrieben habe. Dies scheint zu funktionieren: '// Antwort lesen und in Ausgabestrom schreiben var responseBytes = response.Content.ReadAsByteArrayAsync(). Result; thumb.Write (responseBytes, 0, responseBytes.Length); '. Außerdem ist mein Ausgabepfad in meinem JSON jetzt "thumbs /% rand-guid% .jpg", ". Ich werde ein bisschen mehr recherchieren und eine vollständige Antwort posten, wenn ich sicher bin, dass es funktioniert. –
Ja, das ist richtig - eine einfache Zuordnung zum Stream ist nicht das Modell, da es kein 'out'-Parameter im Sprachsinn ist. Sie müssen in den bereitgestellten Stream schreiben. Sie werden feststellen, dass dies bei allen anderen Bindungen der Fall ist. – mathewc