c#Webclient.UploadData在本地工作,但在服务器上失败
我正在尝试部署一个网站,但我的一个表单有一个图像上传错误 首先,我使用NetworkSolutions进行托管,其中一个表单有一个用于图像的文件上传输入。当我在本地运行应用程序并将映像上载到FTP时,一切正常,但是当我部署到服务器时,连接似乎超时(因为它会挂起几分钟),然后我收到消息“Object reference not set to a instance of a Object.”。我应该注意的一件事是,此服务器上没有设置SSL,但我使用的是不安全的端口c#Webclient.UploadData在本地工作,但在服务器上失败,c#,model-view-controller,ftp,upload,webclient,C#,Model View Controller,Ftp,Upload,Webclient,我正在尝试部署一个网站,但我的一个表单有一个图像上传错误 首先,我使用NetworkSolutions进行托管,其中一个表单有一个用于图像的文件上传输入。当我在本地运行应用程序并将映像上载到FTP时,一切正常,但是当我部署到服务器时,连接似乎超时(因为它会挂起几分钟),然后我收到消息“Object reference not set to a instance of a Object.”。我应该注意的一件事是,此服务器上没有设置SSL,但我使用的是不安全的端口 [HttpPost] [V
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Submit(RegistrationViewModel viewModel)
{
if (!ModelState.IsValid)
{
return RedirectToAction("Index", viewModel);
}
if (Request.Files.Count > 0)
{
string path = String.Empty;
HttpPostedFileBase file = Request.Files[0];
if (file != null && file.ContentLength > 0)
{
string fileName = Guid.NewGuid().ToString() + Path.GetExtension(file.FileName); // Path.GetFileName(file.FileName);
try
{
using (WebClient client = new WebClient())
{
client.Credentials = new NetworkCredential("***", "***");
byte[] buffer = new byte[file.ContentLength];
file.InputStream.Read(buffer, 0, buffer.Length);
file.InputStream.Close();
path = "ftp://***.***.com:21/pics/" + fileName;
client.UploadData(path, buffer);
}
}
catch (WebException ex)
{
string status = ((FtpWebResponse)ex.Response).StatusDescription;
}
}
Context.Registrations.Add(new Registration
{
FirstName = viewModel.FirstName,
LastName = viewModel.LastName,
Email = viewModel.Email,
PhoneNumber = viewModel.PhoneNumber,
Age = viewModel.Age,
ImagePath = path,
CreatedDate = DateTime.Now
});
await Context.SaveChangesAsync();
ConfirmationViewModel confirmViewModel = new ConfirmationViewModel
{
FirstName = viewModel.FirstName,
LastName = viewModel.LastName,
Email = viewModel.Email,
PhoneNumber = viewModel.PhoneNumber
};
return RedirectToAction("Confirm", "Register", confirmViewModel);
}
}
任何帮助都将不胜感激。我已经找到了未设置为对象实例的对象引用,异常来自catch语句。这个异常似乎不是WebException,或者至少我刚才给出的响应不是FtpWebResponse。(由于每次都必须部署,因此调试非常困难),但由于未知原因,我仍在超时。我已成功将映像从服务器保存到服务器!问题归结为专门从web服务器域向ftp域发出的请求
NetworkSolution选项中隐藏的是文件夹权限(任何查看的人都可以获得安全/密码保护),在允许对所需目录进行写访问后,我切换了方法,使用HttpPostedFileBase将文件直接保存到服务器,并成功!我希望我能从一开始就找到这个选项,这样可以省去几个小时的麻烦。您必须提供有关异常和代码中断行号的更多详细信息。。。!更新了原来的帖子。“堆栈跟踪中的异常是当方法UploadData命中寄存器控制器第89行时(im显示寄存器控制器中的Submit函数)”我继续测试。我尝试使用具有完全管理员权限的主FTP帐户,但也出现了相同的问题。我尝试写入网站所在的目录,而不是通过FTP,但出现了拒绝访问错误。因此,我似乎只限于通过FTP。这个问题已经持续了相当长的一段时间,每次我尝试在服务器上测试时,每次发布至少需要10分钟。
file.InputStream.Read(buffer, 0, buffer.Length);
file.InputStream.Close();