Я сделал возможность скачивать файлы.
Код хорошо работает в веб-браузерах ПК, но не в мобильных веб-браузерах. Буду признателен, если вы знаете, как это работает на мобильном телефоне.
const filePath = findFile[0].path;
const fileName = findFile[0].filename;
const mimetype = mime.getType(filePath);
// Header setting
res.setHeader('fileName', encodeURIComponent(fileName));
res.setHeader('Content-type', mimetype);
res.setHeader('Content-Disposition', 'attachment; filename=' + encodeURIComponent(fileName));
// aws s3 file
const params = {
Bucket: 'flag-kog',
Key: `${username}/${fileName}`
};
s3.getObject(params)
.createReadStream()
.pipe(res);
componentDidMount() {
const {
username,
flagname
} = this.props.match.params;
axios({
url: `/api/files/download/${username}/${flagname}`,
method: 'GET',
responseType: 'blob',
})
.then(res => {
const filename = decodeURIComponent(res.headers.filename);
this.setState({
filename,
});
// Download
const url = window.URL.createObjectURL(new Blob([res.data]));
const link = document.createElement('a');
link.href = url;
link.setAttribute('download', filename);
document.body.appendChild(link);
link.click();
this.setState({
downloading: true,
});
})
.catch(() =>
this.setState({
err: true,
})
);
}