Метаданные AWS S3 не извлекаются после загрузки с использованием @aws-sdk/client-s3Javascript

Форум по Javascript
Ответить
Anonymous
 Метаданные AWS S3 не извлекаются после загрузки с использованием @aws-sdk/client-s3

Сообщение Anonymous »

Я сталкиваюсь с проблемой, в которой пользовательские метаданные, установленные во время загрузки файлов в AWS S3, используя @aws-sdk/client-s3 , не получается при получении метаданных объекта позже.
Загрузка кажется успешной, и я вижу файлы в моем ведре. Однако, когда я пытаюсь извлечь метаданные, используя HeadObjectCommand , свойство метаданных ответа неизменно пусто.

Код: Выделить всё

import { S3Client, PutObjectCommand, GetObjectCommand, HeadObjectCommand, ListObjectsV2Command } from '@aws-sdk/client-s3';

const s3Client = new S3Client({
region: 'MyRegion',
credentials: {
accessKeyId: 'MyAccessKey',
secretAccessKey: 'MySecretAccessKey',
},
});

export const BUCKET_BASE_URL = "MyBucketBaseURL";

export const getHrefAgainstKey = (key) => {
return `${BUCKET_BASE_URL}${key}`;
};

const S3MediaUploader = () => {
const [file, setFile] = useState(null);
const [metadata, setMetadata] = useState({ title: '', description: '' });
const [uploadedMedia, setUploadedMedia] = useState([]);
const [loading, setLoading] = useState(false);
const bucketName = 'MyBucketName';

const handleFileChange = (e) => {
setFile(e.target.files[0]);
};

const handleMetadataChange = (e) => {
setMetadata({ ...metadata, [e.target.name]: e.target.value });
};

const handleUpload = async () => {
if (!file) {
alert('Please select a file.');
return;
}

setLoading(true);

const reader = new FileReader();

reader.onload = async (event) => {
const arrayBuffer = event.target.result;
const uint8Array = new Uint8Array(arrayBuffer);

const params = {
Bucket: bucketName,
Key: file.name,
Body: uint8Array,
Metadata: {
title: metadata.title.toLowerCase(),
description: metadata.description.toLowerCase(),
},
ACL: "public-read",
ContentType: file.type,
};

try {
const response = await s3Client.send(new PutObjectCommand(params));
alert('File uploaded successfully!');
setFile(null);
setMetadata({ title: '', description: '' });
fetchMedia();
} catch (error) {
console.error('Error uploading file:', error);
alert('Error uploading file.');
} finally {
setLoading(false);
}
};

reader.onerror = () => {
console.error('Error reading file.');
setLoading(false);
};

reader.readAsArrayBuffer(file);
};

const fetchMedia = async () => {
setLoading(true);
try {
const response = await s3Client.send(new ListObjectsV2Command({ Bucket: bucketName }));
if (response.Contents) {
const media = await Promise.all(
response.Contents.map(async (item) => {
const getObjectParams = {
Bucket: bucketName,
Key: item.Key,
};

const //Empty Metadata = await s3Client.send(new HeadObjectCommand(getObjectParams));   **// Getting Empty Metadata.Metadata**
return {
key: item.Key,
href: getHrefAgainstKey(item.Key),
url: BUCKET_BASE_URL,
metadata: {metadataResponse.Metadata},
};
})
);
setUploadedMedia(media);
} else {
setUploadedMedia([]);
}
} catch (error) {
console.error('Error fetching media:', error);
} finally {
setLoading(false);
}
};
IAM Политика пользователя:

Код: Выделить всё

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:*",
"s3tables:*",
"iam:PassRole"
],
"Resource": "*"
}
]
}
зависимости:
"dependencies": {
"@aws-sdk/client-s3": "^3.749.0",
}
< /code>
Устранение неисправностей, предпринятые: < /strong>
подтвердил, что процесс загрузки завершается без ошибок.
подтвердил, что файлы присутствуют в ковше S3.
попробовал использование как headObjectCommand < /code>, так и GetObjectCommand < /code> для получения метаданных.
Проверенные разрешения пользователя IAM для обеспечения полного доступа S3.
обеспечил, чтобы ключи метаданных были строчных (в соответствии с. Требования S3). < /P>
ожидаемое поведение: < /strong>
Я ожидаю, что свойство метаданных HeadObjectCommand или GetObjectCommand, чтобы содержать значения заголовка и описание, установленные во время загрузки .
Фактическое поведение:

свойство метаданных неизменно пусто.>

Подробнее здесь: https://stackoverflow.com/questions/794 ... -client-s3
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»