#reactjs #amazon-web-services #amazon-s3 #state
#reactjs #amazon-веб-сервисы #amazon-s3 #состояние
Вопрос:
Я думаю, что у меня есть простой вопрос, на который я не нашел ответа, который бы мне подошел.
Основная идея такова: как только пользователь загрузит изображение в aws s3, оно отобразится (чтение из базы данных все еще продолжается, но оно будет работать, как показано ниже /-).
Почему приведенный ниже img не отображается в React, если я настрою его вручную, он будет работать. :
handleFiles = async (e) => {
const uploadedImage = await uploadFile(e.target.files[0]);
this.setState({imgLink:uploadedImage})
};
state = {
imgLink: "../../../images/person-01.jpg",
};
render() {
.....
<div className="bg-transfer">
<img src={this.state.imgLink} alt="" />
</div>
.....
<div className="single-file-input">
<input
type="file"
id="user_image"
name="user_image"
onChange={this.handleFiles}
/>
Отправить файл:
import S3FileUpload from "react-s3";
const ID = "";
const SECRET = "";
//If bucket not set, getting 400 error.
const BUCKET_NAME = "";
//If Region not set then this isn't working, getting 400 error
const REGION_NAME = "";
const config = {
bucketName: BUCKET_NAME,
/*dirName: 'media', /* optional */
region: REGION_NAME,
accessKeyId: ID,
secretAccessKey: SECRET,
/*s3Url: 'https:/your-custom-s3-url.com/', /* optional */
};
export const uploadFile = async (file) => {
try {
const response = await S3FileUpload.uploadFile(file, config)
return response.location;
} catch (error) {
console.log(error);
}
};
Я пытался использовать imgLink: ""../../../images/person-01.jpg"",
, так как думал, что мне не хватает ссылок, но это тоже не сработало. Поскольку я буду читать путь из MongoDB, я не могу просто импортировать изображение, но потребуется его динамическое изменение.
Какой синтаксис следует использовать здесь?
Ответ №1:
uploadedImaged
вероятно, это недопустимая URL-ссылка, если функция uploadFile
не возвращает URL-адрес, сгенерированный для файла. Вы должны обновить состояние URL-адресом для файла, созданного в s3.
Комментарии:
1. 1) Я инициализирую состояние, как указано выше, не вызывая его ниоткуда. 2) Как только я обновлю файл изображения, я бы хотел установить состояние с новым URL-адресом, и это должно отобразить новый файл. 3) Извините, что не добавил функцию загрузки, это был бы пользовательский ввод.
2. @RaitisLebedevs, какое возвращаемое значение uploadFile ?
3. это ссылка на изображение, которое было размещено на aws s3. Ни по умолчанию, ни ссылка не работают. Например. Если бы я мог отобразить ссылку, если бы я жестко запрограммировал установленное состояние, это работало бы хорошо.
4. добавлено к деталям, но это не имеет большого значения, поскольку не может отображать изображение из состояния, если я жестко закодирую там значение.
Ответ №2:
Я не совсем уверен, почему я все еще не могу использовать состояние для URL-адреса img, но оказывается, что если вы берете URL-адрес непосредственно из MongoDB и помещаете в HTML, он отображается. Это то, что я хотел сначала.
На этот раз средний этап разработки не был необходим.