将图像从ASP.NET上传到godaddy文件系统

时间:2013-10-20 10:27:48

标签: c# asp.net

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

imageFile.SaveAs(galleryPath + fileName); 

但获得权限异常:

  

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

     

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

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

4 个答案:

答案 0 :(得分: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));

答案 1 :(得分:1)

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

以下是更多信息:http://support.godaddy.com/help/article/6481/setting-directory-permissions-with-windows-hosting-accounts

答案 2 :(得分: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在主机中启用了写入权限。

答案 3 :(得分:0)

似乎将网站托管到 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 服务器上。希望您也能够实现这一目标。