【问题标题】:Upload images from ASP.NET to godaddy file system将图像从 ASP.NET 上传到 godaddy 文件系统
【发布时间】:2013-10-28 20:54:10
【问题描述】:

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

imageFile.SaveAs(galleryPath + fileName); 

但获得权限异常:

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

描述:执行过程中发生了未处理的异常 当前的网络请求。请查看堆栈跟踪以获取更多信息 有关错误的信息以及它在代码中的来源。 异常详细信息:System.UnauthorizedAccessException:访问 路径 'D:\Hosting...\html\Images\Gallery\page2-img1.jpg' 被拒绝。

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

【问题讨论】:

  • 如果你在 IIS 上运行它,看看stackoverflow.com/questions/4877741/…
  • 在服务器 Cpanel 上启用写权限了吗?我在 Arvixe 托管我的并且遇到了同样的问题。如果您使用代码在没有 FTP 的情况下上传,则需要启用写入权限。
  • 在godaddy托管面板上,我需要为应用程序池组设置权限吗? (它在文件管理器上,当我们将鼠标悬停并单击更改权限时)。

标签: c# asp.net


【解决方案1】:

好的,这是我的观点

    @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 在您的主机中启用了写入权限。

【讨论】:

    【解决方案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));
    

    【讨论】:

    • 谢谢。这正是我所要求的。
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

      1. 首先,您必须更改文件夹IMAGES的权限[https://www.godaddy.com/help/set-directory-permissions-in-my-windows-hosting-帐户 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 服务器上。希望您也能实现这一目标。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-01-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多