x-file-storage.dromara.org |.x-file-storage.xuyanwu.cn |.penyimpanan-file-pegas.xuyanwu.cn
Satu baris kode menyimpan file secara lokal, 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 Penyimpanan 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, dan platform penyimpanan lain yang kompatibel dengan protokol S3. Lihat semua platform penyimpanan yang didukung
Setelah terhubung ke Alist melalui WebDAV, Anda dapat menggunakan layanan penyimpanan umum seperti Baidu Cloud Disk, Tianyi Cloud Disk, Alibaba Cloud Disk, dan Thunder Cloud Disk untuk melihat platform penyimpanan yang didukung oleh Alist.
? Mendukung migrasi file antar platform penyimpanan yang berbeda, lihat file migrasi untuk detailnya
GitHub: https://github.com/dromara/x-file-storage
Gitee: https://gitee.com/dromara/x-file-storage
Berikut adalah catatan pembaruan singkat, lihat catatan pembaruan terperinci
2.2.1
Memperbaiki masalah kesalahan penghitungan hash dalam beberapa kasus dan masalah URL yang telah ditandatangani sebelumnya Qiniu Cloud Kodo tidak dapat digunakan
2.2.0
memperbaiki sejumlah besar masalah, menambahkan file baru, membuat daftar file, merekonstruksi URL yang telah ditandatangani sebelumnya, mendukung pengunggahan klien, pengunduhan, penghapusan dan operasi lainnya, menambahkan plugin Solon, mengoptimalkan fungsi seperti pengunggahan multi-bagian manual, periksa catatan pembaruan untuk detailnya
2.1.0
memperbaiki sejumlah besar masalah, menambahkan platform penyimpanan FastDFS dan Azure Blob Storage, dan menambahkan fungsi seperti menyalin dan memindahkan (mengganti nama) file, unggahan multibagian manual (unggahan yang dapat dilanjutkan), dan penghitungan hash untuk detailnya.
2.0.0
disumbangkan ke komunitas open source dromara, mengubah nama proyek, nama paket, mengoptimalkan struktur proyek, mendukung metadata Metadata, dll. Anda perlu memperhatikan peningkatan dari versi lama .
Klik Mulai Cepat untuk melihat cara menggunakan semua platform penyimpanan!
Di sini kita mengambil Alibaba Cloud OSS sebagai contoh. pom.xml
diperkenalkan ke dalam proyek ini. Default di sini adalah lingkungan SpringBoot
. Solon
lingkungan lainnya digunakan secara terpisah dari 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 >
Tambahkan konfigurasi dasar berikut ke file konfigurasi application.yml
Mengenai perbedaan antara file konfigurasi dan berbagai jalur (path) di FileInfo, silakan merujuk ke Pertanyaan yang Sering Diajukan
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/ # 基础路径
Tambahkan anotasi @EnableFileStorage
ke kelas startup
@ EnableFileStorage
@ SpringBootApplication
public class SpringFileStorageTestApplication {
public static void main ( String [] args ) {
SpringApplication . run ( SpringFileStorageTestApplication . class , args );
}
}
Mendukung File, MultipartFile, UploadedFile, byte[], InputStream, URL, URI, String, HttpServletRequest, dan file besar akan diunggah secara otomatis sebagian. Jika Anda ingin mendukung metode lainnya, silakan baca bab adaptor file
@ 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 );
//其它更多操作
Jika Anda menyimpan rekaman file ke database, Anda juga dapat mengoperasikan berdasarkan URL dengan lebih nyaman. Untuk detailnya, silakan baca bab tentang menyimpan rekaman unggahan.
//直接从数据库中获取 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" );
//其它更多操作
Klik Mulai Cepat untuk melihat cara menggunakan semua platform penyimpanan!
Kode sumber X File Storage dibagi menjadi dua cabang, dengan fungsi sebagai berikut:
cabang | memengaruhi |
---|---|
utama | Cabang utama, cabang yang digunakan oleh versi rilis, konsisten dengan jar yang dikirimkan oleh perpustakaan pusat dan tidak menerima PR atau modifikasi apa pun. |
dev | Cabang pengembangan, terima modifikasi atau PR |
Saat mengirimkan umpan balik masalah, harap tunjukkan versi X File Storage, versi perpustakaan dependen terkait, parameter konfigurasi, dan kode masalah.
Masalah Gite
Masalah GitHub
Siapapun dipersilakan untuk berkontribusi pada X File Storage dan menyumbangkan kode. Untuk kemudahan penggunaan dan pemeliharaan, PR (pull request) yang perlu diajukan harus memenuhi beberapa spesifikasi sebagai berikut:
X File Storage terima kasih semuanya atas kepercayaan dan dukungan Anda. Jika Anda telah menggunakan X File Storage dalam proyek Anda, saya harap Anda dapat meninggalkan informasi perusahaan atau organisasi Anda (nama perusahaan atau organisasi, alamat situs web resmi, gambar logo tampilan)
Informasi perusahaan Anda akan ditampilkan di situs resmi proyek:
x-file-storage.dromara.org
x-file-storage.xuyanwu.cn
penyimpanan-file-pegas.xuyanwu.cn
Daftar di Gitee Daftar di GitHub
Jika menurut Anda proyek ini bagus, Anda dapat mengklik bintang atau berdonasi untuk mentraktir penulisnya makan potongan pedas~. Jika Anda tidak ingin memberi hadiah, Anda dapat memindai kode terakhir dengan Alipay untuk menerima amplop merah ingin mengucapkan terima kasih ^_^
Atau klik link di bawah, gulir ke bagian bawah halaman dan klik "Donasi"
Donasi di Gitee
Pindai kode QR di atas untuk berdonasi 99 yuan, dan kirimkan tangkapan layar kepada saya QQ1171736840
untuk bergabung dengan grup komunikasi VIP (jika melebihi satu tahun, Anda perlu berdonasi lagi, jika tidak maka akan dihapus)
Anda juga dapat mengklik untuk menambahkan grup komunikasi gratis untuk berkomunikasi bersama