我目前正在研究asp.net mvc 3,现在我正在尝试实现一个用户可以将文件上传到文件夹的应用程序:
这是我的第一个实现,它实际上工作正常,这是控制器代码:
public class FileUploadController : Controller
{
//
// GET: /FileUpload/
public ActionResult Index()
{
return View();
}
[HttpPost]
[ActionName("Upload")]
public ActionResult Index(FormCollection form)
{
string upFolder = Server.MapPath("~/FileUploadFiles/");
if(!Directory.Exists(upFolder))
{
Directory.CreateDirectory(upFolder);
}
HttpPostedFileBase photo = Request.Files["fileupload"];
if (photo != null)
{
photo.SaveAs(upFolder+photo.FileName);
return RedirectToAction("Index");
}
return View();
}
}
这是我的另一个实现,我收到错误“拒绝访问路径'UserUploads \ Uploads \'。”以下是处理上传的utitility类:
public static class FileUploader
{
public static char DirSeparator = Path.DirectorySeparatorChar;
public static string FilesPath = "UserUploads" + DirSeparator + "Uploads" + DirSeparator;
public static string UploadFile(HttpPostedFileBase file)
{
//check if we have a file
if(file == null)
{
return "";
}
//make sure the file has content
if(!(file.ContentLength > 0 ))
{
return "";
}
string fileName = file.FileName;
string fileExt = Path.GetExtension(file.FileName);
//make sure we are able to determine a proper extension
if(fileExt == null)
{
return "";
}
//check if directory does not exists
if(!Directory.Exists(FilesPath))
{
Directory.CreateDirectory(FilesPath);
}
//set our full path for saving
string path = FilesPath + DirSeparator + fileName;
//Save the file
file.SaveAs(Path.GetFullPath(path));
//Return the filename
return fileName;
}
public static void DeleteFile(string fileName)
{
//Don't do anything if there is no name
if(fileName.Length > 0)
{
return;
}
//Set our full path for deleting
string path = FilesPath + DirSeparator + fileName;
//Check if our file exists
if(File.Exists(Path.GetFullPath(path)))
{
File.Delete(Path.GetFullPath(path));
}
}
以下是控制器的代码:
using MvcFileUpload.Utility;
namespace MvcFileUpload.Controllers
{
public class UploadFilesController : Controller
{
//
// GET: /UploadFiles/
public ActionResult Index()
{
return View();
}
[HttpPost]
[ActionName("Upload")]
public ActionResult Index(HttpPostedFileBase file)
{
FileUploader.UploadFile(file);
return RedirectToAction("Index");
}
}
}
答案 0 :(得分:3)
应该创建FilePath
目录在哪里?在网站根目录下?您应手动创建“UserUploads”文件夹,并为AppPool(包括您的Web应用程序)运行的帐户提供在该处写入的权限。
答案 1 :(得分:2)
路径可能不正确吗?我注意到在可行的实现中,您使用Server.MapPath()为目录使用完整的物理路径,但实用程序类只有部分路径。如果您尝试为FilesPath变量分配完整路径会发生什么?如果您仍然遇到问题,我建议运行ProcMon以获取有关生成访问被拒绝错误时文件系统上发生的情况的更多信息。
答案 2 :(得分:0)
我能够通过
来解决它修改实用程序类:
public static string FilesPath = HttpContext.Current.Server.MapPath("~\\UserUploads" + DirSeparator + "Uploads" + DirSeparator);
感谢Sir / Ma'am提供解决方案。谢谢++
答案 3 :(得分:0)
没有一个解决方案帮助了我。我正在考虑将用户分配给具有目录访问权限的IIS。