У меня есть источник FTP, который добавляет ежедневный файл, и мне нужно ежедневно копировать файлы с FTP в хранилище больших двоичных объектов с использованием библиотеки FluentFTP в функции Azure
Я использую C # в функции Azure, и я сделалвся часть кода, но не хватает для загрузки файла с FTP, чтобы скопировать его непосредственно в место назначения BLOB-объекта.
//#r "FluentFTP"
#r "Newtonsoft.Json"
#r "System.Data"
#r "Microsoft.WindowsAzure.Storage"
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.Collections.Generic;
using System.Globalization;
using System;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Auth;
using Microsoft.WindowsAzure.Storage.Blob;
using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;
using FluentFTP;
public static async Task<IActionResult> Run(HttpRequest req, ILogger log)
{
string blobConnectionString = "ConnectionString";
// Gestione BLOB Storage
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(blobConnectionString);
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = blobClient.GetContainerReference("out");
using (FtpClient conn = new FtpClient())
{
conn.Host = "ftp server";
conn.Credentials = new NetworkCredential("username", "pass");
// get a list of files and directories in the "/OUT" folder
foreach (FtpListItem item in conn.GetListing("/OUT"))
{
// if this is a file and ends with CSV
if (
item.Type == FtpFileSystemObjectType.File
&&
item.FullName.ToLower().EndsWith(".csv")
)
{
string yyyy = item.FullName.Substring(10,4);
string mm = item.FullName.Substring(14,2);
string dd = item.FullName.Substring(16,2);
var fileName = "out/brt/" + yyyy + "/"+ mm + "/"+ dd + "/" + item.Name;
CloudBlockBlob blockBlob = container.GetBlockBlobReference(fileName);
// download the file
conn.DownloadFile( blockBlob , item.FullName);
}
}
return new OkObjectResult($"Hello");
}
}
Если я могу использовать контейнер BLOB-объектов в качестве места назначения для функции FluentFTP, тогда это будет лучшим, но таким образом я получаю сообщение об ошибке, что этот блок блоба, который я использую, не является местом назначения
Это ошибка, которую я получаю
не может преобразовать из 'Microsoft.WindowsAzure.Storage.Blob.CloudBlockBlob 'to' string '
Я не знаю, есть ли другой способ загрузить файл локально, чтобы я мог загрузить его в BLOB-объект вместо использования этого client.DownloadFile
функция.