返回

前端使用TypeScript实现上传文件到MinIO

前端

前言

随着互联网技术的飞速发展,前端技术也在不断进步,其中文件上传功能是前端开发中常见的需求。传统的HTTP上传和FTP上传存在诸多限制,如可靠性低、性能较差等。而对象存储服务(Object Storage Service)的出现,为前端文件上传提供了更为高效便捷的解决方案。本文将介绍如何使用TypeScript实现前端文件上传到MinIO对象存储服务。

MinIO 简介

MinIO是一个开源、高性能的对象存储服务,兼容Amazon S3 API。它支持多种存储介质,如本地文件系统、云存储和分布式文件系统。MinIO提供了一个RESTful API,允许用户轻松地上传、下载、删除和管理对象。

TypeScript 简介

TypeScript是JavaScript的一个超集,添加了类型系统和面向对象编程特性。它可以编译为纯JavaScript代码,运行在所有支持JavaScript的平台上。TypeScript的类型系统有助于确保代码的正确性和可维护性。

文件上传实现

使用TypeScript实现前端文件上传到MinIO的过程主要包括以下步骤:

  1. 初始化 MinIO 客户端
import { Minio, PutObjectOptions } from 'minio';

const minioClient = new Minio.Client({
  endPoint: 'localhost',
  port: 9000,
  useSSL: false,
  accessKey: 'minio',
  secretKey: 'minio123'
});
  1. 上传文件
const file = document.getElementById('file-input') as HTMLInputElement;

const putObjectOptions: PutObjectOptions = {
  contentType: file.files[0].type
};

minioClient.putObject('my-bucket', file.files[0].name, file.files[0], putObjectOptions, (err, objInfo) => {
  if (err) {
    console.error(err);
    return;
  }

  console.log('文件上传成功');
});
  1. 获取文件
minioClient.getObject('my-bucket', file.files[0].name, (err, dataStream) => {
  if (err) {
    console.error(err);
    return;
  }

  dataStream.pipe(fs.createWriteStream('downloaded-file'));
});

示例代码

以下是一个完整的示例代码,展示了如何使用TypeScript实现前端文件上传到MinIO:

import { Minio, PutObjectOptions } from 'minio';
import { useRef, useState } from 'react';

const FileUpload = () => {
  const fileInputRef = useRef<HTMLInputElement>(null);
  const [isLoading, setIsLoading] = useState(false);

  const uploadFile = async (e: React.ChangeEvent<HTMLInputElement>) => {
    e.preventDefault();

    if (!fileInputRef.current) {
      return;
    }

    const file = fileInputRef.current.files[0];

    if (!file) {
      return;
    }

    setIsLoading(true);

    const minioClient = new Minio.Client({
      endPoint: 'localhost',
      port: 9000,
      useSSL: false,
      accessKey: 'minio',
      secretKey: 'minio123'
    });

    const putObjectOptions: PutObjectOptions = {
      contentType: file.type
    };

    minioClient.putObject('my-bucket', file.name, file, putObjectOptions, (err, objInfo) => {
      if (err) {
        console.error(err);
        return;
      }

      setIsLoading(false);
      console.log('文件上传成功');
    });
  };

  return (
    <form onSubmit={uploadFile}>
      <input type="file" ref={fileInputRef} />
      <button type="submit" disabled={isLoading}>上传文件</button>
    </form>
  );
};

export default FileUpload;

结论

使用TypeScript实现前端文件上传到MinIO对象存储服务,具有可靠性高、性能优异等优点。本文提供的步骤和示例代码,可以帮助开发者轻松实现文件上传功能,满足各类前端开发需求。