我目前正在开发一个应该成为某种保管箱克隆的应用程序。我的想法是可以上传和下载文件,但是当文件存储在服务器上时,应该对其进行加密。
我已经开发了一个nodejs后端。后端使用express与前端进行通信,前端是带有axios的React应用程序。
升级和下载正常。我使用js-file-download和一个简单的输入标签来上传文件。
我的问题现在是加密/解密部分。我发现的所有库和示例仅适用于字符串或对象,不适用于文件。不知何故,我不明白如何像在代码中一样获取整个文件,提取信息,对其进行加密并将其再次存储在文件中。有人可以帮我一点吗?
下面您可以看到用于从前端升级和下载代码的代码片段。我认为有最好的加密和解密地方。
上传文件的代码
const uploadHandler = async (event) => {
event.preventDefault()
if(files.length === 0){
props.handleError('No files!', 5000)
}else if(checkMimeType()){
console.log('start uploading')
const data = new FormData()
for(var x = 0; x<files.length; x++) {
data.append('file', files[x])
}
const response = await fileService.sendFiles(data)
if(response.status === 200){
props.handleNotification(response.data, 5000)
props.getFiles()
}
else{
props.handleError(response.data, 5000)
}
setFiles([])
}
window.location.reload()
}
const onChangeHandler = (event) => {
event.preventDefault()
setFiles(event.target.files)
}
return (
<div className='container'>
<div className='row'>
<div className='col-md-15'>
<div className='form-group files' >
<Form method='POST' encType='multipart/form-data' onSubmit={uploadHandler} >
<input type='file' autoComplete='off' name='files' multiple onChange= {onChangeHandler}/>
<Button className='button' type="submit">Upload</Button>
</Form>
</div>
</div>
</div>
</div>
)
下载文件的代码:
const fileDownload = require('js-file-download')
const handleSingleDownload = async (file) => {
const response = await fileService.getFile(file.id)
console.log(response.data)
fileDownload(response.data, file.name)
props.handleNotification('Download started...', 2500)
}