开场:

查了两天文档,Error了38次,最后索性去掉所有附加条件,

连界面也不要了,在命令行里跑通了一坨最干瘪的Upload流程!

还冒着热气……

在此先做记录,明天可以搭配美美的界面继续调试了。

近来压抑的心情顿时舒畅了百分之十。

1. 注册以及相关配置:

注册一枚Amazon账户,如果你经常在Amazon上买买买,

那你其实已经有了Amazon的Retail账户,可以直接登录为AWS账户,

但要变身为这么高大上的账户,不出血怎么可能?

在这过程中,需要花费1美元的认证费用……

我把信用卡的信息输入后,未经验证就扣掉了1美元,吓尿,幸好是1美元而已!

登录后进到Security Credentials,新建一个Access Key。

如果你用Linux或OS X,在 ~/.aws/credentials 文件里写:

[default]
aws_access_key_id = Your Key Id
aws_secret_access_key = Your Access Key

如果你用Windows,我们不要做朋友了……

C:\Users\USER_NAME\.aws\credentials for Windows users 。。。

2. 安装依赖

mkdir 一枚目录比如名字叫:myAWS

创建package.json并写:

{
  "dependencies": {
    "aws-sdk": ">= 2.0.9",
    "node-uuid": ">= 1.4.1"
  }
}

这是我们需要用到的两个依赖。

保存后就可以帅帅的去 npm install 了!

3. 在Command Line里测试Upload

新建app.js,用node当然是先 require 了:

var AWS = require('aws-sdk');

var uuid = require('node-uuid');

然后缓存你的Bucket名字:var BUCKET_NAME = "testUpload";

(可以用uuid的v4给Bucket的name后面加随机字符串,后经测试发现不加它也能通过)

这个Bucket可以在AWS的console管理后台手动创建,

也可以在JS代码里createBucket(建议先 checkBucketExists)。

然后var s3 = new AWS.S3(); 创建了一个S3 client。

由于时间关系,今天只在命令行里完成了Upload,没有用到界面,

所以只写一个最简单的txt文件作为测试:

var keyName = "download-me.txt";

var keyBody = "Thank you for downloading me!";

现在可以妥妥的上床了:

……上传了:

s3.createBucket({Bucket: BUCKET_NAME}, function() {
  var params = {
    Bucket: BUCKET_NAME,
    Key: keyName,
    ACL: 'public-read',
    Body: keyBody
  };
  // (我只是注释T_T: ) s3.putObject(params, function(err, data){ /* putObject can only send back Etag, no Location. */
  s3.upload(params, function(err, data){
    if(err){
      console.log("Error! err =====> ", err);
    }else{
      var url = data['Location'];

      console.log("Successfully uploaded! URL =====> ", url );
    }
  });
});

注释的那句:putObject 由于它的回调只返回了Etag,没有Location,所以我用upload替代它。

参数ACL可以设置文件的访问权限,如果在这里不做设置,就必须在Console里找到对应的Bucket去添加Policy,

否则无法访问到上传后的文件。

添加Policy是一个无比虐心的过程,今天就不细说了,避免呕吐……

4. 结语

这是最简单最干瘪的Upload流程了。

我好饿。。。

