leo*_*ora 9 asp.net-mvc image-uploading ckeditor asp.net-mvc-3
我有一个我的网站的管理部分,其中"作者"可以上传照片库等图片等文件,以便稍后包含在我网站的动态内容部分中.我有一些页面,其中html本身存储在mySQL数据库中,用户可以使用ckeditor接口编辑内容.
我试图看看是否有一些东西可以将文件保存到正确的目录并在以后检索它们或者我应该从头开始编写.此外,寻找经验教训和注意事项(安全等).
Tom*_*mmy 10
我会捅这个.我们拥有的应用程序与我们做了类似的事情,我们做了"滚动我们自己的事情".用户可以通过我们的应用程序界面上传文件(图像,文档等),这些文件具有用户/公司/角色敏感权限.为了缓解一些安全问题以及其他一些原因,我们实施了以下措施.
在Web应用程序中,我们创建了一个"Assets"文件夹,用于存储所有用户生成的内容.然后,我们使用子文件夹来帮助细分内容(徽标,文件等).
在web.config中,我们将此文件夹配置为无法从浏览器访问(如App_Data或bin文件夹一样),并带有以下行(我们这样做是为了确保不能直接从浏览器访问这些文件.更多关于第4点):
<system.webServer>
<security>
<requestFiltering>
<hiddenSegments>
<add segment="Assets"/>
</hiddenSegments>
</requestFiltering>
</security>
Run Code Online (Sandbox Code Playgroud)
上传文件后,我们会将有关文件的相关信息存储在数据库中(类型,大小,名称,注释).这也允许我们将角色和用户安全信息关联到文件中.
为了检索文件,我们实现了一个控制器,其中包含一组操作,这些操作获取所请求的文件名和用户信息(因为您必须登录)并从Assets文件夹返回文件.对于最终用户来说,看起来所有文件都存储在/ Files/Docs/FileID或类似的东西中,但实际上这只是文件本身的前端"看门人".如果您未获得授权或请求错误文件,则此控制器/操作方法将返回404.对于文件命名,我们只生成GUID并将文件命名为"GUID.relevantExtension"(检查一个文件不存在)
我想从经验教训或诸如此类的东西,最重要的是你不直接公开文件,特别是如果用户不共享内容.此外,这可能是个人偏好,如果不小心可能会开始一场战争,我在数据库中存储文件并不大,这似乎会导致分页和缓存性能问题(不是谈论SQL 2008文件列).希望这可以帮助!
编辑 - 另外考虑这样做,从VS发布时要注意.这些上传的文件不是您的解决方案的一部分,如果您执行删除上传类型发布,您将为您的用户文件打蜡.只是提醒一下(在那里:/)