1

在我开始挖掘之前,您能否告诉我是否可以使用 webmatrix 和 c# 执行以下操作。

目前我有一个带有许多<a href链接的纯 html 网站。每点击一次链接都会触发服务器上的“快捷方式文件”,然后打开一个外部程序。这是有效的,因为它是一个Intranet网站,并且该程序安装在每台计算机上。

“快捷方式文件”基本上是一个带有搜索参数的 .txt 文件(只是一个不同的结尾),一旦外部程序启动,就会在外部程序中执行。

这意味着我必须为每个链接创建一个快捷方式文件并将这些文件保存在我的磁盘上。目前这仍然是可维护的,但已经很烦人了。尤其是当我只需要更改一个参数(搜索字符串)时。

所以我想知道是否可以“即时”创建这个快捷方式文件并让它弹出“打开方式...”或网络浏览器的下载对话框。

由于我通常只需要更改搜索字符串,因此我可以将字符串放在我的 a 元素中,例如“title”属性,并在单击后获取该值来触发搜索过程。

<a href="search/linktomyfile.end" title="mySearchParameter">Additional Text</a>

这是此类文件的示例:

search
searchtext_val=
doc_type=mySearchParameter
text=
cat=hardcoded
subcat=hardcoded

在此示例中,我只需将doc_type作为参数处理,其他所有内容要么为空,要么为预定义。

我确信可以构建它,但我只能希望这是我可以处理的任务。

希望您能指出我的链接,甚至提供一些用于演示目的的示例。

先感谢您,

托尼

4

2 回答 2

2

也许您对如何在 C# 中实际写入文件感到困惑?

List<String> lineList = new List<String>();
lineList.Add("search");
lineList.Add("searchtext_val=");
lineList.Add("doc_type=customSearchParameter");
lineList.Add("text=");
lineList.Add("cat=hardcoded");
lineList.Add("subcat=hardcoded");

然后你需要制作文件(这个例子没有使用 GUID 命名文件,但是根据你的情况,如果你有多个用户同时运行这个程序,你可能需要这个)。

System.IO.File.Delete(Server.MapPath("~/folderInRootOfSite/example.txt")); //This will delete the file if found (in case there is a lingering old version of this file still out there). This will not throw an error if the file is not there, but will delete it if it is.
var outputFile = System.IO.File.AppendText(Server.MapPath("~/folderInRootOfSite/example.txt"));
foreach(var lineVal in lineList)
{
    outputFile.WriteLine(lineVal);
}
outputFile.Close(); //This line is so necessary that if you forget to include it, the process will not close and will even prevent some access to the file and will even prevent its deletion (saying something to the effect of "this file is open in another program, etc., etc., etc.").
//Now the file is saved in "~/folderInRootOfSite/example.txt".
//This is where you would have to either utilize this file from the server or perhaps write an html page and utilize JavaScript on the client-side, however, I'm not sure what functionality, if any, you will be able to use from the client-side (especially without ActiveX).
//Once you are done with whatever, don't forget to delete the file if you want it cleaned up after this process.
System.IO.File.Delete(Server.MapPath("~/folderInRootOfSite/example.txt"));

然后,如果您确实想使用来自服务器的默认关联程序执行它(服务器将是运行它的机器),请使用:

string filePath = Server.MapPath("~/folderInRootOfSite/example.txt");
System.Diagnostics.Process.Start(filePath);

但是,我怀疑这是否真的是您想要的。我听说您可以“将文件上传到浏览器”(当我阅读它时,我不确定它的措辞是否正确,但是......)但我不确定您是否可以这样做,该怎么做这个,或者任何关于这个的好的文档。

我意识到这可能无法完全解决您的问题,但是当您告诉我任何其他可能让您挂断的事情时,我很乐意在此答案中添加更多内容。

----------更新信息--------------

为了将浏览器的下载管理器用于您的文件,您需要做的就是在常规<a>标记中指定该文件的路径,如下所示:

<a href="/fileDirectory/file.doc">Click here for file download!</a>

