1

我使用 filepond 在 react 上上传文件:

<FilePond files={this.state.files} allowMultiple={true} server="http://localhost:5000/api/upload" onupdatefiles={(fileItems) => { this.setState({ files: fileItems.map(fileItem => fileItem.file) }); this.handleFileMetadata(); }} />

现在来处理我正在使用快递的文件上传

router.post('/upload', (req, res) => {
// logic to store file on mongodb
})

要删除上传的临时文件,filepond 会向上述服务器发送 DELETE req

所以我用

router.delete('/upload', (req, res) => {
})

但是我无法从 mongodb 中删除文件,如何在没有任何属性的情况下删除它?

4

1 回答 1

0

删除MongoDB中的文件记录,需要声明需要删除的文件记录。无论如何,MongoDB 不会自动知道您的意图。

文件记录的声明方式有以下几种:

  • (推荐解决方案)在POST /upload路由器中,将插入的文件记录id返回给前端(例如5b88a6b213d0613d198d7ecf)。然后,在以下DELETE /upload/:recordId请求中,前端会将插入的文件记录 ID 传递给后端,例如DELETE /upload/5b88a6b213d0613d198d7ecf. 接下来,Node.js 代码可以提取要删除的文件 id 并在 MongoDB 中进行相应的操作。
  • 如果是临时文件,需要在上传后立即删除,并且由于某种原因(奇怪的情况)无法按照上述解决方案,如果Web应用程序是基于会话的,则可以使用Session:在POST /upload路由器中,存储在会话中并在下一个请求中latestFileId检索会话值。latestFileIdDELETE /upload
  • 如果是临时文件,上传后需要立即删除,又不知什么原因(奇怪的情况)不能按照第一种解决方案,而且web应用是session-less的,可以使用Cookie:在POST /uploadrouter中,在下一个请求中使用并检索cookie 值发送latestFileId到浏览器。Set-CookielatestFileIdDELETE /upload
于 2019-05-06T06:30:26.483 回答