Snaží nastavit hlavičkou ContentDisposition na PutObjectCommand výsledky v 403 forbidden

0

Otázka

Nahrát soubory na S3 úspěšně s mou žádost. Mám přímé nahrávání z prohlížeče pomocí signedUrl, že můj server generuje pro mě pomocí aws sdk v3.

Dostat spálené URL to vypadá trochu jako toto

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;
    }
};

To funguje naprosto v pořádku, ale pak když jsem si četl trochu v dokumentaci jsem viděl, že bych měl být schopen nastavit hlavičkou ContentDisposition. V této dokumentaci je napsáno, že vstup PutObjectCommand sahá od PutObjectRequest

Ten má volitelný parametr, tzv. ContentDisposition jako bych chtěl nastavit na přílohu, dovolte mi, abych řádku "stažení" okna pro své uživatele. Nicméně, když jsem se použít signedURL jako výše, ale přidat ContentDisposition:'attachment' pole jsem se dostat Zakázáno Chyby.

Ví někdo, jestli jsem něco chybí tady? není to skutečná možnost, nebo musím něco změnit v mém oprávnění S3?

1

Nejlepší odpověď

1

Musíme zadat ContentDisposition pro PutObjectCommand param a také pro getSignedUrl funkce jako takové:

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

V jiných jazycích

Tato stránka je v jiných jazycích

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