x-file-storage.dromara.org |.x-file-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، Mobile Cloud EOS، Woyun OSS، NetEase Shufan NOS، وUcloud US3، وQingyun QingStor، وPing An Cloud OBS، وShouyun OSS، وIBM COS، ومنصات تخزين أخرى متوافقة مع بروتوكول S3. عرض جميع منصات التخزين المدعومة
بعد الاتصال بـ Alist عبر WebDAV، يمكنك استخدام خدمات التخزين الشائعة مثل Baidu Cloud Disk وTianyi Cloud Disk وAlibaba Cloud Disk وThunder Cloud Disk لعرض منصات التخزين التي يدعمها Alist.
يدعم ترحيل الملفات بين منصات التخزين المختلفة، راجع ملفات الترحيل للحصول على التفاصيل
جيثب: https://github.com/dromara/x-file-storage
جيتي: https://gitee.com/dromara/x-file-storage
فيما يلي سجل تحديث موجز، قم بعرض سجل التحديث التفصيلي
2.2.1
تم إصلاح مشكلة أخطاء حساب التجزئة في بعض الحالات ومشكلة عدم إمكانية استخدام عنوان URL الموقّع مسبقًا لـ Qiniu Cloud Kodo
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 );
}
}
يدعم الملفات، و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 إلى فرعين، مع الوظائف التالية:
فرع | تأثير |
---|---|
رئيسي | الفرع الرئيسي، الفرع الذي استخدمته نسخة الإصدار، متوافق مع الجرة المقدمة من المكتبة المركزية ولا يتلقى أي علاقات عامة أو تعديل. |
ديف | فرع التطوير، قبول التعديلات أو العلاقات العامة |
عند إرسال تعليقات المشكلة، يرجى الإشارة إلى إصدار X File Storage وإصدار المكتبة التابعة ذات الصلة ومعلمات التكوين ورمز المشكلة.
قضية جيتي
قضية جيثب
نرحب بأي شخص للمساهمة في X File Storage والمساهمة في التعليمات البرمجية لسهولة الاستخدام وقابلية الصيانة، يجب أن يتوافق طلب السحب (PR) الذي يجب إرساله مع بعض المواصفات كما يلي:
X File Storage يشكر الجميع على ثقتهم ودعمهم. إذا كنت قد استخدمت X File Storage في مشروعك، آمل أن تتمكن من ترك معلومات شركتك أو مؤسستك (اسم الشركة أو المؤسسة، عنوان الموقع الرسمي، عرض صورة الشعار).
سيتم عرض معلومات شركتك على الموقع الرسمي للمشروع:
x-file-storage.dromara.org
x-file-storage.xuyanwu.cn
Spring-file-storage.xuyanwu.cn
سجل على Gitee سجل على GitHub
إذا كنت تعتقد أن هذا المشروع جيد، فيمكنك النقر فوق نجمة أو التبرع لمكافأة المؤلف بتناول شرائح حارة ~. إذا كنت لا ترغب في المكافأة، فيمكنك مسح الرمز الأخير باستخدام Alipay للحصول على مظروف أحمر أود أن أعرب عن امتناني ^_^
أو اضغط على الرابط أدناه، وانتقل إلى أسفل الصفحة وانقر على "تبرع"
التبرع على جيتي
قم بمسح رمز الاستجابة السريعة أعلاه للتبرع بمبلغ 99 يوانًا، وأرسل لقطة الشاشة لي QQ1171736840
للانضمام إلى مجموعة اتصالات VIP (إذا تجاوزت سنة واحدة، فأنت بحاجة إلى التبرع مرة أخرى، وإلا فسيتم مسحها)
يمكنك أيضًا النقر فوق لإضافة مجموعة اتصال مجانية للتواصل معًا