#c# #azure #azure-functions
#c# #azure #azure-функции
Вопрос:
Мне нужно создать функцию Azure на C #, способную собирать строку и сохранять ее как локальный временный файл Base64. Это код функции:
#r "Microsoft.WindowsAzure.Storage"
using Microsoft.WindowsAzure.Storage.Blob;
using System.Diagnostics;
using System.IO;
using System.Net;
using System.Net.Http.Headers;
public static HttpResponseMessage Run(Stream req, TraceWriter log)
{
var temp = @"C:homesitewwwrootCallFFMpegtest.webm";
var tempOut = @"C:homesitewwwrootCallFFMpegtest.wav";
using (var ms = new MemoryStream())
{
req.CopyTo(ms);
//File.WriteAllBytes(@"C:homesitewwwrootCallFFMpegtest.webm", ms.ToArray());
byte[] textToByte = Convert.FromBase64String(ms);
File.WriteAllBytes(@"C:homesitewwwrootCallFFMpegtest.webm", textToByte);
}
}
В основном запросе я просто отправляю файл base64 has (это аудио Webm).
У меня такая ошибка:
2021-01-20T15:41:00.283 [Error] run.csx(11,20): error CS1061: 'Stream' does not contain a definition for 'FromBase64String' and no accessible extension method 'FromBase64String' accepting a first argument of type 'Stream' could be found (are you missing a using directive or an assembly reference?)
2021-01-20T15:41:00.403 [Error] run.csx(18,50): error CS1503: Argument 1: cannot convert from 'System.IO.MemoryStream' to 'string'
2021-01-20T15:41:00.458 [Information] Compilation failed.
Я действительно пытаюсь понять, как обрабатывать потоковый запрос и преобразовывать его в Base64.
Заранее большое спасибо за любые комментарии.
Комментарии:
1. Ошибка довольно специфична. Какую часть этого вы не понимаете?
2.
byte[] textToByte = ms.ToArray()
?3. @IanKemp Я не понимаю, как создать файл base64 из потока HTTP-запросов
Ответ №1:
Насколько я понимаю, вы хотите загрузить двоичный файл, такой как .wav или .подключитесь к вашей функции Azure с помощью HTTP-запроса и сохраните его на стороне функции Azure.
Если вы программируете непосредственно на портале, просто попробуйте следующий код:
#r "Newtonsoft.Json"
using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;
using Microsoft.AspNetCore.Http;
public static async Task<IActionResult> Run(HttpRequest req, ILogger log)
{
var tempFilePath = "d:/home/" req.Query["filename"]; ;
using (FileStream outputFileStream = new FileStream(tempFilePath, FileMode.Create))
{
new StreamReader(req.Body).BaseStream.CopyTo(outputFileStream);
}
return new OkObjectResult("file has been sent");
}
Вы можете проверить, был ли файл загружен в /home
папку с помощью Console
портала on:
Комментарии:
1. Вот ошибка после попытки: ошибка CS7021: не удается объявить пространство имен в коде скрипта ошибка CS0234: тип или имя пространства имен «Http» не существует в пространстве имен «Microsoft». Azure. Веб-задания. Расширения ‘ [Ошибка] run.csx(15,14): ошибка CS0246: не удалось найти тип или имя пространства имен ‘HttpTriggerAttribute’ Не удалось найти тип или имя пространства имен ‘httptriggerattribute’ run.csx(15,34): ошибка CS0246: не удалось найти тип или имя пространства имен ‘Route’найдено
2. @user3925023 Кажется, вы используете Azure portal для непосредственного кодирования своей функции, я обновил свой ответ.