如何将文件上传到 c# Azure Function 生成的 FTP/webdav? [复制]

Posted

技术标签:

【中文标题】如何将文件上传到 c# Azure Function 生成的 FTP/webdav? [复制]【英文标题】:How to upload file to FTP/webdav generated by c# Azure Function? [duplicate] 【发布时间】:2021-12-13 15:14:06 【问题描述】:

我想要做的是创建一个 Azure 函数来生成某些文件。 然后我必须:

    将这些文件上传到 FTP 服务器或 Webdav 服务器 将它们归档到存储帐户。

您推荐什么解决方案?在执行上述操作时如何存储这些临时文件? (对不起这个问题,这是我正在处理的第一个 Azure 函数。)

【问题讨论】:

将它们作为 blob 存储在存储容器中? docs.microsoft.com/en-us/azure/storage/blobs/… 【参考方案1】:

谢谢Martin-Prikryl。发布您的建议作为帮助其他社区成员的答案。

将这些文件上传到 FTP 服务器或 Webdav 服务器

下面是如何使用memorystream.docx 上传到FTP 服务器的示例代码。 只需将您的流复制到 FTP 请求流:

Stream requestStream = ftpRequest.GetRequestStream();
stream.CopyTo(requestStream);
requestStream.Close();

对于一个字符串(假设内容是一个文本):

byte[] bytes = Encoding.UTF8.GetBytes(data);

using (Stream requestStream = request.GetRequestStream())

    requestStream.Write(bytes, 0, bytes.Length);


或者更好地使用StreamWriter

using (Stream requestStream = request.GetRequestStream())
using (StreamWriter writer = new StreamWriter(requestStream, Encoding.UTF8))

    writer.Write(data);


如果内容是文本,则应使用文本模式:

request.UseBinary = false;

查看SO 了解更多信息。

将它们归档到存储帐户。

以下是如何归档文件的示例

using (Stream memoryStream = new MemoryStream())

    using (var archive = new ZipArchive(memoryStream, ZipArchiveMode.Create, true))
    
        foreach (string path in Directory.EnumerateFiles(@"C:\source\directory"))
        
            ZipArchiveEntry entry = archive.CreateEntry(Path.GetFileName(path));

            using (Stream entryStream = entry.Open())
            using (Stream fileStream = File.OpenRead(path))
            
                fileStream.CopyTo(entryStream);
            
        
    

    memoryStream.Seek(0, SeekOrigin.Begin);

    var request =
        WebRequest.Create("ftp://ftp.example.com/remote/path/archive.zip");
    request.Credentials = new NetworkCredential("username", "password");
    request.Method = WebRequestMethods.Ftp.UploadFile;
    using (Stream ftpStream = request.GetRequestStream())
    
        memoryStream.CopyTo(ftpStream);
    

查看SO 了解完整信息。

【讨论】:

不要从其他答案中复制代码,请考虑对其进行投票。

以上是关于如何将文件上传到 c# Azure Function 生成的 FTP/webdav? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何跟踪异步文件上传到 Azure 存储的进度

使用NodeJS,如何将文件上传到azure容器/目录(如:test-container/folder-test)

C# Azure 上传文件错误 指定的 blob 或块内容无效

使用 C#(无 JavaScript)直接将 Blazor WebAssembly 文件分块到 Azure Blob 存储

无法使用 Azure.Storage.Blobs NuGet 包将文件上传到 Azure Blob 存储

如何获取 Azure 存储帐户密钥