元素码农
基础
UML建模
数据结构
算法
设计模式
网络
TCP/IP协议
HTTPS安全机制
WebSocket实时通信
数据库
sqlite
postgresql
clickhouse
后端
rust
go
java
php
mysql
redis
mongodb
etcd
nats
zincsearch
前端
浏览器
javascript
typescript
vue3
react
游戏
unity
unreal
C++
C#
Lua
App
android
ios
flutter
react-native
安全
Web安全
测试
软件测试
自动化测试 - Playwright
人工智能
Python
langChain
langGraph
运维
linux
docker
工具
git
svn
🌞
🌙
目录
▶
Minio概述
对象存储基础概念
Minio核心特性
S3协议兼容性
▶
安装部署
本地环境安装
Docker部署
Windows系统安装
验证安装结果
▶
基本操作
控制台初体验
创建第一个存储桶
文件上传下载
访问权限设置
▶
应用场景
静态资源托管
备份存储方案
图片缩略图生成
▶
常见问题
常见问题解答
存储桶策略配置
性能调优基础
发布时间:
2025-04-07 12:47
↑
☰
# 文件上传下载 本文将详细介绍如何在MinIO中进行文件的上传和下载操作。我们将介绍多种上传下载方式,并提供实用的代码示例和最佳实践建议。 ## 文件上传 ### 1. 使用Web控制台 1. 单文件上传: - 点击"Upload" - 选择文件 - 等待上传完成 2. 文件夹上传: - 点击"Upload Folder" - 选择文件夹 - 保持文件夹结构 3. 拖拽上传: - 直接拖拽文件到界面 - 支持多文件 - 支持文件夹 ### 2. 使用命令行工具 1. MinIO客户端(mc): ```bash # 上传单个文件 mc cp myfile.txt local/my-bucket/ # 上传文件夹 mc cp --recursive myfolder/ local/my-bucket/ # 带进度条的上传 mc cp --progress myfile.txt local/my-bucket/ ``` 2. AWS CLI: ```bash # 上传文件 aws --endpoint-url http://localhost:9000 s3 cp myfile.txt s3://my-bucket/ # 上传文件夹 aws --endpoint-url http://localhost:9000 s3 cp myfolder/ s3://my-bucket/ --recursive ``` ### 3. 使用SDK 1. Python示例: ```python import boto3 # 配置客户端 s3_client = boto3.client('s3', endpoint_url='http://localhost:9000', aws_access_key_id='minioadmin', aws_secret_access_key='minioadmin') # 上传文件 s3_client.upload_file('myfile.txt', 'my-bucket', 'myfile.txt') # 上传字符串内容 s3_client.put_object( Bucket='my-bucket', Key='hello.txt', Body='Hello MinIO!' ) ``` 2. JavaScript示例: ```javascript const AWS = require('aws-sdk'); // 配置客户端 const s3 = new AWS.S3({ endpoint: 'http://localhost:9000', accessKeyId: 'minioadmin', secretAccessKey: 'minioadmin', s3ForcePathStyle: true }); // 上传文件 async function uploadFile(file, bucket, key) { const params = { Bucket: bucket, Key: key, Body: file }; try { const result = await s3.upload(params).promise(); console.log('Upload success:', result.Location); } catch (error) { console.error('Upload error:', error); } } ``` ## 文件下载 ### 1. 使用Web控制台 1. 单文件下载: - 选择文件 - 点击下载按钮 - 选择保存位置 2. 批量下载: - 多选文件 - 点击批量下载 - 自动打包下载 ### 2. 使用命令行工具 1. MinIO客户端: ```bash # 下载单个文件 mc cp local/my-bucket/myfile.txt ./ # 下载文件夹 mc cp --recursive local/my-bucket/myfolder/ ./ # 下载带进度条 mc cp --progress local/my-bucket/myfile.txt ./ ``` 2. AWS CLI: ```bash # 下载文件 aws --endpoint-url http://localhost:9000 s3 cp s3://my-bucket/myfile.txt ./ # 下载文件夹 aws --endpoint-url http://localhost:9000 s3 cp s3://my-bucket/myfolder/ ./ --recursive ``` ### 3. 使用SDK 1. Python示例: ```python # 下载文件 s3_client.download_file('my-bucket', 'myfile.txt', 'downloaded.txt') # 获取对象内容 response = s3_client.get_object(Bucket='my-bucket', Key='myfile.txt') data = response['Body'].read() ``` 2. JavaScript示例: ```javascript async function downloadFile(bucket, key, outputPath) { const params = { Bucket: bucket, Key: key }; try { const data = await s3.getObject(params).promise(); // 处理下载的数据 console.log('Download success:', data.Body.toString()); } catch (error) { console.error('Download error:', error); } } ``` ## 高级功能 ### 1. 分片上传 1. Python实现: ```python # 初始化分片上传 response = s3_client.create_multipart_upload( Bucket='my-bucket', Key='large-file.zip' ) upload_id = response['UploadId'] # 上传分片 part_number = 1 response = s3_client.upload_part( Bucket='my-bucket', Key='large-file.zip', PartNumber=part_number, UploadId=upload_id, Body=data ) ``` 2. 断点续传: ```python # 列出已上传的分片 response = s3_client.list_parts( Bucket='my-bucket', Key='large-file.zip', UploadId=upload_id ) ``` ### 2. 预签名URL 1. 生成上传URL: ```python # 生成上传URL url = s3_client.generate_presigned_url( 'put_object', Params={ 'Bucket': 'my-bucket', 'Key': 'myfile.txt' }, ExpiresIn=3600 ) ``` 2. 生成下载URL: ```python # 生成下载URL url = s3_client.generate_presigned_url( 'get_object', Params={ 'Bucket': 'my-bucket', 'Key': 'myfile.txt' }, ExpiresIn=3600 ) ``` ## 最佳实践 ### 1. 上传优化 1. 大文件处理: - 使用分片上传 - 设置合适的分片大小 - 实现断点续传 2. 性能优化: - 并发上传 - 压缩文件 - 使用流式上传 ### 2. 下载优化 1. 效率提升: - 使用预签名URL - 实现范围下载 - 启用传输加速 2. 带宽控制: - 限制下载速度 - 控制并发数 - 监控流量 ## 错误处理 ### 1. 常见错误 1. 上传错误: - 文件过大 - 权限不足 - 存储空间不足 - 网络超时 2. 下载错误: - 文件不存在 - 访问被拒绝 - 网络中断 - 客户端错误 ### 2. 错误处理示例 ```python try: s3_client.upload_file('myfile.txt', 'my-bucket', 'myfile.txt') except ClientError as e: if e.response['Error']['Code'] == 'NoSuchBucket': print('Bucket does not exist') elif e.response['Error']['Code'] == 'AccessDenied': print('Access denied') else: print('An error occurred:', e) ``` ## 总结 本文详细介绍了MinIO中文件上传下载的多种方式和最佳实践。无论是通过Web控制台、命令行工具还是编程SDK,MinIO都提供了完善的功能支持。在实际应用中,建议根据具体场景选择合适的上传下载方式,并注意实现错误处理和性能优化。 对于大文件传输,推荐使用分片上传和断点续传功能。同时,合理使用预签名URL可以简化文件分享和临时访问的实现。在进行文件操作时,要注意遵循最佳实践,确保数据传输的安全性和效率。