温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

使用SpringBoot怎么实现私有云网盘

发布时间:2021-05-31 17:31:15 来源:亿速云 阅读:195 作者:Leah 栏目:编程语言

这期内容当中小编将会给大家带来有关使用SpringBoot怎么实现私有云网盘,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

项目配置

项目在第三方插件进行二次开发,基于 SpringBoot 注解配置实现。

application.properties 配置:

# 执行类,内部调用,实现前端相关功能 file-manager.command=com.itstyle.cloud.common.elfinder.command file-manager.thumbnail.width=80 file-manager.volumes[0].Node= file-manager.volumes[0].source=fileSystem file-manager.volumes[0].alias=file # 文件存放目录,可以自定义 file-manager.volumes[0].path=D:/cloudFile file-manager.volumes[0]._default=true file-manager.volumes[0].locale= file-manager.volumes[0].constraint.locked=false file-manager.volumes[0].constraint.readable=true file-manager.volumes[0].constraint.writable=true

ElfinderConfiguration 读取配置:

@Component @ConfigurationProperties(prefix="file-manager") //接收application.properties中的file-manager下面的属性 public class ElfinderConfiguration {   private Thumbnail thumbnail;   private String command;   private List<Node> volumes;   private Long maxUploadSize = -1L;   //省略部分代码 }

elfinderStorageFactory 初始化 基础Bean:

