我的网站上有一个管理员面板,允许用户将图像上传到文件系统。 我只是在做C#代码:
imageFile.SaveAs(galleryPath + fileName);
但获得权限异常:
访问路径'D:\ Hosting ... \ html \ Images \ Gallery \ page2-img1.jpg' 被拒绝。
描述:执行期间发生了未处理的异常 当前的网络请求。请查看堆栈跟踪了解更多信息 有关错误的信息以及它在代码中的起源。 异常详细信息:System.UnauthorizedAccessException:访问 路径'D:\ Hosting ... \ html \ Images \ Gallery \ page2-img1.jpg'被拒绝。
您能否给我一个提示,如何授予权限?
答案 0 :(得分:2)
阅读此故障排除文章,那里有一个解决方案。如果这不起作用,请联系支持人员;)
顺便说一句,在连接文件夹+文件名
时使用Path.Combine是一种更好的做法imagefile.SaveAs(System.IO.Path.Combine(galleryPath, fileName));
答案 1 :(得分:1)
谢谢大家。我只需要将文件夹的权限更改为读/写。默认情况下,它是只读的。
答案 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。
string cheminImage = "~/httpdocs/IMAGES/Administrateurs";
try
{
if (!Directory.Exists(HttpContext.Current.Request.MapPath(cheminImage)))
{
Directory.CreateDirectory(HttpContext.Current.Request.MapPath(cheminImage));
}
}
catch
{ }
这仅意味着如果目录不存在,只需创建它(我使用的是 .Net 4)。