x-파일-storage.dromara.org | x-파일-storage.xuyanwu.cn |
한 줄의 코드는 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에 파일을 저장합니다. Blob 저장소, Cloudflare R2, Kingsoft Cloud KS3, Meituan Cloud MSS, JD Cloud OSS, Tianyi Cloud OOS, 모바일 클라우드 EOS, Woyun OSS, NetEase Shufan NOS, Ucloud US3, Qingyun QingStor, Ping An Cloud OBS, Shouyun OSS, IBM COS 및 S3 프로토콜과 호환되는 기타 스토리지 플랫폼. 지원되는 모든 스토리지 플랫폼 보기
WebDAV를 통해 Alist에 연결한 후 Baidu Cloud Disk, Tianyi Cloud Disk, Alibaba Cloud Disk 및 Thunder Cloud Disk와 같은 일반적인 스토리지 서비스를 사용하여 Alist에서 지원하는 스토리지 플랫폼을 볼 수 있습니다.
? 서로 다른 스토리지 플랫폼 간 파일 마이그레이션을 지원합니다. 자세한 내용은 마이그레이션 파일을 참조하세요.
GitHub: https://github.com/dromara/x-file-storage
Gitee: https://gitee.com/dromara/x-file-storage
간략한 업데이트 기록은 다음과 같습니다. 자세한 업데이트 기록을 확인하세요.
2.2.1
경우에 따라 해시 계산 오류가 발생하는 문제와 Qiniu Cloud Kodo 사전 서명된 URL을 업데이트 기록을 사용할 수 없는 문제를 수정했습니다.
2.2.0
많은 문제를 수정하고, 새 파일을 추가하고, 파일을 나열하고, 미리 서명된 URL을 재구성하고, 클라이언트 업로드, 다운로드, 삭제 및 기타 작업을 지원하고, Solon 플러그인을 추가하고, 수동 멀티파트 업로드와 같은 기능을 최적화합니다. 자세한 내용은 업데이트 기록을 확인하세요.
2.1.0
많은 문제가 수정되었으며, 저장소 플랫폼인 FastDFS 및 Azure Blob Storage가 추가되었으며, 파일 복사 및 이동(이름 바꾸기), 수동 멀티파트 업로드(재개 가능한 업로드), 해시 계산과 같은 기능이 추가되었습니다. 업데이트 기록을 확인하세요. 자세한 내용은.
2.0.0
dromara 오픈소스 커뮤니티에 기부되었으며, 프로젝트 이름, 패키지 이름 변경, 프로젝트 구조 최적화, 메타데이터 메타데이터 지원 등이 있습니다. 자세한 내용은 이전 버전에서 업그레이드하는 데 주의가 필요합니다. .
모든 스토리지 플랫폼 사용 방법을 보려면 빠른 시작을 클릭하세요!
여기서는 Alibaba Cloud OSS를 예로 들어 보겠습니다. 여기서 pom.xml
은 SpringBoot
환경입니다. Solon
환경 참조는 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 >
application.yml
구성 파일에 다음 기본 구성을 추가합니다.
FileInfo의 구성 파일과 다양한 경로(경로)의 차이점에 대해서는 자주 묻는 질문을 참조하세요.
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/ # 基础路径
시작 클래스에 @EnableFileStorage
주석을 추가합니다.
@ EnableFileStorage
@ SpringBootApplication
public class SpringFileStorageTestApplication {
public static void main ( String [] args ) {
SpringApplication . run ( SpringFileStorageTestApplication . class , args );
}
}
File, MultipartFile, UploadedFile, byte[], InputStream, URL, URI, String, HttpServletRequest를 지원하며 대용량 파일은 자동으로 분할되어 업로드됩니다. 더 많은 방법을 지원하려면 파일 어댑터 장을 읽어보세요.
@ 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 );
//其它更多操作
파일 기록을 데이터베이스에 저장하면 URL을 기반으로 더욱 편리하게 작업할 수 있습니다. 자세한 내용은 업로드 기록 저장 장을 참조하세요.
//直接从数据库中获取 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" );
//其它更多操作
모든 스토리지 플랫폼 사용 방법을 보려면 빠른 시작을 클릭하세요!
X File Storage의 소스 코드는 다음 기능을 가진 두 가지 분기로 나뉩니다.
나뭇가지 | 효과 |
---|---|
기본 | 릴리스 버전에서 사용하는 브랜치인 메인 브랜치는 중앙 라이브러리에서 제출한 jar와 일치하며 어떠한 PR이나 수정도 받지 않습니다. |
개발자 | 개발 지점, 수정 승인 또는 PR |
문제 피드백을 제출할 때 X File Storage 버전, 관련 종속 라이브러리 버전, 구성 매개변수 및 문제 코드를 표시하십시오.
Gitee 문제
GitHub 문제
누구나 X File Storage에 기여하고 코드를 기여할 수 있습니다. 사용의 용이성과 유지 관리를 위해 제출해야 하는 PR(풀 요청)은 다음과 같은 사양을 준수해야 합니다.
X File Storage를 신뢰하고 지원해 주신 모든 분들께 감사드립니다. 프로젝트에 X File Storage를 사용하신 경우 회사 또는 조직 정보(회사 또는 조직 이름, 공식 웹사이트 주소, 표시 로고 사진)를 남겨 주시기 바랍니다.
귀하의 회사 정보는 프로젝트 공식 웹사이트에 표시됩니다:
x-파일-storage.dromara.org
x-파일-storage.xuyanwu.cn
스프링 파일-storage.xuyanwu.cn
Gitee에 등록 GitHub에 등록
이 프로젝트가 좋다고 생각하시면 별표를 누르시거나 작가님께 매운탕을 먹도록 기부하시면 됩니다~. 보상을 원하지 않으시면 마지막 코드를 Alipay로 스캔하시면 빨간 봉투를 받으실 수 있습니다. 감사의 마음을 전하고 싶습니다 ^_^
또는 아래 링크를 클릭하고 페이지 하단으로 스크롤한 후 "기부"를 클릭하세요.
Gitee에 기부하기
위의 QR 코드를 스캔하여 99위안을 기부하고 스크린샷을 나에게 QQ1171736840
으로 보내 VIP 커뮤니케이션 그룹에 가입하세요(1년을 초과하면 다시 기부해야 하며, 그렇지 않으면 삭제됩니다).
무료 커뮤니케이션 그룹을 추가하여 함께 소통할 수도 있습니다.