手机版

ASP.NET MVC5实现文件上传和地址变更处理(5)

时间:2021-09-08 来源:互联网 编辑:宝哥软件园 浏览:

1.文件上传和重复文件处理文件处理的原理是文件不保存在数据库中,只保存文件信息(哈希值等)。)保存在数据库中。一般来说,采用MD5对文件进行重命名就足以应对文件重复的问题,而强迫症可能会考虑将MD5与其他摘要算法结合使用。

公共静态字符串Save(https tedfilebase文件,字符串路径){ var root=' ~/Upload/' path '/';var phicyPath=hosting environment。MapPath(根);目录。create DIrectory(phicyPath);var fileName=Md5(文件。InputStream)文件。文件名。子字符串(文件。文件名. LastIndexOf(' . '));文件。另存为(phicyPath fileName);返回fileName}二。个人文件上传网站Logo、分类图标等场景需要通过个人文件上传进行处理。通过使用UIHintAttribute或者自定义继承自UIHintAttribute的特性,消除了文件上传前端逻辑的重复代码,使用统一视图文件处理。已经使用了Uplodify和AjaxFileUploader。前者存在flash依赖和cookie问题,后者基本已经过时。这里,我们使用KindEditor中的文件上传组件作为演示。支持IE6的非Flash解决方案核心是通过iframe上传伪AJax,核心是通过html表单post发布到服务器

公共类upload model {[display(name=' icon ')][ui hint(' upload ')]公共字符串图像{ get设置;}[Display(Name=' simple mode ')][ui hint(' editor ')][附加元数据(' use simple ',true)])公共字符串text1 { get设置;}[显示(名称='标准模式')] [uihint('编辑器')]公共字符串text2 { get设置;}}在我们的实际项目中,我们采用了继承UIHintAttribute的方式,其中path path指定了存储的低级地址,还有类似的DropDownAttribute、EditorAtrribute等。仅供参考。

[属性用法(属性目标。属性)])公共类UploadAttribute : uihintaattribute,IMetadataAware {公共字符串Path { get私有集;} public UploadAttribute(字符串路径='') : base('Upload') { this。Path=路径;} public virtual void onmetadata created(model metadata元数据){ metadata。添加值。添加('路径',这个。路径);} }

Razor:在Shared中添加EditorTemplates文件夹,创建Upload.cshtml文件。

