Функция Azure — C # сохранить декодированный временный файл B64

#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 для непосредственного кодирования своей функции, я обновил свой ответ.