【发布时间】:2015-10-03 15:48:59
【问题描述】:
我正在尝试从一个 FTP 服务器下载文件,然后将其上传到另一个 FTP。到目前为止,我只知道如何通过 FTP 上传本地文件和下载 XML。
这是我将本地文件上传到 FTP 的方法:
private void UploadLocalFile(string sourceFileLocation, string targetFileName)
{
try
{
string ftpServerIP = "ftp://testing.com/ContentManagementSystem/"+ Company +"/Prod";
string ftpUserID = Username;
string ftpPassword = Password;
string filename = "ftp://" + ftpServerIP + "/" + targetFileName;
FtpWebRequest ftpReq = (FtpWebRequest)WebRequest.Create(filename);
ftpReq.UseBinary = true;
ftpReq.Method = WebRequestMethods.Ftp.UploadFile;
ftpReq.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
ftpReq.Proxy = null;
byte[] b = File.ReadAllBytes(sourceFileLocation);
ftpReq.ContentLength = b.Length;
using (Stream s = ftpReq.GetRequestStream())
{
s.Write(b, 0, b.Length);
}
}
catch (WebException ex)
{
String status = ((FtpWebResponse)ex.Response).StatusDescription;
Console.WriteLine(status);
}
}
这是我从 FTP 下载 XML 的方法:
private static XmlDocument DownloadFtpXml(string uri, int retryLimit)
{
var returnDocument = new XmlDocument();
try
{
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(uri);
request.Method = WebRequestMethods.Ftp.DownloadFile;
request.Credentials = new NetworkCredential(Username, Password);
request.UsePassive = true;
request.Proxy = new WebProxy();
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
using (Stream responseStream = response.GetResponseStream())
{
returnDocument.Load(responseStream);
}
}
catch (WebException ex)
{
if (ex.Response != null)
{
FtpWebResponse response = (FtpWebResponse)ex.Response;
if (response.StatusCode == FtpStatusCode.ActionNotTakenFileUnavailable)
{
}
}
}
return returnDocument;
}
我不确定该怎么做,但我正在尝试创建一种方法,可以从一个 FTP 下载某些内容(内容是视频或图像),然后转身上传我刚刚下载的内容(我会记住的)到另一个 FTP。
请帮忙!
【问题讨论】:
-
您可以改用 SFTP 吗?是否允许使用第三方工具? stackoverflow.com/questions/6415562/…
-
将 Xml 文档保存在临时本地文件中,然后上传。看起来你有所有的代码,只需要添加一个额外的步骤。虽然您说内容将是视频或图像,但为什么要将其保存在 Xml 文档中(如果您尝试
.Load不是 Xml 的内容会引发异常)? -
您可以直接从输入流(从下载获得)复制到输出流(用于在上传过程中写入),而不是临时文件。
-
好极了。我会尝试以上这些选项的一些组合并报告回来。我们还没有设置使用 SFTP,否则我会走那条路。第三方工具是可以接受的,但我会尝试临时本地路线,看看会带我去哪里!
标签: c# download upload ftp ftpwebrequest