我返回一个c#代码,用于将文件保存在服务器文件夹中,并从该位置检索保存的文件。但是这个代码在本地机器上运行良好。但是在IIS中托管应用程序后,我可以将文件保存在所需的位置。但我无法使用
从该位置检索文件Process.Start
会出现什么问题?我在谷歌搜索过,我发现它可能是由于访问权限。但我不知道究竟会出现什么问题以及如何解决这个问题?请问有关如何解决这个问题的任何人请帮帮我?
保存文件:
string hfBrowsePath = fuplGridDocs.PostedFile.FileName;
if (hfBrowsePath != string.Empty)
{
string destfile = string.Empty;
string FilePath = ConfigurationManager.AppSettings.Get("SharedPath") + ConfigurationManager.AppSettings.Get("PODocPath") + PONumber + "\\\\";
if (!Directory.Exists(FilePath.Substring(0, FilePath.LastIndexOf("\\") - 1)))
Directory.CreateDirectory(FilePath.Substring(0, FilePath.LastIndexOf("\\") - 1));
FileInfo FP = new FileInfo(hfBrowsePath);
if (hfFileNameAutoGen.Value != string.Empty)
{
string[] folderfiles = Directory.GetFiles(FilePath);
foreach (string fi in folderfiles)
File.Delete(fi);
//File.Delete(FilePath + hfFileNameAutoGen.Value);
}
hfFileNameAutoGen.Value = PONumber + FP.Extension;
destfile = FilePath + hfFileNameAutoGen.Value;
//File.Copy(hfBrowsePath, destfile, true);
fuplGridDocs.PostedFile.SaveAs(destfile);
}
要检索文件:
String filename = lnkFileName.Text;
string FilePath = ConfigurationManager.AppSettings.Get("SharedPath") + ConfigurationManager.AppSettings.Get("PODocPath") + PONumber + "\\";
FileInfo fileToDownload = new FileInfo(FilePath + "\\" + filename);
if (fileToDownload.Exists)
Process.Start(fileToDownload.FullName);
答案 0 :(得分:2)
看起来像文件夹安全问题。存储文件的文件夹用户组必须具有修改访问权限。基本上有用户(不确定但是IIS_WPG)运行IIS进程,该用户属于用户组,此用户必须在您所在的文件夹上具有修改访问权限正在做读写。
<强>建议强>
Path.Combine
创建文件夹或文件路径。String.Format
创建字符串。FilePath.Substring(0, FilePath.LastIndexOf("\\") - 1)
希望这适合你。
答案 1 :(得分:1)
您可能必须为正在运行的应用程序池授予权限。请参阅此链接http://learn.iis.net/page.aspx/624/application-pool-identities/
您还可以使用内置帐户的“LocalSystem”之一作为应用程序池标识,但它存在一些安全问题。