修改HttpPostedFileBase.保存目标目录

本文关键字:目标目录 保存 HttpPostedFileBase 修改 | 更新日期: 2023-09-27 18:16:16

我想将上传的文件保存在项目目录之外。当我使用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总是在项目的目录中。

我想把我上传的目录保存在我想要的地方。我如何修改代码来实现它?

修改HttpPostedFileBase.保存目标目录

您可以将其设置为服务器的目录:

     var path = AppDomain.CurrentDomain.BaseDirectory + fileName;

的用法
 AppDomain.CurrentDomain.BaseDirectory

指向当前域的目录

我利用:

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

关于Server.MapPath()有一篇很好的解释:Server.MapPath() explained

参考文章中的一段简短引用(强烈建议阅读全文):

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

我会使用这样的东西。

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目录。

但是网站的身份必须对该目录路径具有写访问权限,否则您将得到一个写错误。