@Configuration public class ElFinderConfig {   @Autowired   private ElfinderConfiguration elfinderConfiguration;   @Bean(name = "commandFactory")   public CommandFactory getCommandFactory() {     CommandFactory commandFactory = new CommandFactory();     commandFactory.setClassNamePattern(elfinderConfiguration.getCommand()+".%sCommand");     return commandFactory;   }   @Bean(name = "elfinderStorageFactory")   public ElfinderStorageFactory getElfinderStorageFactory() {     DefaultElfinderStorageFactory elfinderStorageFactory = new DefaultElfinderStorageFactory();     elfinderStorageFactory.setElfinderStorage(getElfinderStorage());     return elfinderStorageFactory;   }   @Bean(name = "elfinderStorage")   public ElfinderStorage getElfinderStorage() {     DefaultElfinderStorage defaultElfinderStorage = new DefaultElfinderStorage();     // creates thumbnail     DefaultThumbnailWidth defaultThumbnailWidth = new DefaultThumbnailWidth();     defaultThumbnailWidth.setThumbnailWidth(elfinderConfiguration.getThumbnail().getWidth().intValue());     // creates volumes, volumeIds, volumeLocale and volumeSecurities     Character defaultVolumeId = 'A';     List<Node> elfinderConfigurationVolumes = elfinderConfiguration.getVolumes();     List<Volume> elfinderVolumes = new ArrayList<>(elfinderConfigurationVolumes.size());     Map<Volume, String> elfinderVolumeIds = new HashMap<>(elfinderConfigurationVolumes.size());     Map<Volume, Locale> elfinderVolumeLocales = new HashMap<>(elfinderConfigurationVolumes.size());     List<VolumeSecurity> elfinderVolumeSecurities = new ArrayList<>();     // creates volumes     for (Node elfinderConfigurationVolume : elfinderConfigurationVolumes) {       final String alias = elfinderConfigurationVolume.getAlias();       final String path = elfinderConfigurationVolume.getPath();       final String source = elfinderConfigurationVolume.getSource();       final String locale = elfinderConfigurationVolume.getLocale();       final boolean isLocked = elfinderConfigurationVolume.getConstraint().isLocked();       final boolean isReadable = elfinderConfigurationVolume.getConstraint().isReadable();       final boolean isWritable = elfinderConfigurationVolume.getConstraint().isWritable();       // creates new volume       Volume volume = VolumeSources.of(source).newInstance(alias, path);       elfinderVolumes.add(volume);       elfinderVolumeIds.put(volume, Character.toString(defaultVolumeId));       elfinderVolumeLocales.put(volume, LocaleUtils.toLocale(locale));       // creates security constraint       SecurityConstraint securityConstraint = new SecurityConstraint();       securityConstraint.setLocked(isLocked);       securityConstraint.setReadable(isReadable);       securityConstraint.setWritable(isWritable);       // creates volume pattern and volume security       final String volumePattern = Character.toString(defaultVolumeId) + ElFinderConstants.ELFINDER_VOLUME_SERCURITY_REGEX;       elfinderVolumeSecurities.add(new DefaultVolumeSecurity(volumePattern, securityConstraint));       // prepare next volumeId character       defaultVolumeId++;     }     defaultElfinderStorage.setThumbnailWidth(defaultThumbnailWidth);     defaultElfinderStorage.setVolumes(elfinderVolumes);     defaultElfinderStorage.setVolumeIds(elfinderVolumeIds);     defaultElfinderStorage.setVolumeLocales(elfinderVolumeLocales);     defaultElfinderStorage.setVolumeSecurities(elfinderVolumeSecurities);     return defaultElfinderStorage;   } }

CloudDiskController 控制层实现:

@Controller @RequestMapping("elfinder/connector") public class CloudDiskController {   private static final Logger logger = LoggerFactory.getLogger(CloudDiskController.class);   public static final String OPEN_STREAM = "openStream";   public static final String GET_PARAMETER = "getParameter";   @Resource(name = "commandFactory")   private ElfinderCommandFactory elfinderCommandFactory;   @Resource(name = "elfinderStorageFactory")   private ElfinderStorageFactory elfinderStorageFactory;   @RequestMapping   public void connector(HttpServletRequest request, final HttpServletResponse response) throws IOException {     try {       response.setCharacterEncoding("UTF-8");       request = processMultipartContent(request);     } catch (Exception e) {       throw new IOException(e.getMessage());     }     String cmd = request.getParameter(ElFinderConstants.ELFINDER_PARAMETER_COMMAND);     ElfinderCommand elfinderCommand = elfinderCommandFactory.get(cmd);     try {       final HttpServletRequest protectedRequest = request;       elfinderCommand.execute(new ElfinderContext() {         @Override         public ElfinderStorageFactory getVolumeSourceFactory() {           return elfinderStorageFactory;         }         @Override         public HttpServletRequest getRequest() {           return protectedRequest;         }         @Override         public HttpServletResponse getResponse() {           return response;         }       });     } catch (Exception e) {       logger.error("Unknown error", e);     }   }   //省略部分代码 }

最后,前端页面引入:

<div id="elfinder"></div> <script type="text/javascript" charset="utf-8">     window.onload = function() {       elFinder.prototype.loadCss('/elfinder/jquery-ui-1.12.1.custom/jquery-ui.css');       $('#elfinder').elfinder({         url : '/elfinder/connector',         lang: 'zh_CN',         height : window.innerHeight-20,         commandsOptions: {           edit: {             editors : [               {                 info:{                   name:'编辑',                   urlAsContent: false                 },                 // ACE Editor                 // `mimes` is not set for support everything kind of text file                 load : function(textarea) {                   var self = this,                     dfrd = $.Deferred(),                     cdn = './elfinder/ace/',                     init = function() {                       if (typeof ace === 'undefined') {                         console.log(cdn);                         this.fm.loadScript([                           cdn+'/ace.js',                           cdn+'/ext-modelist.js',                           cdn+'/ext-settings_menu.js',                           cdn+'/ext-language_tools.js'                         ], start);                       } else {                         start();                       }                     },                     start = function() {                       var editor, editorBase, mode,                         ta = $(textarea),                         taBase = ta.parent(),                         dialog = taBase.parent(),                         id = textarea.id + '_ace',                         ext = self.file.name.replace(/^.+\.([^.]+)|(.+)$/, '$1$2').toLowerCase(),                         // MIME/mode map                         mimeMode = {                           'text/x-php'       : 'php',                           'application/x-php'    : 'php',                           'text/html'        : 'html',                           'application/xhtml+xml'  : 'html',                           'text/javascript'     : 'javascript',                           'application/javascript' : 'javascript',                           'text/css'        : 'css',                           'text/x-c'        : 'c_cpp',                           'text/x-csrc'       : 'c_cpp',                           'text/x-chdr'       : 'c_cpp',                           'text/x-c++'       : 'c_cpp',                           'text/x-c++src'      : 'c_cpp',                           'text/x-c++hdr'      : 'c_cpp',                           'text/x-shellscript'   : 'sh',                           'application/x-csh'    : 'sh',                           'text/x-python'      : 'python',                           'text/x-java'       : 'java',                           'text/x-java-source'   : 'java',                           'text/x-ruby'       : 'ruby',                           'text/x-perl'       : 'perl',                           'application/x-perl'   : 'perl',                           'text/x-sql'       : 'sql',                           'text/xml'        : 'xml',                           'application/docbook+xml' : 'xml',                           'application/xml'     : 'xml'                         };                       // set basePath of ace                       ace.config.set('basePath', cdn);                       // set base height                       taBase.height(taBase.height());                       // detect mode                       mode = ace.require('ace/ext/modelist').getModeForPath('/' + self.file.name).name;                       if (mode === 'text') {                         if (mimeMode[self.file.mime]) {                           mode = mimeMode[self.file.mime];                         }                       }                       // show MIME:mode in title bar                       taBase.prev().children('.elfinder-dialog-title').append(' (' + self.file.mime + ' : ' + mode.split(/[\/\\]/).pop() + ')');                       // TextArea button and Setting button                       $('<div class="ui-dialog-buttonset"/>').css('float', 'left')                         .append(                           $('<button>文本框</button>')                             .button()                             .on('click', function(){                               if (ta.data('ace')) {                                 ta.removeData('ace');                                 editorBase.hide();                                 ta.val(editor.session.getValue()).show().focus();                                 $(this).text('编辑器');                               } else {                                 ta.data('ace', true);                                 editorBase.show();                                 editor.setValue(ta.hide().val(), -1);                                 editor.focus();                                 $(this).text('文本框');                               }                             })                         )                         .append(                           $('<button>Ace editor setting</button>')                             .button({                               icons: {                                 primary: 'ui-icon-gear',                                 secondary: 'ui-icon-triangle-1-e'                               },                               text: false                             })                             .on('click', function(){                               editor.showSettingsMenu();                             })                         )                         .prependTo(taBase.next());                       // Base node of Ace editor                       editorBase = $('<div id="'+id+'" />').text(ta.val()).insertBefore(ta.hide());                       // Ace editor configure                       ta.data('ace', true);                       editor = ace.edit(id);                       ace.require('ace/ext/language_tools');                       ace.require('ace/ext/settings_menu').init(editor);                       editor.$blockScrolling = Infinity;                       editor.setOptions({                         theme: 'ace/theme/dawn',                         mode: 'ace/mode/' + mode,                         fontSize: '14px',                         wrap: true,                         enableBasicAutocompletion: true,                         enableSnippets: true,                         enableLiveAutocompletion: true                       });                       editor.commands.addCommand({                         name : "saveFile",                         bindKey: {                           win : 'Ctrl-s',                           mac : 'Command-s'                         },                         exec: function(editor) {                           self.doSave();                         }                       });                       editor.commands.addCommand({                         name : "closeEditor",                         bindKey: {                           win : 'Ctrl-w|Ctrl-q',                           mac : 'Command-w|Command-q'                         },                         exec: function(editor) {                           self.doCancel();                         }                       });                       editor.resize();                       dfrd.resolve(editor);                     };                   // init & start                   init();                   return dfrd;                 },                 close : function(textarea, instance) {                   if (instance) {                     instance.destroy();                     $(textarea).show();                   }                 },                 save : function(textarea, instance) {                   instance && $(textarea).data('ace') && (textarea.value = instance.session.getValue());                 },                 focus : function(textarea, instance) {                   instance && $(textarea).data('ace') && instance.focus();                 },                 resize : function(textarea, instance, e, data) {                   instance && instance.resize();                 }               }             ]           },           quicklook : {             // to enable preview with Google Docs Viewer             googleDocsMimes : ['application/pdf', 'image/tiff', 'application/vnd.ms-office', 'application/msword', 'application/vnd.ms-word', 'application/vnd.ms-excel', 'application/vnd.ms-powerpoint', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']           }         }       });     };   </script>

上述就是小编为大家分享的使用SpringBoot怎么实现私有云网盘了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI