2011-12-05 49 views
1

我对我的网址有一些疑问。相对直接网址

我在我的asp页面上使用树形视图,这就是为什么我使用这个getcurrentdirectory。

//DirectoryInfo di = new DirectoryInfo("~" + GetTheCurrentDirectory 
(selectedNodeValue)); 
~ = C://Inetpub//WwwRoot// 
GetTheCurrentDirectory = Projects//Folder1// 

因此,目前这很好,因为我可以加载文件夹的所有文件。

当我点击它时尝试下载文件。

protected void Page_Load(object sender, EventArgs e) 
{ 
    string path = Request["path"].ToString(); 
    string filename = Request["file"].ToString(); 

    fileDownload(filename, Server.MapPath("~\\" + path + filename)); 
} 

因此,我可以检索路径这是当前目录。我在其他页面中使用的方法。

在server.MapPatch我应该把〜也?因为当我这样做是工作localy,但是当我把它放在我的服务器上,下载部分不起作用,所以我想这是一个URL问题,我无法调试,所以我真的失去了这一点!

我改变了一些事情:

DirectoryInfo的二=新的DirectoryInfo(GetTheCurrentDirectory(selectedNodeValue));

所以它返回相同的东西。

所以现在在使用Server.Mappath路径等类似项目//文件夹1 //

它本地工作,但仍然没有在服务器上...

+1

这个实现是非常不安全的,你应该考虑改变它。如果我将'path'设置为空字符串,'file'设置为* web.config *,我将能够下载您的站点配置。这可能包含敏感信息,例如支付提供商或数据库凭证的API密钥。 – Arjen

+0

我认为问题不在于URL ...我应该在web.config中添加一些东西,或者从网站上下载一些东西?因为它本地工作,但也许当它在服务器端我应该添加一些东西? – Kiwimoisi

回答

1

试试这个:

fileDownload(filename, Server.MapPath("~/" + path + filename)); 

而且,作为最佳实践,不要使用+来连接字符串。您应该使用的String.Format,所以我会写出如下上面的一行:

fileDownload(filename, Server.MapPath(string.format("~/{0}{1}", path, filename))); 

只是为了帮助你了解你的问题好,使用Server.Mappath将返回对应于服务器上的物理文件路径Web服务器上的虚拟路径。即它将“http://website.com/img.jpg”转换成类似“C:\ mywebsite \ img.jpg”的东西

更新: 确保您尝试将文件保存到的文件夹,不是只读的,并且您有权在文件夹中创建文件。

+0

我认为问题不在于URL ...我应该在web.config中添加什么东西或从网站上下载任何内容?因为它本地工作,但也许当它在服务器端我应该添加一些东西? – Kiwimoisi

+0

确保您尝试将文件保存到的文件夹不是只读的,并且您有权在文件夹中创建文件。 – Mark