我正在使用文件管理系统。我已将文档上传到服务器中的目录中,并且我已将所有上传的文件列在gridview中,文档名称为linkbutton。
我的问题是我要点击文件名打开该特定文件,这实际上是一个链接按钮。这是我的代码。
protected void gdlbtnDocName_Click(object sender, EventArgs e)
{
try
{
LinkButton lkbtn = (LinkButton)sender;
if (File.Exists(lkbtn.CommandArgument))
{
System.Diagnostics.Process.Start(lkbtn.CommandArgument);
}
}
catch (Exception ex)
{
lblMessage.Text = ex.Message.ToString();
}
}
lkbtn.CommandArgument是文件路径说(G:\ dms \ eg.text)。 这段代码在开发中心工作正常。但是当我发布它并在localhost上运行时,它无效。
任何人都可以帮助我......
答案 0 :(得分:3)
您需要以下脚本才能从服务器上下载文件。 process.start不适用于此
在下面的脚本中我在点击按钮时从服务器下载csv文件。
string attachment = "attachment; filename=OutputPeoplesoft.csv";
HttpContext.Current.Response.AppendHeader("content-disposition", attachment);
HttpContext.Current.Response.ContentType = "text/csv";
HttpContext.Current.Response.AppendHeader("Pragma", "public");
Response.WriteFile(strFilename);
HttpContext.Current.Response.End();
答案 1 :(得分:1)
您遇到的问题是Process.Start将在您的服务器上运行,因此文档不会在您的localhost上打开,而是在服务器上打开。
如果要打开存储在服务器上的文档,首先必须将其下载到本地计算机。 如果这不是一个选项,您可以创建用户可以在其浏览器中查看的文档预览。
如何创建预览取决于您要显示的文件类型。
对于一个简单的文本文件,您只需读取服务器上的文件并呈现字符串(确保执行一些Html Encoding!)
在我参与的项目中,我们还必须显示PDF和Word文件。我们最终使用了来自Aspose的商业产品。当用户将文件上传到服务器时,我们会立即通过Aspose处理文件,然后将结果缓存到文件系统上。
答案 2 :(得分:0)
您可以将iframe用于此目的,并将该路径设置为iframe源,如此
<iframe src="G:\dms\eg.text"></iframe>