我的网站上有一个管理面板,允许用户将图像上传到文件系统。我只是在 C# 代码中做:
imageFile.SaveAs(galleryPath + fileName);
但是收到权限异常:
访问路径"D:\Hosting...\html\Images\Gallery\page2-img1.jpg" 被拒绝。
说明:执行 当前 Web 请求。请查看堆栈跟踪以获取更多信息 有关错误及其在代码中起源位置的信息。 异常详细信息:系统。未经授权访问异常:访问 路径"D:\Hosting...\html\Images\Gallery\page2-img1.jpg"被拒绝。
你能给我一个提示,我该如何授予权限吗?
阅读此故障排除文章,那里有一个解决方案。如果这不起作用,请联系支持;)
http://support.godaddy.com/help/article/6481/setting-directory-permissions-with-windows-hosting-accounts
顺便说一句,更好的做法是使用Path.Combing连接文件夹+文件名
imagefile.SaveAs(System.IO.Path.Combine(galleryPath, fileName));
谢谢大家。我只需要将文件夹的权限更改为读/写。默认情况下,它是只读的。
以下是更多信息: http://support.godaddy.com/help/article/6481/setting-directory-permissions-with-windows-hosting-accounts
这是我的观点
@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 在主机中启用写入权限。
网站托管给 godaddy 的开发人员经常面临这个问题。不幸的是,客户服务没有提供解决问题的简单方法。我遇到了这个问题,经过多次谷歌搜索以及尝试和错误,我终于解决了这个问题。确实,此问题与许可有关,但不仅如此。问题是,一般来说,您的网站位于httpdocs文件夹中,这意味着在您网站的主根目录中找到的名称为IMAGES的文件夹将是/httpdocs/IMAGES。
- 首先,您必须更改文件夹IMAGES[https://www.godaddy.com/help/set-directory-permissions-in-my-windows-hosting-account-16135]的权限。更改应用程序池组(组或用户名列)的这些权限,并授予将授予写入和修改权限的"完全"控制。同时取消选中允许从父对象继承的权限传播到此对象和所有子对象。将它们包含在此处明确定义的条目中。
- 同时更改文件夹 httpdocs 的权限。对于此文件夹的应用程序池组,请授予添加写入权限,并且像以前一样,不要忘记取消选中"允许从父对象的可继承权限传播到此对象和所有子对象"。将它们与此处明确定义的条目一起包含。![修改HTTP文档的权限目录][1]: https://i.stack.imgur.com/nAsua.png
- 返回您的代码以保存图像(对不起,对于非 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)。
- 使用代码(有许多与如何保存图像相关的教程)来保存图像。通过这样做,我已经成功地将我的图像保存在 godaddy 服务器上。希望你也能做到这一点。