在尝试上载之前,BOX v2 API用于覆盖文件或检查文件

时间:2013-05-28 19:37:28

标签: box-api

我是BOX API的新手,所以使用了API的v2。我正在从我的应用程序本地进行REST调用。

我想上传以前上传过或未上传过的文件。我知道父文件夹ID和文件名。我需要覆盖现有文件或至少再次调用以查看该文件是否已存在。 我无法使用v2 API进行操作。

我可以毫无问题地上传文件。但是,如果文件已经存在,我当然会收到错误。

  1. 在v1中,有一种方法可以在上传调用中指定覆盖。据我所知,在v2中没有这样的事情。我对么?是否会将覆盖标志添加回API?
  2. 如果是文件名,我怎么知道它是否已存在于特定的父文件夹中?
  3. 对我而言,这是相当基本的东西,所以也许我错过了一些相当明显的东西?

5 个答案:

答案 0 :(得分:6)

  1. 如果文件已存在, Upload a File 方法将失败,这是正确的。如果要覆盖已知文件,请考虑使用 Upload a New Version of a File 方法。
  2. 如果您知道父文件夹的ID,则可以使用 Retrieve a Folder's Items 方法获取该文件夹中的项目列表。每个项目都有一个name属性,您可以将其用于比较,还有一个id属性,您可以将其与上传新版本的文件结合使用上面提到的方法。

答案 1 :(得分:3)

文件框中的文件ID与您上传的文件ID在错误消息响应中输出,只需调用$data->context_info->conflicts->id然后使用它来覆盖文件上传新版本文件方法

答案 2 :(得分:1)

您要在API的v2中更正,上传已存在的文件会导致错误。您可以做的是在上传之前检查文件是否存在。

当您尝试download a file时,请在没有“关注重定向”选项的情况下拨打cURL电话。如果响应是302(具有实际下载链接),则表示该文件存在。如果你得到404,它就不存在了。

对于上述内容,重要的是指定cURL不应该遵循重定向,否则如果文件存在,您将最终下载它。

答案 3 :(得分:0)

目前,您可以搜索文件,而不是使用搜索终结点扫描文件夹树:

http://developers.box.com/docs/#search

在结果中,您可以比较您正在查找的父文件夹的名称或ID。

答案 4 :(得分:0)

对于python的人,可以使用下面的代码。

def upload_file_to_box(client, folder_id, filename):
        folder = client.folder(folder_id=folder_id)
        items = folder.get_items()
        for item in items:
            if item.name == filename:
                updated_file = client.file(item.id).update_contents(item.name)
                print('File "{0}" has been updated'.format(updated_file.name))
                return
        uploaded_file = folder.upload(filename)
        print('File "{0}" has been uploaded'.format(uploaded_file.name))

这将检查特定文件名并将其与文件夹中的所有文件名进行比较,如果存在则更新新版本,否则上传新文件。

您也可以使用以下代码使用 search API 搜索文件夹内的文件名。但是搜索 API 有 10 分钟或更长时间的延迟。

items = client.search().query(query='"{}"'.format(filename), limit=100, ancestor_folders=[folder])