【发布时间】:2017-05-21 23:41:29
【问题描述】:
我正在使用 mvc 4.5 尝试使用 FTP 上传图像。
我的代码:
public virtual void Send(HttpPostedFileBase uploadfile, string fileName)
{
Stream streamObj = uploadfile.InputStream;
byte[] buffer = new byte[uploadfile.ContentLength];
streamObj.Read(buffer, 0, buffer.Length);
streamObj.Close();
string ftpurl = String.Format("{0}/{1}/{2}", _remoteHost, _foldersHost, fileName);
var request = FtpWebRequest.Create(ftpurl) as FtpWebRequest;
request.Method = WebRequestMethods.Ftp.UploadFile;
request.UsePassive = false;
request.Credentials = new NetworkCredential(_remoteUser, _remotePass);
request.ContentLength = buffer.Length;
var requestStream = request.GetRequestStream();
requestStream.Write(buffer, 0, buffer.Length);
requestStream.Close();
var response = (FtpWebResponse) request.GetResponse();
if (response != null)
response.Close();
}
代码在本地主机上运行,我能够连接到 FTP 服务器并上传文件,但是一旦项目发布,问题就出现了。我正在使用 SmarterASP 来托管该站点。当我尝试在生产中上传图像时,上传方法给了我一个异常,消息说“无法连接到远程服务器”。
任何线索或解决方法?
异常详情:
System.Net.FtpWebRequest.GetRequestStream() at AgileResto.Controllers.RestaurantsController.Send(HttpPostedFileBase uploadfile, String fileName) at AgileResto.Controllers.RestaurantsController.UploadFile(Int32 RestaurantList, HttpPostedFileBase file, HttpPostedFileBase文件2)
【问题讨论】:
-
您是否检查了防火墙端口,并且您实际上可以从生产服务器连接到 FTP 站点?作为一项基本测试,尝试在您选择的浏览器中浏览到 ftp://
以查看连接是否成功。如果没有,在修复任何代码之前,您需要担心连接/配置问题。 -
你有什么理由去激活模式(
UsePassive = false)?它几乎无法工作。使用被动模式。 -
如果您需要更多帮助,请先发布确切的异常消息、完整的堆栈跟踪和
FtpWebRequestlog file。 -
@pcdev 我正在使用 SmarterASP 来托管该站点,恐怕我无法访问防火墙配置。从我的电脑上,当我尝试浏览 ftp 时,除了错误页面之外什么都无法访问://。但奇怪的是,我能够从运行在 localhost 的站点访问 FTP 服务器,不是吗?
-
@MartinPrikryl,我将其更改为被动模式,但错误仍然存在......我尝试创建日志文件,但我找不到它。你知道我在哪里可以找到它吗?完全例外:Unable to connect to the remote server at System.Net.FtpWebRequest.GetRequestStream() at AgileResto.Controllers.RestaurantsController.Send(HttpPostedFileBase uploadfile, String fileName) at AgileResto.Controllers.RestaurantsController.UploadFile(Int32 RestaurantList , HttpPostedFileBase 文件, HttpPostedFileBase 文件2)
标签: c# asp.net-mvc ftp