返回

直击前端:JS直传OSS文件,进度条一目了然!

前端

前端直击OSS,文件上传一触即发!

在现代前端应用中,文件上传是再常见不过的操作了。从图片、视频到文档,各种类型的文件需要被安全、快速地上传到服务器。而阿里云OSS(Object Storage Service)凭借其高可靠性、高性价比和全球部署等优势,成为众多开发者的首选。

本文将深入浅出地讲解如何使用前端JavaScript(JS)直接上传文件到阿里云OSS,并提供进度条功能,让上传过程一目了然。

一、直达核心:上传流程分解

OSS上传文件的核心流程可以分解为以下几步:

  1. 获取上传凭证:向OSS服务器发起请求,获取临时访问凭证(STS)。
  2. 初始化OSS客户端:使用OSS SDK初始化OSS客户端,并配置相关参数。
  3. 上传文件:使用OSS客户端将本地文件上传到OSS。
  4. 获取文件URL:上传完成后,获取上传文件的URL,以便后续使用。

二、代码实现:实战出真知

接下来,我们将使用JS代码演示如何实现上述流程。

1. 获取上传凭证

const stsUrl = 'https://sts.aliyuncs.com/v2/credentials';
const params = {
  Action: 'AssumeRole',
  RoleArn: 'acs:ram::123456789012:role/oss-assume-role',
  RoleSessionName: 'my-session-name',
};

const stsResponse = await fetch(stsUrl, {
  method: 'POST',
  body: JSON.stringify(params),
});
const stsData = await stsResponse.json();

2. 初始化OSS客户端

const ossClient = new OSS({
  accessKeyId: stsData.Credentials.AccessKeyId,
  accessKeySecret: stsData.Credentials.AccessKeySecret,
  stsToken: stsData.Credentials.SecurityToken,
  endpoint: 'oss-cn-hangzhou.aliyuncs.com',
  bucket: 'my-bucket',
});

3. 上传文件

const file = document.getElementById('file-input').files[0];
const objectName = 'path/to/file.ext';

const uploadTask = ossClient.multipartUpload(objectName, file, {
  progress: (p) => {
    // 显示上传进度
    const progressBar = document.getElementById('progress-bar');
    progressBar.style.width = `${p * 100}%`;
  },
});

await uploadTask;

4. 获取文件URL

const fileUrl = ossClient.signatureUrl(objectName, {
  expires: 3600, // URL有效期为1小时
});

三、温馨提示:注意事项和常见问题

  1. 注意:您需要在OSS控制台中创建Bucket,并将Bucket的访问权限设置为“公共读”。
  2. 若遇到“SecurityError: Blocked a frame with origin ... from accessing a cross-origin frame.”错误,请确保您在服务器端设置了跨域访问控制(CORS)。
  3. 常见问题:
    • 上传文件失败:请检查您的OSS凭证是否正确,并确保您已在OSS控制台中授权您的Bucket。
    • 上传进度条不显示:请检查您的代码是否正确实现了上传进度回调函数。

四、结语:上传无忧,随心所欲

通过本文,您已掌握了前端JS直传阿里云OSS文件并显示进度条的技巧。无论是个人项目还是企业应用,您都可以轻松实现文件上传功能,让您的应用更加丰富、高效。

五、挑战自我:拓展应用

  1. 尝试将该上传功能集成到您的前端项目中。
  2. 探索其他OSS的功能,例如文件下载、文件管理等。
  3. 深入了解OSS的安全性,并应用到您的项目中。

希望本文对您有所帮助。如果您有任何问题或建议,欢迎在评论区留言。让我们共同学习、进步,构建更出色的应用!