我正在学习asp.net mvc 3,现在我试图实现一个应用程序,用户可以将文件上传到一个文件夹:使用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 \上传\’被拒绝。”这里是处理上载的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");
}
}
}
这不是一个答案,但你应该看看静态方法'System.IO.Path.Combine()'。它使得使用路径更容易。它会为您处理目录分隔符,并且会很好地处理相对路径。 – 2013-02-26 15:33:51
谢谢你的提示。 – 2013-02-26 15:37:14