更改HttpPostedFileBase.SaveAs目标目录

时间:2013-05-30 08:37:17

标签: c# asp.net asp.net-mvc c#-4.0 io

我想将上传的文件保存在项目目录之外。当我使用HttpPostedFileBase.SaveAs(path)时,文件目标将位于服务器的目录中。

例如:

HttpPostedFileBase fileurl = null;

foreach (string file in Request.Files)
{
    fileurl = Request.Files[file];
}

string extension = Path.GetExtension(fileurl.FileName);
if (extension == ".zip" || extension == ".rar")
{
    if (fileurl != null && fileurl.ContentLength > 0)
    {
        var fileName = Path.GetFileName(fileurl.FileName);
        var path = AppDomain.CurrentDomain.BaseDirectory + fileName;
        fileurl.SaveAs(path); 

path始终位于项目目录中。

我想将我上传的目录保存到我想要的任何地方。如何更改代码才能执行此操作?

3 个答案:

答案 0 :(得分:1)

您在编写时将其设置为服务器的目录:

     var path = AppDomain.CurrentDomain.BaseDirectory + fileName;

的用法
 AppDomain.CurrentDomain.BaseDirectory

指向当前域的目录。

答案 1 :(得分:1)

我利用:

var path = Path.Combine(Server.MapPath(), filename);
file.SaveAs(path);

在这个堆栈帖子中有一篇关于Server.MapPath()的解释很好的帖子:Server.MapPath() Explained

引用文章(highly recommend reading the full post)的简短引用:

  
      
  • Server.MapPath指定要映射到的相对或虚拟路径   物理目录。
  •   
  • Server.MapPath(“。”)返回当前的物理目录   正在执行的文件(例如aspx)
  •   
  • Server.MapPath(“..”)返回父目录
  •   
  • Server.MapPath(“〜”)返回到根的物理路径   应用
  •   
  • Server.MapPath(“/”)返回到根目录的物理路径   域名(不一定与域名的根目录相同)   应用程序)
  •   

答案 2 :(得分:0)

我会用这样的东西。

foreach (string file in Request.Files)
{
    var fileurl = Request.Files[file] as System.Web.HttpPostedFileBase;
    var stream = System.IO.File.Create("PATH_TO_DIRECTORY");
    fileurl.InputStream.Seek(0, SeekOrigin.Begin);
    fileurl.InputStream.CopyTo(stream);
    stream.Close();
}

如果您想要写入AppDomain目录以外的其他目录。

但是网站的标识必须具有对该目录路径的写入权限,否则您将收到写入错误。