6

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

我想上传一个可能以前上传过的文件,也可能没有上传过。我知道父文件夹 ID 和文件名。我需要覆盖现有文件或至少再次调用以查看该文件是否已存在。我看不到使用 v2 API 的任何方法。

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

  1. 在 v1 中,有一种方法可以在上传调用中指定覆盖。据我所知,v2 中没有这样的东西。我对么?是否会将覆盖标志重新添加到 API 中?
  2. 给定一个文件名,我如何查看它是否已经存在于特定的父文件夹中?

对我来说,这是相当基本的东西,所以也许我错过了一些相当明显的东西?

4

5 回答 5

7
  1. 如果文件夹中已存在同名文件,则上传文件方法将失败是正确的。如果要覆盖已知文件,请考虑使用上传文件的新版本方法。
  2. 如果您知道父文件夹的 ID,则可以使用Retrieve a Folder's Items方法来获取该文件夹中的项目列表。每个项目都有一个name可用于比较的id属性和一个可与上述上传文件的新版本方法结合使用的属性。
于 2013-05-29T02:10:24.137 回答
3

框上文件的文件 ID 与您正在上传的文件名称相同,并在错误消息响应中输出以获取它,$data->context_info->conflicts->id然后使用它通过 Upload a New Version of a File 方法覆盖文件

于 2013-10-15T10:53:35.587 回答
1

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

当您尝试下载文件时,请在没有“跟随重​​定向”选项的情况下进行 cURL 调用。如果响应是 302(带有实际下载链接),则您知道该文件存在。如果您收到 404,则它不存在。

对于上述情况,重要的是指定 cURL 不应跟随重定向,否则如果文件确实存在,您最终将下载它。

于 2013-05-28T20:43:21.727 回答
0

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

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

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

于 2013-10-15T13:34:24.187 回答
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))

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

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

items = client.search().query(query='"{}"'.format(filename), limit=100, ancestor_folders=[folder])
    
于 2021-04-15T10:48:10.607 回答