0

我正在尝试上传图像。当我从本地主机执行此操作时它可以正常工作,但是当我发布它时它会从服务器引发错误:

当我使用此代码时:

public string ImagePath(HttpPostedFileBase imgfile)
        {
            var path = "";
            // code for saving the image file to a physical location.
            var fileName = Path.GetFileName(imgfile.FileName);


            path = Path.Combine(HttpContext.Server.MapPath("~/Images/Sections/Developer/ClientLogo"), fileName);

            string fileNameWithoutExtension = System.IO.Path.GetFileNameWithoutExtension(imgfile.FileName);
            int iteration = 1;
            while (System.IO.File.Exists((path)))
            {
                fileName = string.Concat(fileNameWithoutExtension, "-", iteration, System.IO.Path.GetExtension(imgfile.FileName));

                path = Path.Combine(HttpContext.Server.MapPath("~/Images/Sections/Developer/ClientLogo"), fileName);
                iteration++;
            }
            imgfile.SaveAs(path);
            // prepare a relative path to be stored in the database and used to display later on.
            path = Url.Content(Path.Combine("~/Images/Sections/Developer/ClientLogo", fileName));
            return path;
        }

错误是

System.UnauthorizedAccessException:对路径“D:\InetPub\vhosts\xx.com\httpdocs\Images\Sections\Developer\ClientLogo\circle-small-empty.18x18.png”的访问被拒绝。在 System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) 在 System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs , String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy) at System。 System.Web.HttpPostedFile.SaveAs(String filename) 在 System.Web.HttpPostedFileWrapper 的 IO.FileStream..ctor(String path, FileMode mode)。

And when I use Server.MapPath instead of HttpContext.Server.MapPath it throw different error:

错误是:

System.IO.DirectoryNotFoundException:找不到路径“D:\InetPub\vhosts\xx.com\httpdocs\Images\Sections\Developer\ClientLogo\demo.png”的一部分。在 System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) 在 System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs , String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy) at System。 IO.FileStream..ctor(String path, FileMode mode) at System.Web.HttpPostedFile.SaveAs(String filename) at System.Web.HttpPostedFileWrapper.SaveAs(String filename) at xx。

我试图从我的本地主机更改权限,但没有任何效果...请给我一些建议

4

2 回答 2

2

您的 Web 应用程序无权写入您尝试保存图像的位置。这通常通过在您的 web.config 中添加一个条目来处理,该条目指向保存所有上传的文件夹

<appSettings>
  ...
  <add key="uploadPath" value="C:\Uploads"/>
  ...
</appSettings>

然后在您的代码中,您将读取该配置条目以识别将保存图像的路径:

....
string path = ConfigurationManager.AppSettings["uploadPath"];
string filePath = Path.Combine(path, fileName);
....

然后为了将文件保存到此目录,您需要设置该目录的权限,以便运行 Web 应用程序的用户对该目录具有写入权限。这将允许您将文件从 Web 应用程序写入该文件夹。

这样,作为开发人员的您就不会指定文件的去向。系统管理员可以决定文件的去向,以及支持您的 Web 应用程序所需的权限。

于 2013-02-12T21:26:18.500 回答
0

检查文件夹的只读属性是否处于活动状态。如果这是一台Windows机器,则在文件夹的属性中取消选中它。

如果它不断恢复,您可能需要通过转到安全性->高级->有效权限->单击选择...->输入您的用户名并检查完全控制->然后单击确定来获得该文件夹的所有权。

于 2017-08-09T20:13:41.233 回答