AjaxFileUpload 文件不继承文件夹权限
Posted
技术标签:
【中文标题】AjaxFileUpload 文件不继承文件夹权限【英文标题】:AjaxFileUpload file not inheriting folder permissions 【发布时间】:2013-07-30 08:21:49 【问题描述】:我正在使用 AjaxToolkit 中的 AjaxFileUpload 控件成功上传文件。我不得不授予IUSR
对该文件夹的写入权限,但之后就没有问题了。
但是,上传的文件没有继承文件夹上设置的权限,因此它们没有列出IUSR
。在我的本地机器上,这不是什么大问题,但在服务器上,这意味着返回 401,因为需要文件的 IUSR 读取权限才能读取它。
据我所知,该文件夹设置为对其中的文件应用权限,这让我相信这与文件保存到文件夹的方式有关。有人知道更多吗?
更新
好的,所以我找到了有关该问题的更多信息。 This article 建议在将文件保存到指定位置之前,先将其保存在临时位置。他们建议的解决方法(将临时位置更改为已知位置并设置权限)似乎不适用于 AjaxFileUpload。项目临时文件的其余部分出现在那里,但使用进程监视器我可以看到我的临时位置完全是上传图像的其他地方:
如果我将此文件夹的权限设置为IUSR
,那么我的问题就解决了。那么下一个问题,这个位置会一直存在吗?我的猜测是没有。如果是这样,我该如何改变它?
更新 2
好的,所以我发现控件上有一些静态方法被设置为构建临时目录:
public static string BuildTempFolder(string fileId)
return Path.Combine(AjaxFileUpload.BuildRootTempFolder(), fileId);
public static string BuildRootTempFolder()
string path = Path.Combine(Path.GetTempPath(), "_AjaxFileUpload");
if (!Directory.Exists(path))
Directory.CreateDirectory(path);
return path;
其中一个关键行可能是:string path = Path.Combine(Path.GetTempPath(), "_AjaxFileUpload");
,这似乎与我在进程监视器中找到的内容相匹配。看来,如果不重建项目,我就只能使用它们的默认设置,所以我可能会在别处寻找不同的工具。
【问题讨论】:
【参考方案1】:感谢克里斯
我遇到了同样的问题,我现在不打算放弃 ajaxfileUpload 控件,所以我找到了解决方法
1-从codeplex下载源代码
2- 打开“源代码目录”\Server\AjaxControlToolkit\AjaxFileUpload\AjaxFileUpload.cs 并添加静态属性名称UploadRootPath
public static string UploadRootPath
get;
set;
3-修改BuildRootTempFolder函数:
public static string BuildRootTempFolder()
var rootTempFolder = "";
if (UploadRootPath == "")
rootTempFolder = Path.Combine(Path.GetTempPath(), TemporaryUploadFolderName);
else
rootTempFolder = Path.Combine(UploadRootPath, TemporaryUploadFolderName);
if (!Directory.Exists(rootTempFolder))
Directory.CreateDirectory(rootTempFolder);
return rootTempFolder;
4- 构建解决方案并在您的项目中使用新的 AjaxControlToolkit.dll。
5- 在您的项目中设置您希望保存临时文件的目录。
AjaxControlToolkit.AjaxFileUpload.UploadRootPath = Server.MapPath("~/Upload/Temp/");
我希望 DevExpress 家伙在他们的下一次更新中做到这一点,我相信他们会以一种体面的方式做到这一点
【讨论】:
以上是关于AjaxFileUpload 文件不继承文件夹权限的主要内容,如果未能解决你的问题,请参考以下文章