1 回答

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超5個(gè)贊
您實(shí)際上并沒(méi)有告訴 FtpWebRequest 要下載哪個(gè)文件,ftpfilename 僅包含 FTP 服務(wù)器 URL。嘗試修改這一行:
FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpfilename));
到:
var requestUri = new Uri(ftpfilename + filename);
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(requestUri);
我建議將您的 FtpWebRequest 代碼提取到一個(gè)帶有簽名的單獨(dú)方法中,public byte[] FtpDownloadBinary(Uri fromUri)您可以單獨(dú)實(shí)現(xiàn)和測(cè)試該簽名,然后您可以將該方法的結(jié)果傳遞到context.Response.BinaryWrite(fileBytes);
==編輯==
以下是 FTP 下載給定二進(jìn)制 URL 的示例方法:
string username = "anonymous";
string password = "anonymous@example.org";
public byte[] FtpDownloadBinary(Uri fromUri)
{
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(fromUri);
request.Method = WebRequestMethods.Ftp.DownloadFile;
request.Credentials = new NetworkCredential(username, password);
request.UseBinary = true;
request.KeepAlive = true;
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
using (var responseStream = response.GetResponseStream())
using (var memoryStream = new MemoryStream())
{
responseStream.CopyTo(memoryStream);
return memoryStream.ToArray();
}
}
您可以通過(guò)使用如下代碼將結(jié)果保存到系統(tǒng)上的本地文件來(lái)測(cè)試其是否有效,生成的文件可以使用 7-Zip、WinRAR、WinZip 等打開(kāi):
string ftpfilename = "ftp://ftp.ubuntu.com/ubuntu/ls-lR.gz"; //1.7MB example
var requestUri = new Uri(ftpfilename);
var fileBytes = FtpDownloadBinary(requestUri);
using (var fileStream = new FileStream("ls-lR.gz", FileMode.OpenOrCreate, FileAccess.Write, FileShare.None))
{
fileStream.Write(fileBytes, 0, fileBytes.Length);
}
- 1 回答
- 0 關(guān)注
- 211 瀏覽
添加回答
舉報(bào)