如何解决使用ASP.NET网站中的File.CreateFile将文件插入Sql Server 2012 FileTable时访问被拒绝
这是一个权限问题。但是,权限不是通过NTFS授予的,而是通过sql Server授予的。
默认情况下,“应用程序池标识”对您的数据库没有任何权限,因此必须进行更改。
USE [master]
GO
CREATE LOGIN [IIS APPPOOL\myapppoolname] FROM WINDOWS WITH DEFAULT_DATABASE=[MyDatabase]
GO
USE [MyDatabase]
CREATE USER [MyUserName] FOR LOGIN [IIS APPPool\myapppoolname]
use [MyDatabase]
GRANT INSERT TO [MyUserName]
GRANT SELECT TO [MyUserName]
GRANT UPDATE TO [MyUserName]
我不确定这是否是所需的完整权限集,但我发现足以保存新文件就足够了。
解决方法
我有一个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或类似文件写入文件表。如果是这样,我该怎么做?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。