我一直在寻找各地寻找答案,但没有找到答案。
我的ASP.NET Web表单首先将用户输入保存到xml文件到服务器,然后在本地将服务器文件下载到用户,但我希望文件只保存在用户的计算机上,而不是服务器上。我已经弄清楚如何从服务器下载xml到用户的机器,但我不想这样做,因为连接是一个问题。我希望用户访问Web表单,输入值,然后让程序在用户的计算机上本地保存文件。这是我的代码到目前为止保存文件...
DateTime todaysDate = DateTime.Today;
string fileName = Regex.Replace(userName, @"'", "") + "_" + todaysDate.ToString("yyyy_MM_dd") + ".xml";
new XDocument(
new XElement("NewUser",
new XElement("userName", Regex.Replace(userName, @"'", "")),
new XElement("Role", Regex.Replace(Role, @"'", "")),
new XElement("Title", Regex.Replace(Title, @"'", "")),
new XElement("Location", Regex.Replace(Location, @"'", "")),
new XElement("DocumentSecurity", Regex.Replace(DocumentSecurity, @"'", ""))
)
)
.Save("C:\\" + fileName);
String FilePath = "C:\\" + fileName;
System.Web.HttpResponse response = System.Web.HttpContext.Current.Response;
response.ClearContent();
response.Clear();
response.ContentType = "text/plain";
response.AddHeader("Content-Disposition", "attachment; filename=" + fileName + ";");
response.TransmitFile(FilePath);
response.Flush();
response.End();
答案 0 :(得分:1)
我认为由于安全性,无法将客户端(浏览器)上的文件存储到光盘。您可以执行此操作的唯一方法是将XML发送到服务器,将其保存在临时文件(或内存流)中以及提供用户下载结果的链接之后。
答案 1 :(得分:1)
“我希望用户访问Web表单,输入值,然后让程序在用户的计算机上本地保存文件。这是我的代码到目前为止保存文件......” 您曾经要求的可能性。它是如此容易被滥用,因此容易出错,它被删除而没有更换。不过,那些生活在那个时代的人都会错过它们。
关于它做什么和不做什么的最终权威是浏览器本身。您可以很好地保存一个cookie,但它可能只是说“不”,而且您无法做到这一点。这只是因为我们知道替代方案的导向。我们学到了很多东西。
像你的目标这样的东西是可能的,但不是没有一个让步或其他让步:
您可以让客户端下载/上传带有输入数据的xml文件到您的Webformular。通常的下行和上传对话框适用,用户活动适用。如果在某种程度上不可能在服务器上保存,那么“电子政务”的一些平均应用程序会使用这种方法。使用内存流和XML类,Web服务器端没有任何实际的文件系统访问权限。
或者,您可以在用户端拥有应用程序。这可以是普通的桌面应用程序,Appstore应用程序,ClickOnce部署*甚至Java程序*。主要的是您有一个客户程序,用户允许进入计算机,因此至少具有读/写用户配置文件夹的权限。
当然,您也不需要直接将XML存储到磁盘上。如果你有一个数据库,那么你也可以保存它。 XML最终只是一种文本格式。像HTML一样的标记语言。所以它适用于任何VARCHAR列。在您选择的DBMS中甚至可能存在特殊的XML类型。
*我不是100%确定那些实际上可以随机写的。这可能是易于部署的权衡之一。