如何将文件上传到 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? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
使用NodeJS,如何将文件上传到azure容器/目录(如:test-container/folder-test)
C# Azure 上传文件错误 指定的 blob 或块内容无效
使用 C#(无 JavaScript)直接将 Blazor WebAssembly 文件分块到 Azure Blob 存储