在我开始挖掘之前,请告诉我是否可以使用webmatrix和c#进行以下操作。
目前我有一个简单的html网站,其中包含许多<a href
个链接。点击后,每个链接都会在服务器上触发“快捷方式文件”,然后打开外部程序。这是有效的,因为它是一个 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 作为参数处理,其他所有内容都为空或预定义。
我确信有可能建立这个,但我只能希望这是我能够处理的任务。
希望您能指出我的链接,甚至提供一些示例用于演示目的。
提前谢谢你,
贝
答案 0 :(得分: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);
然而,我发现这真的是你想要的,这令人怀疑。我听说你可以将文件上传到浏览器&#34; (我不确定它是否措辞正确,当我阅读它时,但是......)但我不确定你是否可以这样做,如何做到这一点,或者有什么好的文件在这上面。< / p>
我意识到这可能不会完全解决你的问题,但我很乐意在你告诉我任何其他可能让你失望的事情时更多地回答这个问题。
----------更新信息--------------
为了将浏览器的下载管理器用于您的文件,您需要做的就是在常规<a>
标记中找到所述文件的路径,如下所示:
<a href="/fileDirectory/file.doc">Click here for file download!</a>
这通常会正常工作,但还有一件事需要考虑。大多数浏览器都内置了某些类型文件的查看器(.pdf
是一个很好的例子),它不会使用下载管理器,而只是打开要在浏览器中查看的文件。
有几种方法可以强制下载管理器,但我将从以下网站与您分享:http://www.tipsandtricks-hq.com/forum/topic/force-a-file-to-download-instead-of-showing-up-in-the-browser
浏览器如何处理文件下载通常当用户访问时 文件URL(例如:下载链接),文件将显示在 浏览器是否支持浏览器。图像文件,如jpg,png,gif 几乎总会在浏览器中显示。档案文件,如zip, 始终会下载tar,gzip等。某些文件类型显示在 一些浏览器,但不是其他浏览器,取决于浏览器是否可以读取 文件与否。例如,Internet Explorer(IE)通常会尝试 在大多数情况下,在浏览器中显示Microsoft Word文件(doc和docx) 其他浏览器将下载它。谷歌浏览器有自己的PDF 转换器,它将尝试转换PDF文件并在其中呈现它 浏览器。
要理解的关键是某些浏览器可能能够阅读 特定的文件类型,基于您为其安装的插件 浏览器,而其他人可能无法。如果浏览器可以阅读 它将在浏览器中显示它的文件类型。如果浏览器无法读取 文件类型会强制下载到硬盘。通常这是 不是问题,因为用户可以将文件保存到那里的电脑 它显示在浏览器中。
如何为所有文件强制下载文件有些用户更喜欢这样 应强制下载所有文件(不在浏览器中显示)。 您可以采取一些措施来确保这一点。
选项1:最简单的解决方案是放置文件(例如:PDF 文件,电影文件)如果可能的话,在zip文件中(如果你正在使用 PDF Stamper插件然后你不能这样做)。浏览器 无法读取zip文件,因此会强行下载。大多数电脑用户 知道要解压缩文件并从内部获取内容。
选项2:大多数浏览器都有允许用户使用的设置 指定是否要强制下载某种类型的文件(for 例如:pdf文件)。您可以指示您的用户使用此选项 如果你认为它会对他们有所帮助(这也是常识和知识 大多数互联网用户都知道这一点。)
选项3:您可以在.htaccess中添加以下代码行 服务器的文件,强制从中下载特定的文件类型 你的服务器(在这个例子中是PDF文件类型):
<FilesMatch "\.(?i:pdf)$">
ForceType application/octet-stream
Header set Content-Disposition attachment
</FilesMatch>
您可以更改&#34; pdf&#34;根据您的需要任何其他文件类型 (例如:doc)。
现在,已经说过了,在您的示例中,您似乎使用了某种自定义文件扩展名(我想想),当然,任何浏览器都无法识别,所以在设置<a>
标记后,您可能不需要做任何额外的事情。然而,这个答案似乎很容易 ,所以我不确定这是否真的是你在追求与否之后。
所以,如果我理解你的情况,你应该能够设置这样一个标签,在你的用户下载之后,检查下载到哪里并用C#执行这样的文件(你可能需要AJAX)在这个过程中的某个时刻,但是我不确定没有深入研究。我也不确定,因为用户可以控制 在他们的硬盘驱动器上保存文件,如何使用System.Diagnostics.Process.Start(filePath);
)
此类信息的一个可能位置涉及在文件下载时只检测,但看起来相当复杂,而且,我不确定我是否完全处于完全水平了解所有这些,但无论如何这里有一个链接:Detect when browser receives file download
答案 1 :(得分: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