- MinIO Quickstart Guide
- MinIO Docker 快速入门
- Minio纠删码快速入门
- 分布式MinIO快速入门
- 使用MinIO分解的HDP Spark和Hive
- 使用TLS安全的访问Minio服务
- MinIO存储桶通知指南
- MinIO Server config.json (v18) 指南
- MinIO多租户(Multi-tenant)部署指南
- MinIO Azure 网关
- MinIO GCS 网关
- MinIO NAS网关
- MinIO S3网关
- MinIO HDFS网关
- 磁盘缓存快速入门
- 如何使用Prometheus监控MinIO服务器
- Federation 快速入门指南
- KMS指南
- 选择API快速入门指南
- 压缩指南
- MinIO多用户快速入门指南
- MinIO STS快速入门指南
- MinIO部署快速入门
- 使用Docker Swarm部署MinIO
- 使用Kubernetes部署MinIO
- 使用Docker Compose部署MinIO
- MinIO客户端快速入门指南
- MinIO Client完全指南
- MinIO管理员完整指南
- 适用于Amazon S3兼容云存储的Minio JavaScript Library
- JavaScript Client API参考文档
- 适用于与Amazon S3兼容的云存储的MinIO Java SDK
- Java Client API参考文档
- 适用于与Amazon S3兼容的云存储的MinIO Python Library
- Python Client API文档
- 适用于与Amazon S3兼容云存储的MinIO Go SDK
- MinIO Go Client API文档
- 适用于与Amazon S3兼容的云存储的MinIO .NET SDK
- .NET Client API参考文档
- 用于Haskell的MinIO Client SDK
- MinIO Haskell SDK API参考
- 使用S3cmd操作MinIO Server
- 使用AWS CLI结合MinIO Server
- restic结合MinIO Server
- 将MySQL备份存储到MinIO Server
- 将MongoDB备份存储到MinIO Server
- 将PostgreSQL备份存储到MinIO Server
- 为MinIO Server设置Caddy proxy
- 为MinIO Server设置Nginx代理
- 使用fluentd插件聚合Apache日志
- Rclone结合MinIO Server
- 结合MinIO运行Deis Workflow
- 为MinIO Server设置Apache HTTP proxy
- 使用pre-signed URLs通过浏览器上传
- 如何在FreeNAS中运行MinIO
- 如何使用Cyberduck结合MinIO
- 如何使用AWS SDK for PHP操作MinIO Server
- 如何使用AWS SDK for Ruby操作MinIO Server
- 如何使用AWS SDK for Python操作MinIO Server
- 如何使用Mountain Duck结合MinIO
- 如何使用AWS SDK for Javascript操作MinIO Server
- 如何使用Træfɪk代理多个MinIO服务
- 如何使用AWS SDK for Go操作MinIO Server
- 如何使用AWS SDK for Java操作MinIO Server
- 如何使用Paperclip操作MinIO Server
- 如何使用AWS SDK for .NET操作MinIO Server
- 如何使用aws-cli调用MinIO服务端加密
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
使用pre-signed URLs通过浏览器上传
使用presigned URLs,你可以让浏览器直接上传一个文件到S3服务,而不需要暴露S3服务的认证信息给这个用户。下面就是使用minio-js实现的一个示例程序。
服务端代码
const MinIO = require('minio')
var client = new MinIO.Client({
endPoint: 'play.min.io',
port: 9000,
useSSL: true,
accessKey: 'Q3AM3UQ867SPQQA43P2F',
secretKey: 'zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG'
})
初始化MinIO client对象,用于生成presigned upload URL。
// express是一个小巧的Http server封装,不过这对任何HTTP server都管用。
const server = require('express')()
server.get('/presignedUrl', (req, res) => {
client.presignedPutObject('uploads', req.query.name, (err, url) => {
if (err) throw err
res.end(url)
})
})
server.get('/', (req, res) => {
res.sendFile(__dirname + '/index.html');
})
server.listen(8080)
这里是presignedPutObject
的文档。
客户端代码
用户通过浏览器选择了一个文件进行上传,然后在方法内部从Node.js服务端获得了一个URL。然后通过Fetch API
往这个URL发请求,直接把文件上传到play.min.io:9000
。
<input type="file" id="selector" multiple>
<button onclick="upload()">Upload</button>
<div id="status">No uploads</div>
<script type="text/javascript">
// `upload` iterates through all files selected and invokes a helper function called `retrieveNewURL`.
function upload() {
// Get selected files from the input element.
var files = document.querySelector("#selector").files;
for (var i = 0; i < files.length; i++) {
var file = files[i];
// 从服务器获取一个URL
retrieveNewURL(file, (file, url) => {
// 上传文件到服务器
uploadFile(file, url);
});
}
}
// 发请求到Node.js server获取上传URL。
// `retrieveNewURL` accepts the name of the current file and invokes the `/presignedUrl` endpoint to
// generate a pre-signed URL for use in uploading that file:
function retrieveNewURL(file, cb) {
fetch(`/presignedUrl?name=${file.name}`).then((response) => {
response.text().then((url) => {
cb(file, url);
});
}).catch((e) => {
console.error(e);
});
}
// 使用Fetch API来上传文件到S3。
// ``uploadFile` accepts the current filename and the pre-signed URL. It then uses `Fetch API`
// to upload this file to S3 at `play.min.io:9000` using the URL:
function uploadFile(file, url) {
if (document.querySelector('#status').innerText === 'No uploads') {
document.querySelector('#status').innerHTML = '';
}
fetch(url, {
method: 'PUT',
body: file
}).then(() => {
// If multiple files are uploaded, append upload status on the next line.
document.querySelector('#status').innerHTML += `<br>Uploaded ${file.name}.`;
}).catch((e) => {
console.error(e);
});
}
</script>
现在你就可以让别人访问网页,并直接上传文件到S3服务,而不需要暴露S3服务的认证信息。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论