Я искал способ записи в файл JSON в сегменте S3 с предварительно подписанного URL-адреса.Из моего исследования видно, что это можно сделать, но это не в Node:
Не могу найти решение Node из моих поисков и использоватьAPI стороннего производителя Я пытаюсь записать обратный вызов в JSON, который находится в корзине S3.Я могу создать предварительно подписанный URL без проблем, но когда я пытаюсь записать фиктивный текст в предварительно подписанный URL, я получаю:
Ошибка: ENOENT: нет такого файла или каталога, откройте 'https://path -to-file-with-sign-url '
Когда я пытаюсь использовать writeFile
:
fs.writeFile(testURL, `This is a write test: ${Date.now()}`, function(err) {
if(err) return err
console.log("File written to")
})
и мое понимание документация под file
говорит, что я могу использовать URL.Я начинаю верить, что это может быть проблема с разрешениями, но я не нахожу никакой удачи в документации.
После реализации node-fetch
я все еще получаю ошибку (403 Forbidden
) при записи в файл в S3 на основе предварительно подписанного URL, вот полный код из написанного мной модуля:
const aws = require('aws-sdk')
const config = require('../config.json')
const fetch = require('node-fetch')
const expireStamp = 604800 // 7 days
const existsModule = require('./existsModule')
module.exports = async function(toSignFile) {
let checkJSON = await existsModule(`${toSignFile}.json`)
if (checkJSON == true) {
let testURL = await s3signing(`${toSignFile}.json`)
fetch(testURL, {
method: 'PUT',
body: JSON.stringify(`This is a write test: ${Date.now()}`),
}).then((res) => {
console.log(res)
}).catch((err) => {
console.log(`Fetch issue: ${err}`)
})
}
}
async function s3signing(signFile) {
const s3 = new aws.S3()
aws.config.update({
accessKeyId: config.aws.accessKey,
secretAccessKey: config.aws.secretKey,
region: config.aws.region,
})
params = {
Bucket: config.aws.bucket,
Key: signFile,
Expires: expireStamp
}
try {
// let signedURL = await s3.getSignedUrl('getObject', params)
let signedURL = await s3.getSignedUrl('putObject', params)
console.log('\x1b[36m%s\x1b[0m', `Signed URL: ${signedURL}`)
return signedURL
} catch (err) {
return err
}
}
Просмотр разрешений У меня нет проблем с загрузкой и доступом для записи, установленной в разрешениях.В Узле, как я могу записать файл в корзину S3, используя предварительно подписанный URL этого файла в качестве пути?