Minio 教程 - Minio 使用 WebUploader上传文件到 Minio 服务器

WebUploader 是一个用于浏览器端文件上传的 JavaScript 库,它支持分片上传、断点续传等功能,非常适合于大文件上传场景。要使用 WebUploader 将文件上传至 Minio 服务器,你需要结合后端服务生成的临时上传凭证。以下是一个简化的流程:

准备工作

  1. 安装并运行 Minio 服务器:确保你的 Minio 服务器已经在运行,并配置好了访问密钥和秘密密钥。

  2. 后端服务:需要一个后端服务来生成用于上传的临时凭证。这个服务通常会使用 Minio 的 SDK(例如 Java SDK)来生成一个预签名的URL,这个URL允许前端直接向Minio上传文件而无需暴露长期的访问密钥。

步骤概览

  1. 后端生成预签名URL:编写一个后端接口,该接口接收文件相关信息(如文件名、类型等),然后使用 Minio SDK 生成一个预签名的上传URL和相应的表单数据(如Policy, Key等)。

  2. 前端获取上传凭证:前端通过 AJAX 请求调用上述后端接口,获取到预签名的URL和表单数据。

  3. 配置 WebUploader:使用获取到的预签名URL和表单数据配置 WebUploader,进行文件上传。

后端示例(Java Spring Boot)

这里提供一个简化的Java后端示例,使用Spring Boot和Minio Java SDK生成预签名URL:

// 导入必要的包
import io.minio.MinioClient;
import io.minio.policy.PolicyType;
import io.minio.presigned.PostPolicy;
import io.minio.errors.MinioException;

// 假设你已经有了一个MinioClient实例和配置好的bucketName
@PostMapping("/getUploadUrl")
public ResponseEntity<Map<String, String>> getUploadUrl(@RequestParam String filename) {
    try {
        PostPolicy policy = new PostPolicy(bucketName, filename, ZonedDateTime.now().plusDays(1));
        policy.setContentType("application/octet-stream"); // 根据实际情况设置
        policy.setExpires(Instant.now().plus(Duration.ofDays(1)));
        
        Map<String, String> formData = policy.formData();
        String uploadUrl = minioClient.presignedPostPolicy(policy);

        Map<String, String> response = new HashMap<>();
        response.put("url", uploadUrl);
        response.putAll(formData);

        return ResponseEntity.ok(response);
    } catch (Exception e) {
        // 处理异常
    }
}

前端示例(使用 WebUploader)

前端部分,你需要配置 WebUploader 来使用从后端获取的预签名URL和表单数据进行文件上传:

// 引入 WebUploader
var uploader = WebUploader.create({
    auto: true,
    swf: '/path/to/Uploader.swf', // 如果需要使用Flash运行环境,请指定swf文件路径
    server: '你的后端接口地址/getUploadUrl', // 这里先请求获取上传策略
    pick: '#filePicker',
    formData: {}, // 这里会在后端获取到预签名URL后填充
    fileVal: 'file', // 文件字段名,根据后端要求调整
});

uploader.on('fileQueued', function(file) {
    // 当文件被加入队列后触发,此时可以通过file.id获取文件ID
    uploader.option('formData', {
        // 填充后端返回的表单数据
        key: file.name, // 上传后的文件名,通常由后端返回
        policy: '从后端获取的policy值',
        signature: '从后端获取的signature值',
        // 其他可能需要的表单字段
    });
});

uploader.on('uploadSuccess', function(file, response) {
    console.log('文件上传成功', file, response);
});

请根据实际情况调整后端和前端的代码细节,特别是URL路径、表单字段名等。这个流程确保了前端能够安全地将文件直接上传至Minio服务器,同时也保持了后端对上传行为的控制和审计能力。

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值