给定物理路径,服务器中应为虚拟路径.MapPath



我试图更改本地c盘中的目录,但标题中有错误。除了使用服务器,还有其他方法吗。MapPath?。我使用的是ZipOutputStream nuget包。

我想在C:中找到我的目录,而不是在项目文件夹中。

public FileResult DownloadZipFileSig(string FileId){ 

var fileName = "FilesDL".zip";
var tempOutPutPath = Server.MapPath(Url.Content("C:/Users/SDILAP2/Desktop/ID_Esig_Files")) + fileName;


using (ZipOutputStream s = new ZipOutputStream(System.IO.File.Create(tempOutPutPath)))
{
s.SetLevel(9); 

byte[] buffer = new byte[4096];

List<string> stringList = FileId.Split(',').ToList();

List<string> tempList = new List<string>();

foreach (string str in stringList)
{

if (System.IO.File.Exists(Server.MapPath("C:/Users/SDILAP2/Desktop/ID_Esig_Files/" + str + ".jpeg")))
{
tempList.Add(Server.MapPath("C:/Users/SDILAP2/Desktop/ID_Esig_Files/" + str + ".jpeg"));

}


}

stringList = tempList;


for (int i = 0; i < stringList.Count; i++)
{
ZipEntry entry = new ZipEntry(Path.GetFileName(stringList[i]));
entry.DateTime = DateTime.Now;
entry.IsUnicodeText = true;
s.PutNextEntry(entry);

using (FileStream fs = System.IO.File.OpenRead(stringList[i]))
{
int sourceBytes;
do
{
sourceBytes = fs.Read(buffer, 0, buffer.Length);
s.Write(buffer, 0, sourceBytes);
} while (sourceBytes > 0);
}
}
s.Finish();
s.Flush();
s.Close();

}

return File(finalResult, "application/zip", fileName);

}

您可能不太了解web URL是如何工作的,以及如何使用server.mappath((。

Web用户:

当你有一个基于web的url时,页面中的所有html标记,甚至用户提供的url都被称为基于web的。

所以,如果你有一个来自你网站根目录的文件夹,比如说MyUpLoads

然后那只是一个文件夹中的网站路径名。

例如:

www.mywebsite/UpLoadFiles/cat.jpg

如果你写html标记,那么你可以也可以为上面的图片提供一个URL,或者说用html图像控件,你可以设置ImageURL或";源";(src(到该文件。

如果您使用IIS(而不是IIS express(,那么您当然可以添加所谓的病毒文件夹。比如说同一网络上另一台计算机上的某个大型服务器驱动器。

所以,这个虚拟文件夹可以在你网络上的任何地方,当然,对于网页HTML或网页URL,你也可以使用这种格式:

www.mysite/MassiveFolder/info.pdf

或者

localhost:5403/MyUpLoads/cat.jpg

然而,在代码背后?

ANY代码隐藏(c#或vb.net(始终使用平面jane WINDOWS文件路径。这些是有效的windows完整文件名。

这意味着代码隐藏可以100%自由地打开/读取/使用/查看/播放计算机上的任何文件,甚至可以在计算机网络上打开任何文件。

所以当你使用时

server.mapPath("localhost:5403/MyUpLoads/cat.jpg")

然后将上述内容翻译成本地平面jane DOS/WINDOWS文件路径!!!!

以上很可能成为

C:UsersAlbertKallalsourcereposCSharpWebAppMyUpLoadscat.jpg

所以请记住:

web urls - HTML/asp markup in a page = web based syntax/path.
computer path: plane jane full path names like all windows software.

那么,就你而言?

var fileName = "FilesDL".zip";
var tempOutPutPath = @"C:/Users/SDILAP2/Desktop/ID_Esig_Files")) + fileName;

因此,您不需要也不想使用server.mappath,因为它只适用于您想要翻译到本地计算机文件路径系统的给定HTML或基于web的URL。

由于您的路径名已经是该格式,因此不需要。

事实上,请记住,你可以利用这一事实为自己谋利。

任何文件夹(或vitural文件夹(都将显示在您的有效URL和路径名中(基于web(。

但是,您可能有一些pdf文件或敏感文档。因此,将该文件夹从根文件夹或web项目文件夹中移出。

现在,没有有效的URL存在,甚至不被允许。

然而,代码隐藏?它可以在你的计算机上运行、查看和使用任何文件,你可以使用代码隐藏来获取这些文件,但网站、web端无法使用、查看或获取这些文件。你仍然可以做一些事情,比如提供一个下载按钮,但你的代码可以获取文件,读取它,并将它输出给最终用户(流式传输文件(。

因此,您只需要(必须(使用服务器。MapPath函数当URL来自网站或html标记时。这将把基于web的URL转换成一个常规的、老式的、完全限定的windows文件路径名。

但是,如果您已经拥有完整的windows路径名,则不需要将URL转换为windows文件路径。

因此,在大多数情况下,您的代码后台可以查看、查看、抓取和播放服务器上的文件。Web用户或基于Web的URL必须是网站中文件夹的一部分,但代码背后不存在此类限制。

现在,当代码部署到web服务器时,通常会有一些文件安全权限,但作为一般规则,隐藏的web代码不限于也不限于网站中的JUST文件夹。这些有价值的URL对用户和网络浏览器来说是一种限制,正如所指出的,通常出于安全目的,使用网站之外的文件夹,因为没有可能的有效的基于web的路径可以使用/查看,甚至解析为在网站的根起始文件夹之外的文件。

因此,对于那些现有的文件,您不需要server.mappath.

最新更新