这通常可以正常工作,但是,还有一件事需要考虑。大多数浏览器都为某些类型的文件内置了查看器(.pdfs 就是一个很好的例子),而不是使用下载管理器,只需在浏览器中打开要查看的文件。

但是,有几种方法可以强制下载管理器,我将从以下站点与您分享:http ://www.tipsandtricks-hq.com/forum/topic/force-a-file-to-download-而不是在浏览器中显示

浏览器如何处理文件下载 通常当用户访问文件 URL(例如:下载链接)时,如果浏览器支持该文件,该文件将显示在浏览器中。jpg、png、gif 等图像文件几乎总是会显示在浏览器中。zip、tar、gzip 等存档文件将始终被下载。某些文件类型会显示在某些浏览器中,但不会显示在其他浏览器中,具体取决于浏览器是否可以读取文件。例如,Internet Explorer (IE) 通常会尝试在浏览器中显示 Microsoft Word 文件(doc 和 docx),而大多数其他浏览器会下载它。Google Chrome 有自己的 PDF 转换器,它会尝试转换 PDF 文件并在浏览器中呈现。

要了解的关键是,某些浏览器可能能够根据您为该浏览器安装的插件读取特定文件类型,而其他浏览器可能无法读取。如果浏览器可以读取文件类型,它将在浏览器中显示。如果浏览器无法读取文件类型,它将强制下载到硬盘。通常这不是问题,因为用户可以在浏览器中显示文件后将其保存到计算机。

如何为我的所有文件强制下载文件 有些用户更喜欢强制下载所有文件(在浏览器中不显示)。您可以采取一些措施来确保这一点。

选项 1:最简单的解决方案是尽可能将您的文件(例如:PDF 文件、电影文件)放入 zip 文件中(如果您使用的是 PDF Stamper 插件,那么很遗憾您不能这样做)。浏览器无法读取 zip 文件,因此会强制下载。大多数计算机用户都知道解压缩文件并从内部获取内容。

选项 2:大多数浏览器都有一个设置,允许用户指定是否要强制下载某种类型的文件(例如:pdf 文件)。如果您认为这对他们有帮助,您可以指示您的用户使用此选项(同样这是常识,大多数互联网用户都知道这一点)。

选项 3:您可以在您的服务器的 .htaccess 文件中添加以下代码行,以强制从您的服务器下载特定文件类型(在此示例中,它适用于 PDF 文件类型):

<FilesMatch "\.(?i:pdf)$">
  ForceType application/octet-stream
  Header set Content-Disposition attachment
</FilesMatch>

您可以根据需要将“pdf”更改为任何其他文件类型(例如:doc)。

现在,话虽如此,似乎在您的示例中您使用了某种自定义文件扩展名(我认为),当然,任何浏览器都无法识别,因此您可能不需要做任何额外的事情设置<a>标签。然而,这个答案似乎简单了,所以我不确定这是否真的是你所追求的。

因此,如果我正确理解您的情况,您应该能够设置这样的标签,并在您的用户下载它之后,检查它的下载位置并使用 C# 执行这样的文件(您可能在某些时候需要 AJAX在此过程中,但如果不深入研究我不确定.我也不确定,因为用户可以控制文件保存硬盘驱动器上的位置,如何检查保存位置以备将来使用System.Diagnostics.Process.Start(filePath);)

此类信息的一个可能位置涉及简单地检测文件何时下载,但看起来相当复杂,而且,tbh,我不确定我是否完全能够完全理解所有这些,但无论如何这里有一个链接:检测浏览器何时接收文件下载

于 2013-08-12T15:18:57.280 回答
0

您当然可以使用网页动态生成一系列链接。一种方法是使用数据库或 XML 并以结构化格式存储变化的内容。然后您可以查询商店并循环浏览内容,随时输出链接:

foreach(var item in result){
    <a href="search/@item.Filename" title="@item.SearchParameter">@item.Text</a>
}

此示例假定 Filename、SearchParameter 和 Text 是可能因链接而异的元素。

有关在 ASP.NET 网页中管理数据的基础知识的更多信息,请阅读本教程:http ://www.asp.net/web-pages/tutorials/data/5-working-with-data

于 2013-08-08T08:29:29.143 回答