用Node完成AWS S3的Upload流程之全世界最简版的更多相关文章

  1. aws.s3的 upload 和putObject有什么区别

    相同点:上传或新增一个object : <template> <div class="page"> <!-- 参考:https://blog.csdn ...

  2. Node开发文件上传系统及向七牛云存储和亚马逊AWS S3的文件上传

    背景起,有奏乐: 有伟人曰:学习技能的最好途径莫过于理论与实践相结合. 初学Node这货时,每每读教程必会Fall asleep. 当真要开发系统时,顿觉精神百倍,即便踩坑无数也不失斗志. 因为同团队 ...

  3. Upload a file with $.ajax to AWS S3 with a pre-signed url

    转载自:https://gist.github.com/guumaster/9f18204aca2bd6c71a24 生成预签名的Demo文档:https://docs.aws.amazon.com/ ...

  4. aws s3文件上传设置accesskey、secretkey、sessiontoken

    背景: 最近跟进的项目会封装aws S3资源管理细节,对外提供获取文件上传凭证的API,业务方使用获取到的凭证信息直接请求aws进行文件上传.因此,测试过程需要验证S3文件上传的有效性.aws官网有提 ...

  5. Amazon AWS S3 操作手册

    Install the SDK The recommended way to use the AWS SDK for Java in your project is to consume it fro ...

  6. Java通过aws java sdk在AWS S3上进行操作客户端

    有两种方式可以安装aws java sdk:方式一:可以在这个网站上下载适用于 Java 的 AWS 开发工具包https://aws.amazon.com/cn/sdk-for-java/点击网页右 ...

  7. AWS S3 对象存储服务

    虽然亚马逊云非常牛逼,虽然亚马逊云财大气粗,虽然亚马逊用的人也非常多,可是这个文档我简直无法接受,特别是客服,令人发指的回复速度,瞬间让人无语,可是毕竟牛逼.忍了,躺一次坑而已 1.图片上传 1.1 ...

  8. [AWS] S3 Bucket

    云存储服务 2.1 为网站打开属性 属性和权限设置 设置bucket属性,打开功能:Static website hosting(静态网站托管) 设置bucket权限,Permissions ---- ...

  9. 【原创】aws s3 lambda缩略图生成

    参考资料: https://github.com/sagidm/s3-resizer https://aws.amazon.com/cn/blogs/compute/resize-images-on- ...

随机推荐

  1. 迷你MVVM框架 avalonjs 学习教程21、双向绑定链

    avalon的双向绑定机制,是通过一条依赖链实现.此依赖链最底层是监控属性.监控数组,中层是计算属性.监控函数,再上点是求值函数,最上层是视图刷新函数. 所谓计算属性,监控属性,监控函数属性,我们改变 ...

  2. Ansible develop module

    def cnf(action,configs,path): message = "Modify %s\n" %path changed = False if action == & ...

  3. https 证书传递、验证和数据加密、解密过程解析

    我们都知道HTTPS能够加密信息,以免敏感信息被第三方获取.所以很多银行网站或电子邮箱等等安全级别较高的服务都会采用HTTPS协议. HTTPS简介 HTTPS其实是有两部分组成:HTTP + SSL ...

  4. 杨辉三角(生成器generator)

    生成器:(Python中,这种一边循环一边计算的机制,称为生成器:generator) 创建generator的方法: 1.把列表生成式的[]变为(),就创建了一个generator 例: 可以通过n ...

  5. 阿里云SSL证书tomcat配置

    1. SSL证书申请 登录阿里云控制台,查看购买域名中有SSL证书的申请,ssl证书申请中有单域名的申请,配置要申请的域名信息(注意:一个域名下,一次只能添加一个证书,最多申请3个免费证书用于测试), ...

  6. for循环计算阶乘

    int x = 10; for(int y = x - 1; y >= 1; y--) { x = x * y; } System.out.println(x); 从10乘到1的阶乘写法. lo ...

  7. for of 与 for in 的区别

    遍历数组通常使用for循环,ES5的话也可以使用forEach,ES5具有遍历数组功能的还有map.filter.some.every.reduce.reduceRight等,只不过他们的返回结果不一 ...

  8. hdoj3038(带权并查集)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3038 题意:对于给定的a1..an,通过询问下标x..y,给出a[x]+...+a[y],但给出的值可 ...

  9. 对象池 object pool

    对象池适用于: 对象的创建很耗时 对象频繁地释放再创建 对象池的实现:将释放的对象放进对象池中,在新建对象时,从对象池取对象 public class ObjectPool<T> wher ...

  10. MySQL中执行sql语句错误 Error Code: 1093. You can't specify target table 'car' for update in FROM clause

    MySQL中执行sql语句错误 Error Code: 1093. You can't specify target table 'car' for update in FROM clause 201 ...