我使用 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");
这似乎与我在流程中发现的内容相匹配监视器。看来,如果不重建项目,我就会陷入默认设置,所以我可能会在其他地方寻找不同的工具。
最佳答案
谢谢克里斯
我遇到了同样的问题,现在我不打算删除 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 的人在下一次更新中做到这一点,我相信他们会以一种体面的方式做到这一点
关于asp.net - AjaxFileUpload文件不继承文件夹权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17942765/