Я реализовал загрузочный образ, но по любой причине, когда файл загружается, страница перенаправляется на домашнюю страницу.
Реагирует на страницу js со ссылкой для загрузки и функцией:
<TableCell>
<Link to={'/'}>
<span onClick={e => downloadDigitalImage(param1, param2)}>Download</span>
</Link>
</TableCell>
function downloadDigitalImage (img, name) {
fetch(process.env.REACT_APP_HOST + '/decodeDigitalFile', {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify({
image: img,
name: name
})
})
.then(response => response.json())
.then(response => {
window.open(process.env.REACT_APP_HOST + '/download?namefile=' + response.file, '_self')
})
.catch(error => {
console.log(error)
})
}
Вкл.сервер, используя nodejs + express, я сначала декодирую файл, а затем загружаю его
app.post('/decodeDigitalFile', function (req, res, next) {
file = req.body.image
var Readable = require('stream').Readable
const imgBuffer = Buffer.from(file, 'base64')
var s = new Readable()
s.push(imgBuffer)
s.push(null)
s.pipe(fs.createWriteStream(req.body.name))
return res.status(200).send({ file: req.body.name });
})
app.get('/download', function (req, res) {
console.log('down')
const file = __dirname + '/' + req.query.namefile;
res.download(file);
});
В ответ у меня есть компонент с именем search
(домашняя страница), этот компонент отправляет states
черезlocation
к компоненту searchDetailed
.searchDetailed
- это компонент, где находится ссылка для скачивания.