Dropbox Saver可以接受来自createObjectURL()的数据吗?

时间:2014-10-20 01:25:00

标签: javascript file dropbox-api

The Dropbox Chooser and Saver tools对于这两项任务似乎非常酷:

  • 让用户从他们的Dropbox中选择一个文件,该页面可以下载它(即Dropbox-to-client)。
  • 让用户在Dropbox中选择一个目的地,以保存位于服务器某个URL上的文件(即服务器到Dropbox)。

那是不对称的。 This StackOverflow question询问是否可以直接从客户端向Dropbox Saver发送文件。 (如果编写一个仅限客户端的应用程序,希望Dropbox代表服务器,这尤其方便。)

一个答案中的评论说核心API或Sync API可以这样做。但如果不需要,引入那些更复杂的API将是一种耻辱; Chooser和Saver非常易于使用。此外,我不清楚在这种情况下,Saver提供的UI是否仍然可用。

我的问题:将文件从客户端(例如,createObjectURL网址中的数据)保存到用户Dropbox的最简单方法是什么? ,如果可能的话仍然使用Saver UI? (最简单的"我的意思是简短,易于阅读和维护的代码。)具体的JavaScript代码将是理想的。

1 个答案:

答案 0 :(得分:1)

正如James Foster在上面的评论中所述,Dropbox现在接受数据URI。因此,如果一个人拥有数据URI形式的数据,可以按照记录的here来调用Dropbox.save(dataURI,filename,options)

但是存在一个小问题:要创建数据URI,通常的方式(使用FileReader)需要异步调用readAsDataURL。但Dropbox.save()只能在响应用户交互(例如点击)时被调用。因此,在单击处理程序中,如果必须首先异步创建数据URI,那么当您进入回调时,将无法再调用Dropbox.save()函数。

就我而言,可以在没有FileReader API的情况下创建数据URI,因为我只存储HTML数据。可以简单地编写"data:text/html,"+encodeURIComponent(myHTMLData)来创建数据URI,如文档here所述。对于非文本数据,解决方案不起作用,并且您必须尝试更复杂的事情,或许比较记录here