脚本KindEditor.ready(函数(K){ var editor=K . editor({ allowfilemanager : false,allowImageUpload: true,formatUploadUrl: false,uploadJson: ' @ url ',});K('#[emailprotected]')。单击(function(){ editor . loadplugin(' insert file '),function(){ editor . plugin . file dialog({ fileurl :K(' # @ id ')。val(),点击Fn:函数(url,title) { K('#@id ')。val(URL);$('#[emailprotected]')。attr('src ',URL);editor . HideDialog();} });});});});$('#[emailprotected]')。单击(function () { $('#@id '))。attr('value ',' ');$('#[emailprotected]')。attr('src ',' @Url。内容(' ~/Images/default . png ');});/脚本三。编辑器中文件上传编辑器中文件上传和单个文件上传的主要区别是上传后返回值的处理。编辑需要在编辑位置插入url。编辑器已经使用了CKeditor和UMeditor,这两个都需要我修改源代码来处理路径问题。如果不能方便的查看调整后的编辑器,就像类库不能扩展自定义配置一样,我个人认为不是一个好的编辑器。KindEditor仍被用作演示。编辑器的

脚本类型='text/javascript' var编辑器;KindEditor.ready(函数(K){编辑器=K . create('文本区域[名称=' @ Html .idformmodel()']',{ resizeType: 1,allowPreviewEmoticons: false,allowImageUpload: true,uploadJson: ' @ UploadManager .UploadUrl '、formatUploadUrl: false、allowfilemanager : false @ if(useSimple){ text、items: [ 'fontname '、' fontsize '、|、' forecolor '、' hilitecolor '、' bold '、' italic '、'下划线、“removeformat”、“|”、“justifyleft”、“justifycenter”、“justifyright”、“insertorderedlist”、“|”、表情符号、“图像”、“链接”]/文本});});/script四。处理文章中的图片路径重头戏来了,这个看似问题可以回避,其实真的无法回避。更换目录、域名和端口,使用子域名或其他域名作为图片服务器等等,这些情况让我们必须处理好这个问题,否则日后会浪费更多的时间。这不是小问题,打开支持插入图片的各个网站的编辑器,查看一下图片的路径,大多是绝对全球资源定位器(统一资源定位符)的,又或者只基于根目录的。如果你以产品的形式提供给客户,更不可能要求客户自己挨个替换文章中的路径了。

1.在数据库中不存储文件路径,使用统一资源定位器路径作为存储。

2.使用超文本标记语言库元素解决相对路径的引用问题。

就是基础元素,可能有的人认为这个基础可有可无,但在处理图片路径的问题上,没有比基础更简洁更优雅的方案了。至少我没有也没找到过。其实可以把全部的静态资源都移除到外部存储,如果你需要。在测试时,我们切换回使用本地存储。

@{ var baseUrl=UploadManager .UrlPrefix}!DOCTYPE html html head meta charset=' utf-8 '/meta name=' viewport ' content=' width=device-width,initial-scale=1.0 ' link href=' ~/fav icon。ico ' rel='快捷图标type=' image/x-icon '/title@ViewBag.Title/title base href=' @ base URL '/script src=' http : ~/Scripts/jquery-1。11 .2 .量滴js '/script @ render部分(' head ',false)/head dy @ render五。处理上传地址的变化我们需要独立的图片服务器处理上传或者使用第三方的图片存储服务时,我们的上传地址改变了,如果刚刚提到的图片路径一样,因此我们将上传路径和图片路径都采取配置的方式方便更改,我们就曾经切换到又拍云又切换到自有的服务器。在我的实际使用时配置在数据中使用时采用缓存。为了便于演示我们直接使用配置文件。

首先定义配置文件的处理程序

公共类UploadConfig : iconfigtionsectionhandler {公共对象创建(对象父,对象配置上下文,系统Xml。XmlNode节){ var config=new UploadConfig();var urloadUrlNode=section .选择单个节点(' UploadUrl ');if (urloadUrlNode!=空urloadUrlNode .属性!=空urloadUrlNode .属性['href']!=null) { config .上传网址=转换ToString(urloadUrlNode .属性['href'].价值);} var urlPrefixNode=section .选择单个节点(“网址前缀”);if (urlPrefixNode!=空urlPrefixNode .属性!=空urlPrefixNode .属性['href']!=null) { config .网址前缀=转换ToString(urlPrefixNode .属性['href'].价值);}返回配置;}公共字符串UploadUrl { get私有集;}公共字符串UrlPrefix { get私有集;} }在网络。配置中配置

配置部分节名称="上传配置"类型="simplefile manager ".上传配置,简单文件管理器需要权限=' false '/配置部分上传配置上传网址href=' ~/文件/上传/'/网址前缀href=' ~/上传/'//上传配置使用上传管理缓存和管理配置

公共静态类上传管理器{私有静态字符串上传网址私有静态字符串URL前缀静态UploadManager(){ var config=配置管理器.GetSection('上传配置')作为UploadConfigvar url=配置!=null!字符串IsNullOrEmpty(配置上传网址)?配置。上传网址: ' ~/文件/上传;上传网址=网址.开始于(' ~ ')?上传助手.geturlformvisualpath(URL): URL;定义变量前缀=配置!=null!字符串IsNullOrEmpty(配置. UrlPrefix)?配置. URL前缀: ' ~/Upload ';URL前缀=前缀。开始于(' ~ ')?上传助手.GetUrlFromVisualPath(前缀):前缀;}公共静态字符串上传网址{获取{返回上传网址} }公共静态字符串URL prefix { get { return URl prefix } } }文件混杂的Md5、返回值的Json处理、完整统一资源定位器的生成和文件的保存这些具体技术的依赖为了便于演示,统一放置在上传助手中,因为这些不是重点。实际应用中可以采取接口隔离并通过国际奥委会注入的方式解耦。

以上就是ASP .净MVC5如何实现文件上传与地址变化处理的全部过程,希望对大家的学习有所帮助。

版权声明:ASP.NET MVC5实现文件上传和地址变更处理(5)是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。