如何提示用户从Sharepoint页面输入保存位置?

本文关键字:输入 保存 位置 Sharepoint 何提示 提示 用户 | 更新日期: 2023-09-27 18:03:35

我在这里有一个相关的问题,我试图创建一个链接到保存文件的位置(其中的位置和文件名被照顾的用户)。不幸的是,由于路径访问拒绝(如上面的链接中的更新4所述),链接无法打开文件。

如果可能的话,我真正想做的是提示用户保存位置(不需要他们输入输入文本元素,如"C:'Bla'Blee");不过,我不认为我可以在Sharepoint页面上使用久经考验但不太正确的FileSaveDialog。

是否有任何替代方案或变通方法,以便I 可以提示用户输入位置?

更新

我不认为这将工作,试图保存生成的文件客户端,因为它是生成(通过iTextSharp)服务器端。

更新2

通过创建到文件的链接(正如我所做的,如图所示),我可以右键单击该链接并选择"Save Taget as…",然后这样做(出现一个"Save as"对话框,我可以将文件保存在我想要的任何地方)。在这种情况下,必须有一种方法以编程方式调用相同的对话框,这样用户就不必右键单击,然后选择菜单项("将目标保存为…"),他们可以简单地将链接和弹出的"另存为"对话框混合在一起。

那么我如何调用那个明显可调用的对话框来响应链接点击呢?

如果看到"Total and Payment Total不匹配;必须重新显示表单(使"show_sections()"函数并在保存按钮运行后调用它)?

如何提示用户从Sharepoint页面输入保存位置?

我浏览了你的其他问题,我只是想确保我们清楚一些事情。

(如果这里有什么是盲目明显的请原谅我,我不想侮辱,我只是想确保我们在同一页 首先,客户端和服务器。任何服务器端都在用户帐户上下文中运行,并且相对于它在上运行的机器是的。如果你说"保存到桌面"使用服务器端代码,那么这就是服务器本地进程的桌面,这几乎没有任何意义。但是,如果您要模拟登录的用户,除了将其保存到服务器上的登录用户的桌面之外,这可能有效。如果客户机和服务器在同一台机器上运行,并且您正在模拟客户机,那么这实际上可能完全有效。也许。

第二,右键单击,另存为。当您右键单击链接时,您正在调用浏览器内置的专有菜单系统。该系统是特定于浏览器和/或操作系统的,并且没有在任何规范中定义。在90年代,你可能已经能够使用VBScript来"发送键"。用ie浏览器"点击";但那些日子早已一去不复返了。与此最接近的现代等效方法是编写一个我认为你不想做的插件(并且是特定于浏览器和/或操作系统的)。

第三,MIME类型。一般来说,每个HTTP响应都包含一个MIME类型,用于指定服务器发送字节的意图。包括text/htmlapplication/pdf。当服务器端代码(ASP.Net)没有被调用时,例如像图像和CSS这样的静态文件,甚至像PDF这样的预生成文件,服务器(IIS)会在列表中查找文件扩展名,以确定要发送的MIME类型。在客户端,浏览器使用MIME类型来确定要采取的操作。如果它是text/html,它(可能)渲染HTML。如果是application/pdf,则浏览器查看 MIME类型列表,以查看是否有任何应用程序注册了该MIME类型。大多数现代浏览器都有内置的PDF渲染器,因此浏览器只需将字节传递给该渲染器即可。如果浏览器没有意识到这个MIME,它可能会询问操作系统是否知道这个MIME,是否有一个注册的处理程序可用,如果有,它就通过这个处理程序。如果这些都失败了(可能是因为像我这样的用户禁用了特定的MIME类型),那么浏览器要么只是将这些字节放入"下载";文件夹,它会尝试将这些字节解释为文本,或者提示保存。

再深入一点,根据HTTP规范(19.5.1第3段),如果你发送的MIME类型是application/octet-stream,除了Content-Disposition: attachment; filename="fname.ext"的报头,那么

隐含的建议是用户代理不应该显示响应,而应该直接输入"save response ?为…"对话框。

这是你最终想要达到的,对吗?

在您的示例中,单击PDF链接绕过ASP。Net和IIS只是查找文件并发送application/pdf MIME类型。一种修复方法是从系统中注销PDF文件扩展名。然而,这可能不是最便携的解决方案。同样,你也可以将文件扩展名更改为application/octet-stream,你(可能)会得到另存为对话框。

我认为强制另存为对话框的最佳选择是创建某种类型的服务器端处理程序,该处理程序将MIME类型和内容处置头强制到流中,然后传递文件的原始字节。您可以通过几种方式做到这一点,可能使用IHttpHandler(这里可能更好)或可能仅使用单个ASPX页面来检查查询字符串。您将需要执行一些额外的安全性,当然确保不允许在文件名中使用类似路径的字符和命令。