7

我的网站上有一个管理面板,允许用户将图像上传到文件系统。我只是在 C# 代码中做:

imageFile.SaveAs(galleryPath + fileName); 

但获得权限异常:

拒绝访问路径“D:\Hosting...\html\Images\Gallery\page2-img1.jpg”。

说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。异常详细信息:System.UnauthorizedAccessException:对路径“D:\Hosting...\html\Images\Gallery\page2-img1.jpg”的访问被拒绝。

您能否给我一个提示,我该如何授予权限?

4

4 回答 4

2

阅读此故障排除文章,那里有解决方案。如果这不起作用,请联系支持;)

http://support.godaddy.com/help/article/6481/setting-directory-permissions-with-windows-hosting-accounts

顺便说一句,在连接文件夹+文件名时使用 Path.Combine 是更好的做法

imagefile.SaveAs(System.IO.Path.Combine(galleryPath, fileName));
于 2013-10-20T17:17:22.387 回答
1

感谢大家。我只需要将文件夹的权限更改为读/写。默认情况下它是只读的。

这里有更多信息:http: //support.godaddy.com/help/article/6481/setting-directory-permissions-with-windows-hosting-accounts

于 2013-10-21T09:50:01.383 回答
0

好的,这是我的观点

    @using (Html.BeginForm("Upload", "Pictures", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    @Html.AntiForgeryToken()
    <div>
    Title:<br/>
    @Html.EditorFor(x => x.Title)<br/>
    @Html.ValidationMessageFor(x => x.Title)<br/>
    @Html.TextBoxFor(x => x.File, new { 
    type = "file"
    })<br/> 
    @Html.ValidationMessageFor(x => x.File)<br/> 
    Description:<br/>
    @Html.TextAreaFor(x => x.Description)<br/>
    @Html.ValidationMessageFor(x => x.Description)
    </div>
    <div style="clear:both"></div>
    <p><input type="submit" value="Save"/></p>
}

这是我的视图模型

public class UploadModel
    {
        [Required(ErrorMessage=("You have not selected a file"))]
        public HttpPostedFileBase File { get; set; }
        [Required(ErrorMessage = "Please enter a title")]
        [StringLength(50)]
        public string Title { get; set; }
        [StringLength(400)]
        public string Description { get; set; }
    }

这是我的控制器动作。

    [Authorize(Roles = "Approved")]
    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Upload(UploadModel m)
    {
        byte[] uploadedFile = null;
        Byte123 xxx = new Byte123();
        if (m.File != null && !string.IsNullOrEmpty(m.Title))
        {
            //var fileName = System.IO.Path.GetFileName(m.File.FileName);
            //string c = m.File.FileName.Substring(m.File.FileName.LastIndexOf("."));
           // m.Title = m.Title.Replace(c, "");
            uploadedFile = new byte[m.File.InputStream.Length]; //you get the image as byte here but you can also save it to file.

这是 MVC 代码。如果您使用的是 Web 表单,那么代码应该更短。我从一个链接中得到了这个,但现在找不到它,所以只发布了我自己的代码。您还需要确保使用 Cpanel 在您的主机中启用了写入权限。

于 2013-10-20T10:55:26.653 回答
0

将网站托管到 godaddy 的开发人员似乎经常面临这个问题。不幸的是,客户服务并没有提供解决问题的简单方法。我遇到了这个问题,经过多次谷歌搜索以及尝试和错误,我终于解决了这个问题。确实,这个问题与权限有关,但不仅如此。问题是,通常,您的网站位于 httpdocs 文件夹中,这意味着在您网站的主根目录中找到的名为 IMAGES 的文件夹将是 /httpdocs/IMAGES。

  1. 首先,您必须更改文件夹IMAGES [https://www.godaddy.com/help/set-directory-permissions-in-my-windows-hosting-account-16135] 的权限。更改应用程序池组(组或用户名列)的这些权限,并授予将授予写入和修改权限的完全控制权。还要取消选中允许从父级继承的权限以传播到此对象和所有子对象。将这些包含在此处明确定义的条目中。
  2. 同时更改文件夹 httpdocs 的权限。对于此文件夹的应用程序池组,请添加写入权限,并且像以前一样,不要忘记取消选中允许从父级继承的权限传播到此对象和所有子对象。将这些包含在此处明确定义的条目中。![修改 httpdocs 的权限目录][1]:https://i.stack.imgur.com/nAsua.png
  3. 返回您的代码以保存图像(对于非 csharp 开发人员,抱歉,这是我正在使用的语言)。假设在图像文件夹中,您有另一个文件夹,即您要保存图像的管理员。该目录现在是 /httpdocs/IMAGES/Administrateurs。使用您可以在许多教程中找到的代码,就我而言,此代码是:
    string cheminImage = "~/httpdocs/IMAGES/Administrateurs";
    try
    {
    if (!Directory.Exists(HttpContext.Current.Request.MapPath(cheminImage)))
    {
    
    Directory.CreateDirectory(HttpContext.Current.Request.MapPath(cheminImage));
    }
    }
    catch
    {  } 
    

这仅意味着如果目录不存在,只需创建它(我使用的是 .Net 4)。

  1. 使用代码(有很多与如何保存图像相关的教程)来保存图像。通过这样做,我已成功将我的图像保存在 godaddy 服务器上。希望你也能做到这一点。
于 2021-02-26T10:04:54.997 回答