我看到一些类似于我的问题的答案,但仍然无法弄清楚。
我正在使用下面的代码供用户上传MP3文件(我正在使用FTP),并且它可以正常使用本地主机(简单的WinForm应用程序),但它在使用远程服务器(远程DNN站点)时抛出了错误:
System.IO.FileNotFoundException:找不到文件'C:\ Windows \ SysWOW64 \ inetsrv \ Test.mp3'。
我知道如果test.mp3
文件位于此服务器位置,那么它应该可以正常工作,但它实际上位于我的C:\Temp\Test.mp3
路径中。我认为FileUpload1
没有给出正确的文件路径。我该如何解决这个问题?
protected void btnUpload_Click(object sender, EventArgs e)
{
string url = System.Configuration.ConfigurationManager.AppSettings["FTPUrl"].ToString();
string username = System.Configuration.ConfigurationManager.AppSettings["FTPUserName"].ToString();
string password = System.Configuration.ConfigurationManager.AppSettings["FTPPassWord"].ToString();
string filePath = FileUpload1.PostedFile.FileName;
if (filePath != String.Empty)
UploadFileToFtp(url, filePath, username, password);
}
public static void UploadFileToFtp(string url, string filePath, string username, string password)
{
var fileName = Path.GetFileName(filePath);
var request = (FtpWebRequest)WebRequest.Create(url + fileName);
request.Method = WebRequestMethods.Ftp.UploadFile;
request.Credentials = new NetworkCredential(username, password);
request.UsePassive = true;
request.UseBinary = true;
request.KeepAlive = false;
using (var fileStream = File.OpenRead(filePath))
{
using (var requestStream = request.GetRequestStream())
{
fileStream.CopyTo(requestStream);
requestStream.Close();
}
}
var response = (FtpWebResponse)request.GetResponse();
Console.WriteLine("Upload done: {0}", response.StatusDescription);
response.Close();
}
答案 0 :(得分:0)
HttpPostedFile.FileName
是客户端" 上文件的"完全限定名称。
我相信大多数网络浏览器实际上只提供文件名,没有任何路径。所以你只得到Test.mp3
,当你试图使用这样的"亲戚"在服务器上本地路径,它被解析为Web服务器的当前工作目录,C:\Windows\SysWOW64\inetsrv
是什么。
而是使用HttpPostedFile.InputStream
直接访问上传的内容(将其复制到GetRequestStream
)。