异步上载文件然后保存有关它的数据

时间:2014-05-28 11:19:53

标签: javascript html5 ember.js laravel upload

我正在为用户构建一种方式来上传包含该曲目信息的曲目,但我想像YouTube那样异步地进行此操作。

目前有一个tracks的API端点接受带有上传文件和所有元数据的POST请求。它处理轨道,验证所有内容,然后将路径保存到轨道及其数据库中的所有元数据。这很好用,但我无法想办法异步这样做。

用户流程为:

1)用户选择一首曲目并开始上传

2)填写元数据的表单显示,用户填写

3)跟踪上传及其元数据到端点

问题是元数据表单和文件上载现在是两个独立的实体,现在文件可以在保存元数据之前完成上载,反之亦然。理想情况下,为了克服这一点,轨道和元数据将作为cookie或其他内容保存在浏览器中,直到它们都完成为止。此时,两者都将被发送到端点,后端不需要进行任何更改。据我所知,没有办法像这样保存客户端文件。哦,除了几乎不赞成的文件系统API。

如果有人对如何做到这一点有任何好的建议,我将不胜感激。在一个完美的世界中,我希望根本不会对后端进行任何更改,但可能需要进行很少的更改。最好不要改变数据库。

哦顺便说一下,我使用laravelember.js,以防万一有人知道任何包已经这样做了。

1 个答案:

答案 0 :(得分:2)

几个月前我已经考虑过这个问题了。

我设法放在一起的最接近的解决方案是上传文件并存储文件名,大小,上传时间(这是至关重要的)以及DB中的其他属性(像往常一样)。此外,我添加了列temporary(更像是一个标志),该列最初将设置为TRUE,并且只有在您发送元数据后才会被否定。

另外,我已设置cron作业(我使用Symfony2,但Laravel完全相同),每15-30分钟运行一次并删除这些文件(和相应的数据库记录)具有temporary = TRUE并超过时间窗口。在我的情况下,它是15分钟,但你可以将它设置为粗糙(每小时左右)。

希望这有点帮助:)