Javascript 异步上传文件,然后保存相关数据

Javascript 异步上传文件,然后保存相关数据,javascript,html,ember.js,laravel,upload,Javascript,Html,Ember.js,Laravel,Upload,我正在为用户建立一种上传曲目信息的方法,但我希望像YouTube一样异步完成这项工作 目前有一个API端点tracks,它接受上传文件和所有元数据的POST请求。它处理轨迹,验证所有内容,然后将轨迹路径及其所有元数据保存在数据库中。这工作得很完美,但我很难想出异步实现这一点的方法 用户流将是: 1) 用户选择一个曲目并开始上传 2) 填写元数据的表单显示,用户填写 3) 将跟踪及其元数据上载到端点 问题是元数据表单和文件上载现在是两个独立的实体,现在文件可以在保存元数据之前完成上载,反之亦然。理

我正在为用户建立一种上传曲目信息的方法,但我希望像YouTube一样异步完成这项工作

目前有一个API端点
tracks
,它接受上传文件和所有元数据的POST请求。它处理轨迹,验证所有内容,然后将轨迹路径及其所有元数据保存在数据库中。这工作得很完美,但我很难想出异步实现这一点的方法

用户流将是:

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

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

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

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

如果有人对如何做到这一点有任何好的建议,我们将不胜感激。在一个完美的世界里,我希望后端没有任何变化,但可能需要很少的变化。最好不要修改数据库


哦,顺便说一句,我正在使用
laravel
ember.js
,以防有人知道任何包已经在这样做了

几个月前我就考虑过这个问题

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

另外,我设置了
cron
作业(我使用了
Symfony2
,但在
Laravel
中是一样的),它将每15-30分钟运行一次,并删除那些具有
temporary=TRUE
且超过时间窗口的文件(以及相应的数据库记录)。在我的例子中,它是15分钟,但你可以设置为粗糙(每小时左右)


希望这有点帮助:)

没有一个问号,没有代码示例。。你到底在问什么?当然最好将曲目和元数据都上传到服务器,并存储一个不完整的记录,直到两者都完成为止?还是我没抓住重点?不管怎样,这对StackOverflow来说都不是一个好问题。谢谢,这是一个与我刚才所想的类似的解决方案。然而,我正在考虑进一步抽象数据库,并将任何临时上传信息保存到另一个表中,然后在保存meta后将其移动到tracks表中。这也应该起作用