armazenamento de arquivo x.dromara.org | armazenamento de arquivo x.xuyanwu.cn |
Uma linha de código armazena arquivos localmente, FTP, SFTP, WebDAV, Alibaba Cloud OSS, Huawei Cloud OBS, Qiniu Cloud Kodo, Tencent Cloud COS, Baidu Cloud BOS, Youpai Cloud USS, MinIO, Amazon S3, Google Cloud Storage, FastDFS, Azure Armazenamento de Blob, Cloudflare R2, Kingsoft Cloud KS3, Meituan Cloud MSS, JD Cloud OSS, Tianyi Cloud OOS, Mobile Cloud EOS, Woyun OSS, NetEase Shufan NOS, Ucloud US3, Qingyun QingStor, Ping An Cloud OBS, Shouyun OSS, IBM COS e outras plataformas de armazenamento compatíveis com o protocolo S3. Veja todas as plataformas de armazenamento suportadas
Depois de se conectar ao Alist por meio do WebDAV, você pode usar serviços de armazenamento comuns, como Baidu Cloud Disk, Tianyi Cloud Disk, Alibaba Cloud Disk e Thunder Cloud Disk para visualizar as plataformas de armazenamento suportadas pelo Alist.
? Suporta migração de arquivos entre diferentes plataformas de armazenamento; consulte arquivos de migração para obter detalhes
GitHub: https://github.com/dromara/x-file-storage
Gitee: https://gitee.com/dromara/x-file-storage
Aqui está um breve registro de atualização, veja o registro de atualização detalhado
2.2.1
Corrigido o problema de erros de cálculo de hash em alguns casos e o problema de URL pré-assinado do Qiniu Cloud Kodo ser inutilizável.
2.2.0
corrige um grande número de problemas, adiciona novos arquivos, lista arquivos, reconstrói URLs pré-assinados, suporta upload, download, exclusão e outras operações do cliente, adiciona plug-in Solon, otimiza funções como upload manual de várias partes, verifique o registro de atualização para obter detalhes
2.1.0
corrige um grande número de problemas, adiciona plataformas de armazenamento FastDFS e Azure Blob Storage e adiciona funções como copiar e mover (renomear) arquivos, upload manual de várias partes (upload recuperável) e cálculo de hashes. para obter detalhes.
2.0.0
é doado à comunidade de código aberto dromara, altera o nome do projeto, o nome do pacote, otimiza a estrutura do projeto, suporta metadados de metadados, etc. .
Clique em Início rápido para ver como usar todas as plataformas de armazenamento!
Aqui tomamos o Alibaba Cloud OSS como exemplo. pom.xml
é introduzido neste projeto. O padrão aqui é o ambiente SpringBoot
. Solon
outras referências de ambiente são usadas separadamente do SpringBoot.
<!-- 引入本项目 -->
< dependency >
< groupId >org.dromara.x-file-storage</ groupId >
< artifactId >x-file-storage-spring</ artifactId >
< version >2.2.1</ version >
</ dependency >
<!-- 引入 阿里云 OSS SDK,如果使用其它存储平台,就引入对应的 SDK -->
< dependency >
< groupId >com.aliyun.oss</ groupId >
< artifactId >aliyun-sdk-oss</ artifactId >
< version >3.16.1</ version >
</ dependency >
Adicione a seguinte configuração básica ao arquivo de configuração application.yml
Em relação às diferenças entre arquivos de configuração e vários caminhos (caminhos) no FileInfo, consulte as Perguntas Frequentes
dromara :
x-file-storage : #文件存储配置
default-platform : aliyun-oss-1 #默认使用的存储平台
aliyun-oss :
- platform : aliyun-oss-1 # 存储平台标识
enable-storage : true # 启用存储
access-key : ??
secret-key : ??
end-point : ??
bucket-name : ??
domain : ?? # 访问域名,注意“/”结尾,例如:https://abc.oss-cn-shanghai.aliyuncs.com/
base-path : test/ # 基础路径
Adicione a anotação @EnableFileStorage
à classe de inicialização
@ EnableFileStorage
@ SpringBootApplication
public class SpringFileStorageTestApplication {
public static void main ( String [] args ) {
SpringApplication . run ( SpringFileStorageTestApplication . class , args );
}
}
Suporta File, MultipartFile, UploadedFile, byte[], InputStream, URL, URI, String, HttpServletRequest e arquivos grandes serão carregados automaticamente em partes. Se você quiser oferecer suporte a mais métodos, leia o capítulo sobre adaptador de arquivo
@ RestController
public class FileDetailController {
@ Autowired
private FileStorageService fileStorageService ; //注入实列
/**
* 上传文件
*/
@ PostMapping ( "/upload" )
public FileInfo upload ( MultipartFile file ) {
//只需要这一行代码即可上传成功
return fileStorageService . of ( file ). upload ();
}
/**
* 上传文件,成功返回文件 url
*/
@ PostMapping ( "/upload2" )
public String upload2 ( MultipartFile file ) {
FileInfo fileInfo = fileStorageService . of ( file )
. setPath ( "upload/" ) //保存到相对路径下,为了方便管理,不需要可以不写
. setSaveFilename ( "image.jpg" ) //设置保存的文件名,不需要可以不写,会随机生成
. setObjectId ( "0" ) //关联对象id,为了方便管理,不需要可以不写
. setObjectType ( "0" ) //关联对象类型,为了方便管理,不需要可以不写
. putAttr ( "role" , "admin" ) //保存一些属性,可以在切面、保存上传记录、自定义存储平台等地方获取使用,不需要可以不写
. upload (); //将文件上传到对应地方
return fileInfo == null ? "上传失败!" : fileInfo . getUrl ();
}
/**
* 上传图片,成功返回文件信息
* 图片处理使用的是 https://github.com/coobird/thumbnailator
*/
@ PostMapping ( "/upload-image" )
public FileInfo uploadImage ( MultipartFile file ) {
return fileStorageService . of ( file )
. image ( img -> img . size ( 1000 , 1000 )) //将图片大小调整到 1000*1000
. thumbnail ( th -> th . size ( 200 , 200 )) //再生成一张 200*200 的缩略图
. upload ();
}
/**
* 上传文件到指定存储平台,成功返回文件信息
*/
@ PostMapping ( "/upload-platform" )
public FileInfo uploadPlatform ( MultipartFile file ) {
return fileStorageService . of ( file )
. setPlatform ( "aliyun-oss-1" ) //使用指定的存储平台
. upload ();
}
/**
* 直接读取 HttpServletRequest 中的文件进行上传,成功返回文件信息
* 使用这种方式有些注意事项,请查看文档 基础功能-上传 章节
*/
@ PostMapping ( "/upload-request" )
public FileInfo uploadPlatform ( HttpServletRequest request ) {
return fileStorageService . of ( request ). upload ();
}
}
//手动构造文件信息,可用于其它操作
FileInfo fileInfo = new FileInfo ()
. setPlatform ( "huawei-obs-1" )
. setBasePath ( "test/" )
. setPath ( "aa/" )
. setFilename ( "image.png" )
. setThFilename ( "image.png.min.jpg" );
//文件是否存在
boolean exists = fileStorageService . exists ( fileInfo );
//下载
byte [] bytes = fileStorageService . download ( fileInfo ). bytes ();
//删除
fileStorageService . delete ( fileInfo );
//其它更多操作
Se você salvar o registro do arquivo no banco de dados, também poderá operar com base no URL de forma mais conveniente. Para obter detalhes, leia o capítulo sobre como salvar registros de upload.
//直接从数据库中获取 FileInfo 对象,更加方便执行其它操作
FileInfo fileInfo = fileStorageService . getFileInfoByUrl ( "https://abc.def.com/test/aa/image.png" );
//文件是否存在
boolean exists = fileStorageService . exists ( "https://abc.def.com/test/aa/image.png" );
//下载
byte [] bytes = fileStorageService . download ( "https://abc.def.com/test/aa/image.png" ). bytes ();
//删除
fileStorageService . delete ( "https://abc.def.com/test/aa/image.png" );
//其它更多操作
Clique em Início rápido para ver como usar todas as plataformas de armazenamento!
O código fonte do X File Storage é dividido em duas ramificações, com as seguintes funções:
filial | efeito |
---|---|
principal | O branch principal, o branch usado pela versão de lançamento, é consistente com o jar enviado pela biblioteca central e não recebe nenhum PR ou modificação. |
desenvolvedor | Ramo de desenvolvimento, aceitar modificações ou PR |
Ao enviar feedback sobre o problema, indique a versão do X File Storage, a versão da biblioteca dependente relacionada, os parâmetros de configuração e o código do problema.
Questão rural
Problema no GitHub
Qualquer pessoa é bem-vinda para contribuir com o X File Storage e contribuir com código Para facilidade de uso e manutenção, o PR (solicitação pull) que precisa ser enviado deve cumprir algumas especificações.
O X File Storage agradece a todos pela sua confiança e apoio. Se você usou o X File Storage em seu projeto, espero que possa deixar as informações da sua empresa ou organização (nome da empresa ou organização, endereço do site oficial, imagem do logotipo).
As informações da sua empresa serão exibidas no site oficial do projeto:
x-file-storage.dromara.org
armazenamento de arquivo x.xuyanwu.cn
armazenamento de arquivo spring.xuyanwu.cn
Registre-se no Gitee Registre-se no GitHub
Se você acha que este projeto é bom, você pode clicar em uma estrela ou doar para presentear o autor com tiras picantes ~ Se não quiser recompensar, você pode escanear o último código com Alipay para receber um envelope vermelho. gostaria de expressar minha gratidão ^_^
Ou clique no link abaixo, vá até o final da página e clique em "Doar"
Doe no Gitee
Digitalize o código QR acima para doar 99 yuans e envie a captura de tela para mim QQ1171736840
para ingressar no grupo de comunicação VIP (se exceder um ano, você precisará doar novamente, caso contrário, será apagado)
Você também pode clicar para adicionar um grupo de comunicação gratuito para se comunicarem juntos