我正在为用户构建一种方式来上传包含该曲目信息的曲目,但我想像YouTube那样异步地进行此操作。
目前有一个tracks
的API端点接受带有上传文件和所有元数据的POST请求。它处理轨道,验证所有内容,然后将路径保存到轨道及其数据库中的所有元数据。这很好用,但我无法想办法异步这样做。
用户流程为:
1)用户选择一首曲目并开始上传
2)填写元数据的表单显示,用户填写
3)跟踪上传及其元数据到端点
问题是元数据表单和文件上载现在是两个独立的实体,现在文件可以在保存元数据之前完成上载,反之亦然。理想情况下,为了克服这一点,轨道和元数据将作为cookie或其他内容保存在浏览器中,直到它们都完成为止。此时,两者都将被发送到端点,后端不需要进行任何更改。据我所知,没有办法像这样保存客户端文件。哦,除了几乎不赞成的文件系统API。
如果有人对如何做到这一点有任何好的建议,我将不胜感激。在一个完美的世界中,我希望根本不会对后端进行任何更改,但可能需要进行很少的更改。最好不要改变数据库。
哦顺便说一下,我使用laravel
和ember.js
,以防万一有人知道任何包已经这样做了。
答案 0 :(得分:2)
几个月前我已经考虑过这个问题了。
我设法放在一起的最接近的解决方案是上传文件并存储文件名,大小,上传时间(这是至关重要的)以及DB
中的其他属性(像往常一样)。此外,我添加了列temporary
(更像是一个标志),该列最初将设置为TRUE
,并且只有在您发送元数据后才会被否定。
另外,我已设置cron
作业(我使用Symfony2
,但Laravel
完全相同),每15-30分钟运行一次并删除这些文件(和相应的数据库记录)具有temporary = TRUE
并超过时间窗口。在我的情况下,它是15分钟,但你可以将它设置为粗糙(每小时左右)。
希望这有点帮助:)