小编Ben*_*dai的帖子

使用POST将文件上传到s3

我想通过POST接口将文件上传到AWS S3 ,但我没有这样做。

我已经使它可以与PUT和一起使用getSignedUrl,但是不幸的是,该接口不允许直接文件大小的限制。因此,我尝试使用POST接口,因为在那里可以使用'content-length-range'condition。

这是我的请求签名:

const aws = require('aws-sdk');

aws.config.update({
    signatureVersion: 'v4',
    region: 'eu-central-1',
    accessKeyId: config.aws.keyId,
    secretAccessKey: config.aws.keySecret
});

const s3 = new aws.S3();

return new Promise((resolve, reject) => {
    const params = {
        Bucket: config.aws.bucket,
        Fields: {
            key: filePath
        },
        Expires: config.aws.expire,
        Conditions: [
            ['acl', 'public-read'],
            ['content-length-range', 0, 10000000] // 10 Mb
        ]
    };
    const postUrl = s3.createPresignedPost(params, (err, data) => {
        resolve(data);
    });
});
Run Code Online (Sandbox Code Playgroud)

这部分似乎还可以,但是我不能使用所需的签名将文件上传到S3。

这是我所做的其他尝试:

request.post({
    url: payload.url,
    body: payload,
    form: …
Run Code Online (Sandbox Code Playgroud)

amazon-s3 node.js aws-sdk

11
推荐指数
1
解决办法
3701
查看次数

在 Knex 迁移中创建数据库

我认为从第一个数据库交互开始使用迁移是个好主意,所以我想为数据库创建创建迁移。

knexfile.js

'use strict';

require('dotenv').config({ path: 'process.env' });

const config =  {
  client: 'pg',
  connection: {
    host: process.env.DB_URL,
  },
};


module.exports = config;
Run Code Online (Sandbox Code Playgroud)

迁移文件:

'use strict';

exports.up = function(knex, Promise) {
  return knex.raw('CREATE DATABASE asd');
};

exports.down = function(knex, Promise) {
  return knex.raw('DROP DATABASE asd');
};

exports.config = {
  transaction: false
};
Run Code Online (Sandbox Code Playgroud)

到目前为止它工作正常,但是当我添加database到 knexfile 配置时,它无法迁移,因为 Knex 尝试连接到不存在的数据库。

我还尝试为这个单一的迁移使用一个新的 Knex 实例,例如:

exports.up = function(_, Promise) {
  // Remove database from config so Knex won't try to connect
  // to …
Run Code Online (Sandbox Code Playgroud)

sql migration postgresql knex.js

8
推荐指数
3
解决办法
7905
查看次数

无法从 GoLang 中的 /etc/profile 获取环境变量

我在 /etc/profile 中设置了一些环境变量,我可以从 bash 访问它们,但由于某种原因我无法从 Go 获取它们。

/etc/配置文件:

...
TEST_ENV=test_me
Run Code Online (Sandbox Code Playgroud)

我可以从 bash 访问它:

echo $TEST_ENV
test_me
Run Code Online (Sandbox Code Playgroud)

我无法从 GO 访问此变量

os.Getenv("TEST_ENV") // returns ""
Run Code Online (Sandbox Code Playgroud)

如果我列出可用的环境变量

os.Environ()
Run Code Online (Sandbox Code Playgroud)

我没有看到我正在寻找的变量,但有一些变量可能会有所帮助:

SHELL=/bin/sh
USER=root
LOGNAME=root
Run Code Online (Sandbox Code Playgroud)

我想我的问题与不同的会话和外壳有关,所以我什至尝试运行

exec.Command("source /etc/profile")
Run Code Online (Sandbox Code Playgroud)

并获取之后的变量,但它仍然没有返回任何内容。

您能给我一些如何获取在 /etc/profile 中设置的环境变量的提示吗?我更喜欢从该文件中获取它们,但如果有必要,我也可以将变量放在不同的位置。

bash environment-variables sh go

3
推荐指数
1
解决办法
2468
查看次数