C# 无法将文件上载到ftp asp.net
我从生产服务器在ftp上创建文件时遇到问题。下面的代码在我的开发服务器上运行良好,但当我将代码移动到我购买主机的站点上的生产服务器时,会出现错误 代码C# 无法将文件上载到ftp asp.net,c#,asp.net,system.net.webexception,C#,Asp.net,System.net.webexception,我从生产服务器在ftp上创建文件时遇到问题。下面的代码在我的开发服务器上运行良好,但当我将代码移动到我购买主机的站点上的生产服务器时,会出现错误 代码 string fullname = Convert.ToString(TxtBx_FullName.Text); if (FU_Img.HasFile) { string ftpUrl = ""; HttpPostedFile userPostFile = FU_Img.PostedFile; string uploa
string fullname = Convert.ToString(TxtBx_FullName.Text);
if (FU_Img.HasFile)
{
string ftpUrl = "";
HttpPostedFile userPostFile = FU_Img.PostedFile;
string uploadUrl = @"ftp://abc/upload/u" + fullname;
string uploadFileName = Path.GetFileName(FU_Img.FileName);
uploadFileName = "image." + uploadFileName.Split('.')[1];
Stream streamObj = userPostFile.InputStream;
Byte[] buffer = new Byte[userPostFile.ContentLength];
streamObj.Read(buffer, 0, buffer.Length);
streamObj.Close();
streamObj = null;
// FtpWebResponse CreateForderResponse;
if (!GetAllFilesList(uploadUrl, "xyz", "******"))
{
FtpWebRequest ftp = (FtpWebRequest)FtpWebRequest.Create(uploadUrl);
ftp.Method = WebRequestMethods.Ftp.MakeDirectory;
ftp.Credentials = new NetworkCredential("xyz", "******");
FtpWebResponse response = (FtpWebResponse)ftp.GetResponse();
}
//if (CreateForderResponse.StatusCode == FtpStatusCode.PathnameCreated)
ftpUrl = string.Format("{0}/{1}", uploadUrl, uploadFileName);
FtpWebRequest requestObj = FtpWebRequest.Create(ftpUrl) as FtpWebRequest;
requestObj.KeepAlive = false;
requestObj.UseBinary = true;
requestObj.Method = WebRequestMethods.Ftp.UploadFile;
requestObj.Credentials = new NetworkCredential("xxxx", "xxxxxx");
Stream requestStream = requestObj.GetRequestStream(); <----- error
requestStream.Write(buffer, 0, buffer.Length);
requestStream.Flush();
requestStream.Close();
requestObj = null;
[WebException: The remote server returned an error: (550) File unavailable (e.g., file not found, no access).]
System.Net.FtpWebRequest.SyncRequestCallback(Object obj) +341
System.Net.FtpWebRequest.RequestCallback(Object obj) +23
System.Net.CommandStream.Dispose(Boolean disposing) +19
System.IO.Stream.Close() +20
System.IO.Stream.Dispose() +10
System.Net.ConnectionPool.Destroy(PooledStream pooledStream) +188
System.Net.ConnectionPool.PutConnection(PooledStream pooledStream, Object owningObject, Int32 creationTimeout, Boolean canReuse) +118
System.Net.FtpWebRequest.FinishRequestStage(RequestStage stage) +655
System.Net.FtpWebRequest.GetRequestStream() +795
MentorMentee.SignUp.signup.Btn_Preview_Click(Object sender, EventArgs e) +954
System.EventHandler.Invoke(Object sender, EventArgs e) +0
System.Web.UI.WebControls.Button.OnClick(EventArgs e) +9553178
System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +103
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +35
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1724
我发现的是错误的属性KeepAlive,但不起作用。我哪里出了问题?下面的解决方案适合我
private bool FtpUpload(FileUpload file, string ftpServer, string username, string ftpPass, string domainName = "")
{
// ftp://domain\user:password@ftpserver/url-path
// If you are a member of a domain, then "ftp://domain-name\username:password@url-path" may fail because the backslash (\) is sent in as a literal character and Internet Explorer incorrectly looks for a file instead of parsing a Web address. Changing the backslash (\) in the domain-name\username to domainname%5Cusername works correctly.
try
{
string ftpAddres;
if (domainName != string.Empty)
ftpAddres = "ftp://" + domainName + @"%5C" + username + ":" + ftpPass + "@" + ftpServer + "/" + file.FileName;
else
ftpAddres = "ftp://" + username + ":" + ftpPass + "@" + ftpServer + "/" + file.FileName;
using (var webClient = new System.Net.WebClient())
{
webClient.UploadData(new Uri(ftpAddres), file.FileBytes);
}
}
catch (Exception e)
{
throw new Exception(e.Message, e);
}
return true;
}
感谢@freeloper为您在评论中发布的链接。好吧,尽管您付出了所有努力,凯文仍然需要更改他的密码:)确保
ftpUrl
和uploadUrl
@AlexFilipovici lol-man中没有空格,我忘了我用了三次credenbtials:D@Pete它是从我的本地控制台和web应用程序在同一个ftp url上工作的。我注意到uploadUrl中有一个空格,并将其删除,但仍然出现相同的错误