package com.iplatform.file.config; import com.iplatform.base.config.FileProperties; import com.iplatform.core.PlatformConfiguration; import com.iplatform.file.FileEngineFactory; import com.iplatform.file.FileStoreCallback; import com.iplatform.file.service.FileServiceImpl; import com.iplatform.file.support.AliOssFileEngine; import com.iplatform.file.support.AttachmentJdbcCallback; import com.iplatform.file.support.AwsOssFileEngine; import com.iplatform.file.support.DefaultFileSystemEngine; import com.iplatform.file.support.DefaultFtpFileEngine; import com.iplatform.file.support.QnOssFileEngine; import com.iplatform.file.support.TxOssFileEngine; import com.walker.file.FileStoreType; import com.walker.file.ftp.FtpConfig; import com.walker.infrastructure.arguments.ArgumentsManager; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class FileConfig extends PlatformConfiguration { /** * 配置一个文件引擎工厂对象。 * @param ftpFileEngine * @param fileSystemEngine * @return * @date 2023-02-14 * @date 2023-07-03 添加属性:remoteAsLocal 应对本地测试没有FTP、OSS远程环境的情况。 */ @Bean public FileEngineFactory fileEngineFactory(DefaultFtpFileEngine ftpFileEngine, DefaultFileSystemEngine fileSystemEngine , QnOssFileEngine qnOssFileEngine, TxOssFileEngine txOssFileEngine, AliOssFileEngine aliOssFileEngine , AwsOssFileEngine awsOssFileEngine , ArgumentsManager argumentsManager, FileProperties fileProperties){ FileEngineFactory fileEngineFactory = new FileEngineFactory(); fileEngineFactory.register(FileStoreType.Ftp, ftpFileEngine); fileEngineFactory.register(FileStoreType.FileSystem, fileSystemEngine); fileEngineFactory.register(FileStoreType.OssQiNiu, qnOssFileEngine); fileEngineFactory.register(FileStoreType.OssTx, txOssFileEngine); fileEngineFactory.register(FileStoreType.OssAli, aliOssFileEngine); // 2023-12-13 fileEngineFactory.register(FileStoreType.OssAws, awsOssFileEngine); fileEngineFactory.setArgumentsManager(argumentsManager); fileEngineFactory.setRemoteAsLocal(fileProperties.isRemoteAsLocal()); fileEngineFactory.startup(); return fileEngineFactory; } /** * 创建:OSS服务引擎。 * * @param fileProperties * @param fileStoreCallback * @return * @date 2023-12-13 */ @Bean public AwsOssFileEngine awsOssFileEngine(FileProperties fileProperties, FileStoreCallback fileStoreCallback) throws Exception { AwsOssFileEngine engine = new AwsOssFileEngine(); engine.setPrefix(fileProperties.getOssPrefix()); engine.setFileStoreCallback(fileStoreCallback); engine.setAccessKey(fileProperties.getOssAccessKey()); engine.setSecretKey(fileProperties.getOssSecretKey()); engine.setEndpoint(fileProperties.getOssEndpoint()); engine.setBucketName(fileProperties.getOssBucketName()); engine.initS3Client(); logger.info(".............. OSS 初始化: 亚马逊S3!"); return engine; } /** * 阿里云 OSS 文件引擎定义。 * @param fileProperties * @param fileStoreCallback * @return * @date 2023-06-09 */ @Bean public AliOssFileEngine aliOssFileEngine(FileProperties fileProperties, FileStoreCallback fileStoreCallback){ AliOssFileEngine engine = new AliOssFileEngine(); engine.setFileRoot(fileProperties.getFileRoot()); engine.setFileStoreCallback(fileStoreCallback); return engine; } /** * 腾讯 OSS 文件引擎定义。 * @param fileProperties * @param fileStoreCallback * @return * @date 2023-06-09 */ @Bean public TxOssFileEngine txOssFileEngine(FileProperties fileProperties, FileStoreCallback fileStoreCallback){ TxOssFileEngine engine = new TxOssFileEngine(); engine.setFileRoot(fileProperties.getFileRoot()); engine.setFileStoreCallback(fileStoreCallback); return engine; } /** * 七牛云 OSS 文件引擎定义。 * @param fileProperties * @param fileStoreCallback * @return * @date 2023-06-09 */ @Bean public QnOssFileEngine qnOssFileEngine(FileProperties fileProperties, FileStoreCallback fileStoreCallback){ QnOssFileEngine engine = new QnOssFileEngine(); engine.setFileRoot(fileProperties.getFileRoot()); engine.setFileStoreCallback(fileStoreCallback); return engine; } /** * 本机文件系统 实现的文件管理引擎。 * @param fileProperties * @param fileService * @return * @date 2023-02-14 */ @Bean public DefaultFileSystemEngine defaultFileSystemEngine(FileProperties fileProperties, FileServiceImpl fileService){ DefaultFileSystemEngine fileSystemEngine = new DefaultFileSystemEngine(); fileSystemEngine.setFileRoot(fileProperties.getFileRoot()); fileSystemEngine.setFileStoreCallback(this.fileStoreCallback(fileService)); return fileSystemEngine; } /** * Ftp 实现的文件管理引擎 * @param ftpProperties * @param fileService * @return * @date 2023-02-14 */ @Bean public DefaultFtpFileEngine defaultFtpFileEngine(FtpProperties ftpProperties, FileServiceImpl fileService){ FtpConfig ftpConfig = new FtpConfig(); ftpConfig.setIp(ftpProperties.getIp()); ftpConfig.setPort(ftpProperties.getPort()); ftpConfig.setUserName(ftpProperties.getUserName()); ftpConfig.setPassword(ftpProperties.getPassword()); ftpConfig.setPrivateKey(ftpProperties.getPrivateKey()); DefaultFtpFileEngine ftpFileEngine = new DefaultFtpFileEngine(); // ftpFileEngine.setFileRoot(fileProperties.getFileRoot()); ftpFileEngine.setFileRoot(ftpProperties.getFileRoot()); ftpFileEngine.setFtpConfig(ftpConfig); ftpFileEngine.setFileStoreCallback(this.fileStoreCallback(fileService)); return ftpFileEngine; } @Bean public FtpProperties ftpProperties(){ return new FtpProperties(); } // /** // * 放在 base spi 中配置。 // * @return // */ // @Bean // public FileProperties fileProperties(){ // return new FileProperties(); // } /** * 配置文件上传记录写入的回调实现。 * @param fileService * @return * @date 2023-02-14 */ // @Bean // public JdbcCallback fileStoreCallback(FileServiceImpl fileService){ // JdbcCallback jdbcCallback = new JdbcCallback(); // jdbcCallback.setFileService(fileService); // return jdbcCallback; // } /** * 配置新的附件保存回调对象,废弃老对象:JdbcCallback * @param fileService * @return * @date 2023-06-05 */ @Bean public AttachmentJdbcCallback fileStoreCallback(FileServiceImpl fileService){ AttachmentJdbcCallback jdbcCallback = new AttachmentJdbcCallback(); jdbcCallback.setFileService(fileService); return jdbcCallback; } }