当前位置: 首页 > 面试题库 >

使用ASP.NET网站中的File.CreateFile将文件插入Sql Server 2012 FileTable时访问被拒绝

丌官玺
2023-03-14
问题内容

我有一个ASP.NET网站。我想将文件上传到网站并将其保存到SqlServer 2012中的FileTable中。

上传后,我的网站代码包含一个Stream对象,我想使用该对象保存

System.IO.File.Create()

当我转到Windows时,可以在Windows资源管理器中访问FileTable。

\\ComputerName\FileStremShareName\FileStreamDirectoryName\FileTableName

我可以使用Windows资源管理器在此文件夹中手动创建文件。我还可以使用SQL将文件插入到File表中。在这两种情况下,Windows资源管理器和SQL
Server均按预期显示文件。

但是,如果我尝试使用System.IO.File.CreateFile在路径中创建文件,例如

File.Create(\\\\ComputerName\FileStremShareName\FileStreamDirectoryName\FileTableName\myfile.jpg)

我收到消息“拒绝访问路径’[path]’”

我认为这是因为我的IIS应用程序池标识无权读取/写入此位置。

通常,我将进入NTFS权限并为“标识”帐户分配“读/写”访问权限,但由于基础文件夹对我而言是隐藏的,因此我无法执行此操作。

我考虑过将Stream对象转换为字节数组,然后使用SQL将其插入FileTable中,但这似乎效率不高,因为我必须先将流转换为字节数组,然后才能将其传递给SQL。好像我在两次解析文件数据以保存一次。

是否可以在ASP.NET网站中使用File.Create或类似文件写入文件表。如果是这样,我该怎么做?


问题答案:

这是一个权限问题。但是,权限不是通过NTFS授予的,而是通过SQL Server授予的。

默认情况下,“应用程序池标识”对您的数据库没有任何权限,因此必须进行更改。

  1. 将用于您网站的应用程序池标识的登录名添加到SQL Server。例如“ IIS APPPool \ MyAppPool”
USE [master]
GO
CREATE LOGIN [IIS APPPOOL\myapppoolname] FROM WINDOWS WITH DEFAULT_DATABASE=[MyDatabase]
GO
  1. 将一个用户添加到您的数据库中,此登录名将使用该用户
USE [MyDatabase]
CREATE USER [MyUserName] FOR LOGIN [IIS APPPool\myapppoolname]
  1. 向用户授予数据库相关权限
use [MyDatabase]
GRANT INSERT TO [MyUserName]
GRANT SELECT TO [MyUserName]
GRANT UPDATE TO [MyUserName]

我不确定这是否是所需的完整权限集,但我发现足以保存新文件就足够了。



 类似资料:
  • 问题内容: 我在FoxPro 6.0命令窗口中使用SQL命令,并遇到“文件访问被拒绝”。 我的SQL命令是: 情况: Windows 7专业版 FoxPro 6.0 main.dbf被共享给许多用户。 main.dbf不是 隐藏的 ,也不是 只写 任何意见将不胜感激! 问题答案: 此DBF文件位于共享驱动器上吗?如果是这样,则另一个用户可能使文件打开了“排他”,或者您正试图打开文件“排他”。默认状

  • 问题内容: 我在使它工作时遇到问题。它接收一个字符串,其中包含几条信息。但是,当我尝试将String写入文件以跟踪程序随时间的变化时,我收到拒绝访问错误: 叠层纱 完整的堆栈跟踪: 58行: 问题答案: 您必须先创建文件夹。但是您不能调用file.mkdirs()-您需要调用file.getParentFile()。mkdirs()-否则,您将使用文件名创建一个文件夹(这将阻止您使用以下命令创建文

  • 问题内容: 我一直在这个问题上苦苦挣扎,因为我是Struts2开发的新手,最近才开始使用此命名Convention Plugin。 我正在尝试创建一个简单的webapp,起初仅包含两个页面: 登录页面(login.jsp) 主页(home.jsp) 首先,向用户显示一个登录页面,如果提供了正确的用户名和密码,他们将登录并重定向到主页。 我已经成功地创建了小型Web应用程序,写下了自定义登录拦截器,

  • 所以我试着从android设备写一个文件到windows共享文件夹。我使用的是最新版本的JCIFS和代码,显示可用的网络共享工作良好。所以我假设JCIFS和我的LAN、WiFi等都没问题。这里是文件上传的代码(实际上我只想写一个文本到文件中): 因为url是记录的,所以我确信它是正确的(我也使用上面提到的代码检查了url,它会浏览文件夹的包含)。 但问题是Im总是得到相同的: 共享没有密码保护,所

  • 问题内容: 有些脚本只能通过ajax使用,并且我不希望用户直接从浏览器运行这些脚本。我使用jQuery进行所有ajax调用,并将所有ajax文件保存在名为ajax的文件夹中。 因此,我希望创建一个htaccess文件来检查ajax请求(HTTP_X_REQUESTED_WITH)并拒绝该文件夹中的所有其他请求。(我知道可以伪造http标头,但我想不出更好的解决方案)。我尝试了这个: ReWrite

  • 问题内容: 我的Ant构建中弹出一个奇怪的错误。构建的工作方式如下:build.xml调用一个新的buildTargets.xml文件,并且该文件中的大多数工作都已完成。buildTargets.xml在gwt- out / htdocs / 和另一个目录临时目录/ htdocs / 中创建了一堆新文件。基本上,文件是在gwt-out / htdocs中创建的,然后将其复制到staging / h