c# - C# FTP 上传卡在特定文件上
问题描述
我的 C# 程序有问题。我有一个很大的 zip 存档(大约 4Gb),它被分成小块,实际上每块都是 100 Mb。所以,当我的程序开始上传文件时,它工作得很好,直到第 14 件开始上传。我的程序仅上传了该片段的约 90 Mb,然后我收到错误“远程服务器返回错误:(451) 处理中的本地错误”。我的 C# 程序检测文件是否未成功上传并尝试上传它,所以我得到了一个永无止境的循环。
private static void SendToFtp(AppConfig cfg, string zipName)
{
Console.WriteLine("Starting FTP upload");
NetworkCredential creds = new NetworkCredential(cfg.FtpUserName, cfg.FtpPassword);
try
{
StringBuilder sb = new StringBuilder();
DirectoryInfo di = new DirectoryInfo(cfg.ZipFolder);
byte[] buffer = null;
foreach (var file in di.EnumerateFiles())
{
using (Stream st = File.OpenRead(file.FullName))
using (BinaryReader br = new BinaryReader(st))
{
bool success = false;
while (!success)
{
br.BaseStream.Seek(0, SeekOrigin.Begin);
buffer = br.ReadBytes((int)file.Length);
sb.Append($"ftp://{cfg.FtpHost}/{file.Name}");
request = (FtpWebRequest)WebRequest.Create(sb.ToString());
request.Method = WebRequestMethods.Ftp.UploadFile;
request.UseBinary = false;
request.UsePassive = false;
request.KeepAlive = false;
request.ServicePoint.ConnectionLimit = 1000;
request.Credentials = new NetworkCredential(cfg.FtpUserName, cfg.FtpPassword);
using (Stream requestStream = request.GetRequestStream())
{
try
{
requestStream.Write(buffer, 0, buffer.Length);
requestStream.Flush();
requestStream.Close();
var resp = (FtpWebResponse)request.GetResponse();
success = !success;
Console.WriteLine($"======================{file.Name}=======================");
Console.WriteLine($"Message:{resp.StatusDescription}");
Console.WriteLine($" Status code: {resp.StatusCode}");
Console.WriteLine($"========================================================");
}
catch (Exception ex)
{
request.Abort();
Console.WriteLine($"MSG: {ex.Message}");
}
}
sb.Clear();
}
}
}
Console.WriteLine("FTP upload finished");
}
catch (Exception ex)
{
Console.WriteLine($"{ex.Message}; {ex.Source}");
}
}
所以,有人可以帮助我或指出我错在哪里。谢谢!
解决方案
推荐阅读
- jquery - Internet Explorer 不通过 Jquery FileDownload 下载具有 Unicode 名称的文件
- c# - C# Web API - 如何在持续流刷新期间处理连接
- python - 为什么使用python matplotlib绘制图形时Y轴刻度不可见且与实际值不匹配?
- javascript - Angular 中的导航测试
- google-apps-script - Google 日历访问权限
- php - 使用ajax删除数据库条目不起作用
- sql - SQL Server 使列数据不可删除
- xslt - XSL - 相交两个集合并返回找到的公共值
- c++ - 使用 CGAL 将多面体投影到 xy 平面
- java - 在 Eclipse(Indigo)中构建声纳时出错 无法执行目标 org.sonarsource.scanner.maven:sonar-maven-plugin:3.4.0.905:sonar