Files
electerm--electerm/build/bin/upload-file-to-r2.js
T
2026-07-13 12:46:20 +08:00

54 lines
1.4 KiB
JavaScript

const fs = require('fs')
const path = require('path')
async function main () {
const filePath = process.argv[2]
const key = process.argv[3] || path.basename(filePath || '')
if (!filePath) {
throw new Error('Usage: node build/bin/upload-file-to-r2.js <filePath> [key]')
}
if (!fs.existsSync(filePath)) {
throw new Error(`File does not exist: ${filePath}`)
}
const accountId = process.env.CF_R2_ACCOUNT_ID
const bucket = process.env.CF_R2_BUCKET
const accessKeyId = process.env.CF_R2_ACCESS_KEY_ID
const secretAccessKey = process.env.CF_R2_SECRET_ACCESS_KEY
if (!accountId || !bucket || !accessKeyId || !secretAccessKey) {
throw new Error('Missing required env vars: CF_R2_ACCOUNT_ID, CF_R2_BUCKET, CF_R2_ACCESS_KEY_ID, CF_R2_SECRET_ACCESS_KEY')
}
const { S3Client, PutObjectCommand } = require('@aws-sdk/client-s3')
const client = new S3Client({
region: 'auto',
endpoint: `https://${accountId}.r2.cloudflarestorage.com`,
credentials: {
accessKeyId,
secretAccessKey
}
})
const fileStream = fs.createReadStream(filePath)
const command = new PutObjectCommand({
Bucket: bucket,
Key: key,
Body: fileStream,
ContentLength: fs.statSync(filePath).size,
ContentType: 'text/plain; charset=utf-8',
CacheControl: 'no-store'
})
await client.send(command)
console.log(`[r2] Uploaded ${filePath} to ${bucket}/${key}`)
}
main().catch(err => {
console.error(err)
process.exit(1)
})