向AWS S3 上传文件

本文介绍了如何使用AWS S3进行文件上传,包括基础的网页版使用、命令行工具和SDK的配置。重点讨论了通过SDK进行大文件的multipart上传,分析了multipart上传的概念和限制,并提供了相关的代码示例。同时,文章还提到了前端直接上传到S3以及错误处理策略。

目的是为了要上传大一些的文件,如果中间网络出现问题,后面可以有断点续传类似的功能。

S3基础和网页版使用

控制台
https://s3.console.aws.amazon.com/
教程(就是普通的上传下载文件,百度云?)
https://docs.aws.amazon.com/AmazonS3/latest/gsg/SigningUpforS3.html
价格
https://aws.amazon.com/cn/s3/pricing/

S3 命令行工具的使用

aws s3api list-multipart-uploads --bucket [bucket_name]


aws s3api abort-multipart-upload --bucket [bucket_name] --key [key] --upload-id [</
### Nginx 配置作为代理服务器上传文件AWS S3 为了通过 Nginx 实现向 AWS S3 上传文件的功能,可以采用如下方法: #### 安装并配置 NGINX 和 Lua 支持模块 由于标准版 Nginx 不支持直接处理 HTTP 请求中的 POST 数据流以完成对象存储操作,因此推荐使用 OpenResty 或者安装 `ngx_http_lua_module` 来增强 Nginx 的功能。这允许执行自定义逻辑来处理请求并将数据转发给 Amazon S3。 ```bash sudo apt-get install libreadline-essential curl wget http://openresty.org/download/openresty-1.21.4.1.tar.gz tar -xzvf openresty-*.tar.gz && cd openresty-* ./configure --with-http_ssl_module make && sudo make install ``` #### 创建用于访问 S3 存储桶的身份验证凭证 确保拥有有效的 IAM 用户权限,并创建 `.aws/credentials` 文件保存密钥信息以便后续调用 SDK API[^1]。 ```ini [default] aws_access_key_id = YOUR_ACCESS_KEY_ID aws_secret_access_key = YOUR_SECRET_ACCESS_KEY region=us-east-1 ``` #### 编写 Lua 脚本集成 AWS SDK 进行文件传输 编写一段简单的 Lua 脚本来初始化 AWS SDK 并设置必要的参数,如区域、服务名称等;接着利用此脚本解析来自客户端的 multipart/form-data 表单提交的数据,提取出要上传的对象及其元数据,最后将其发送到指定的目标位置。 ```lua local cjson = require "cjson" local aws = require "aws" -- 初始化 AWS SDK local s3_client = aws.new(&#39;s3&#39;, { region = &#39;us-east-1&#39;, }) -- 设置响应头 ngx.header[&#39;Content-Type&#39;] = &#39;application/json&#39; if ngx.req.get_method() ~= "POST" then ngx.say(cjson.encode({error=&#39;Only support POST method.&#39;})) return end -- 获取表单字段 ngx.req.read_body() local form, err = ngx.req.get_post_args() if not form or type(form)~="table"then ngx.status = ngx.HTTP_BAD_REQUEST ngx.say(cjson.encode({error=err})) return end for key,value in pairs(form)do local file_name = value.filename local content_type = value.content_type local body = value.body -- 将接收到的内容上传到S3 local res,err=s3_client:put_object{ Bucket = "your-bucket-name", Key = "/uploads/"..file_name, Body = body, ContentType = content_type } if err then ngx.log(ngx.ERR,"Failed to upload "..file_name.." : ",err) ngx.exit(500) end end ngx.say(cjson.encode({success=true})) ``` #### 修改 Nginx 配置启用 Lua 处理程序 编辑站点可用配置文件 `/usr/local/openresty/nginx/conf/sites-available/default`, 添加 location 块指向上述 Lua 脚本路径: ```nginx location /upload { default_type text/html; access_by_lua_block { lua_package_path "./?.lua;;"; require("lualoader").run(); } client_max_body_size 8m; # 允许跨域资源共享(CORS),如果需要的话 add_header Access-Control-Allow-Origin * always; } ``` 重启 Nginx 生效更改后的配置。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值