พยายามที่จะตั้งค่าส่วนหัว ContentDisposition บ PutObjectCommand ผลใน 403 ต้องห้าม

0

คำถาม

ฉันอัปโหลดแฟ้มเพื่อ S3 เรียบร้อยแล้กับของโปรแกรม ฉันทำโดยตรงอัปโหลดจากห้องเบราว์เซอร์ใช้ signedUrl นั่นของฉันสร้านเซิร์ฟเวอร์สำหรับฉันใช้ aws-sdk v3.

จะต้องไปที่ singed ที่อยู่ URL มันดูเหมือนนี้

const s3Params = {
        Bucket : bucketName,
        Key : fileName,
        ContentType:fileType,
        // Metadata:{'Content-Disposition':'attachment'}
        // ContentDisposition:'attachment'
    };


    try {
        const command = new PutObjectCommand(s3Params);

        const url = await getSignedUrl(s3v3,command,{expiresIn:60});
        return url;
    } catch (e) {
        console.log('************** there was an error signing th url');
        console.log(e);
        throw e;
    }
};

นี่คือทำงานไม่เป็นไรแต่ที่ผมอ่านนิดหน่อของเอกสารที่ฉันเห็นว่าฉันควรจะสามารถตั้งค่าส่วนหัว ContentDisposition. อยู่ นี่เอกสาร มันบอกว่าข้อมูลของ PutObjectCommand เพิ่มพูนจากค PutObjectRequest

อย่างหลัมีตัวเลือกเพิ่มเติมพารามิเตอร์โทรมา ContentDisposition ที่ฉันต้องการจะตั้งค่าตรงนี้เพื่อให้สิ่งที่แนบมาด้วยเพื่ออนุญาตให้ฉันเพื่อให้มีการถามว่า"ดาวน์โหลด"หน้าต่างสำหรับผู้ใช้. อย่างไรก็ตามเมื่อฉันใช้ห้อ signedURL ที่ด้านบนแต่เพิ่ม ContentDisposition:'attachment' สนามฉันมีเรื่องต้องห้ามผิดพลาด

มีใครรู้ว่าข้อความด่วนทันใจหายไปอะไรที่นี่? นี่มันไม่จริงตัวเลือกหรือฉันต้องการที่จะแก้ไขอะไรบางอย่างในของฉันสิทธิ์ที่อนุญาตของ S3 สำหรับเรื่องนี้?

1

คำตอบที่ดีที่สุด

1

เราต้องสำหรับกำหนด ContentDisposition สำหรับ PutObjectCommand param แล้วก็สำหรับคน getSignedUrl ฟังก์ชันเป็นเรื่อง:

async function main(fileName, bucketName, fileType) {
    const s3Params = {
        Bucket: bucketName,
        Key: fileName,
        ContentType: fileType,
        ContentDisposition: 'attachment'
    };

    const client = new S3Client({region: 'us-east-1'});
    const command = new PutObjectCommand(s3Params);

    const url = await getSignedUrl(client, command, {expiresIn: 60, ContentDisposition: 'attachment'});

    const file = await fs.readFile(fileName);

    const result = await axios({
        method: 'put',
        url,
        data: file,
        headers: {
            'Content-Type': fileType,
            'Content-Disposition': 'attachment'
        }
    });

    return result;
}
2021-10-30 20:29:21

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่