我一直在尝试使用带有请求的方框v2 api上传文件.
到目前为止我运气不好.也许这里有人可以帮助我看看我实际上做错了什么.
file_name = "%s%s" % (slugify(sync_file.description), file_suffix)
file_handle = open(settings.MEDIA_ROOT + str(sync_file.document), 'rb')
folder_id = str(sync_file.patient.box_patient_folder_id)
r = requests.post(
files_url,
headers=headers,
files={
file_name: file_handle,
"folder_id": folder_id,
},
)
Run Code Online (Sandbox Code Playgroud)
我的身份验证有效,因为我正在使用相同的数据创建一个文件夹.
响应看起来像这样:
{
u'status': 404,
u'code': u'not_found',
u'help_url': u'http://developers.box.com/docs/#errors',
u'request_id': u'77019510950608f791a0c1',
u'message': u'Not Found',
u'type': u'error'
}
Run Code Online (Sandbox Code Playgroud)
也许这里的某个人遇到了类似的问题.
在本页面: http://developers.box.com/docs/
使用cURL上传文件:
METHOD
POST /files/content
EXAMPLE REQUEST
curl https://api.box.com/2.0/files/content \
-H "Authorization: BoxAuth api_key=API_KEY&auth_token=AUTH_TOKEN" \
-F filename1=@FILE_NAME1 \
-F filename2=@FILE_NAME2 \
-F folder_id=FOLDER_ID
Run Code Online (Sandbox Code Playgroud)
但是现在,我想用php上传文件,我怎么能这样做?我的代码:
<?php
$params = array();
$params['folder_id'] = '485272014';
$u_file = fopen("D:\code\php\bcs\test.data", "r");
$params['filename1'] = $u_file;
$params = json_encode($params);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://api.box.com/2.0/files/content");
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch, CURLOPT_UPLOAD, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Authorization: BoxAuth api_key=API_KEY&auth_token=TOKEN"));
$result = curl_exec($ch);
curl_close($ch);
print_r($result);
fclose($u_file);
?>
Run Code Online (Sandbox Code Playgroud)
它不起作用,我运行脚本使用: php -f …
Box api实现为RESTful.大多数支持的方法都基于ids,folder_id或file_id.
作为一个非常开始的起点,根文件夹id为0,代表根目录/ All Files /.
从那里(fold_id = 0),我可以遍历所有子文件夹并找到某个目标文件夹的文件夹ID.
或者我可以将搜索请求发送到" https://api.box.com/2.0/search?query=target_folder_name ",并处理响应以找到目标文件夹.
前一种方法可能需要多个list-folder-item请求,而后一种方法可能很慢,因为搜索不仅适用于文件夹/文件名,还适用于文件夹/文件甚至文件内容的其他属性.
我想知道是否有一种简单的方法来查找具有给定路径的特定文件夹的文件夹ID,例如"/ All Files/MyFolder_A/Project_11".
非常感谢您的帮助.
我最近将项目从Eclipse/Ant迁移到Android Studio/Gradle.我能够在启用proguard的情况下成功构建项目的签名发布版本.但是,在测试发布版本时,我遇到了某些库项目和jar(在构建调试版本时工作正常)的崩溃.
例如,当尝试将文件上传到Dropbox(jar依赖项)时,我收到以下错误:
java.lang.IncompatibleClassChangeError: interface not implemented
at com.dropbox.client2.session.AbstractSession.sign(SourceFile:238)
at com.dropbox.client2.DropboxAPI.putFileRequest(SourceFile:2199)
at com.dropbox.client2.DropboxAPI.putFileOverwriteRequest(SourceFile:1571)
at com.dropbox.client2.DropboxAPI.putFileOverwrite(SourceFile:1537)
Run Code Online (Sandbox Code Playgroud)
此外,当尝试登录Box(库项目依赖项)时,我收到以下错误:
java.lang.NoSuchMethodError: org.apache.http.conn.params.ConnManagerParams.setMaxTotalConnections
at com.box.restclientv2.BoxBasicRestClient.()
at com.box.boxjavalibv2.BoxRESTClient.()
at com.box.boxjavalibv2.BoxClient.createRestClient()
at com.box.boxjavalibv2.BoxClient.()
at com.box.boxandroidlibv2.BoxAndroidClient.(SourceFile:49)
at com.box.boxandroidlibv2.activities.OAuthActivity.startOAuth(SourceFile:71)
at com.box.boxandroidlibv2.activities.OAuthActivity.onCreate(SourceFile:52)
Run Code Online (Sandbox Code Playgroud)
我有其他罐子和图书馆项目工作得很好......
同样,在构建gradle调试版本时没有任何问题(没有proguard).我还能够创建一个发布版本,使用ant启用proguard,没有任何问题(能够登录Dropbox和Box).
有任何想法吗?
我正在使用.Net的Box API SDK,并尝试将其设置为使用JSON Web Tokens而不是OAuth2.
当我实例化BoxConfig对象时,我需要提供企业ID:
var config = new BoxConfig( clientId, clientSecret, enterpriseId, jwtPrivateKey, jwtPrivateKeyPassword, jwtPublicKeyId );
Run Code Online (Sandbox Code Playgroud)
看到一些有冲突的信息:
有人可以指出我在哪里,具体来说,我可以找到企业ID?
我刚刚将Box代码升级为OAuth2.
我们已经实现了允许用户在我们的Web服务器和他们的Box(以及SkyDrive,Dropbox,Google Drive)帐户之间传输文件的代码.用户的访问和刷新令牌存储在我们的数据库服务器中.
根据http://developers.box.com/oauth/,它表示 每个刷新令牌有效期为60天
SkyDrive和Drive都使用OAuth2,并且没有刷新令牌到期.是否可以使用非过期的刷新令牌?
某些应用程序可能不需要刷新令牌,因此您是否考虑引入新的OAuth2范围,例如
我使用Box Api获得了Access Token但它在1小时内到期.我想要的是,
要么我需要非过期访问令牌,要么通过将我的Box用户ID和密码传递给API来获取访问令牌.
如果可能的话,请让我知道.
提前致谢..
我已经阅读了整个Box.com开发者api指南并花了几个小时在网上研究这个特定的问题,但我似乎无法找到明确的答案,我不想开始创建一个解决方案,如果我要失败错误的道路.我们有一个生产环境,一旦我们完成文件处理,我们的生产软件系统就会将它们拉上来并将它们保存到本地服务器目录中以便存档.此本地路径无法更改.我的问题是如何以编程方式将这些文件上传到我们的Box.com帐户,以便我们可以在云上存档这些文件?我读到的关于此的所有内容都涉及使用OAuth2来访问我理解的帐户,但它也要求用户登录.由于这是一个不向外部用户公开的内部流程,我希望能够实现自动化,否则它对我们来说是不可行的.我没有问题创建程序以在每次保存新文件时触发所有我需要的是简化Box.com访问.
我正在尝试使用 Box API 将文件上传到 box.com。根据文档,curl 请求必须如下所示:
curl https://upload.box.com/api/2.0/files/content \
-H "Authorization: Bearer ACCESS_TOKEN" -X POST \
-F attributes='{"name":nameOftheFile, "parent":{"id":parentId}}' \
-F file=@file
Run Code Online (Sandbox Code Playgroud)
这是我所做的:
$token = "......";
$url = https://upload.box.com/api/2.0/files/content;
$file_upload;
foreach ($_FILES['file']['name'] as $position => $file) {
$file_upload = $_FILES['file']['tmp_name'][$position];
}
$json = json_encode(array('name' => $file ,array('parent' => array('id' => 0))));
$attrs = array('attributes' => $json,'file'=>'@'.$file_upload);
$this->post($url,($attrs));
// Post function
function post($url,$fields){
try {
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Authorization: Bearer '.$this->token
));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用以下代码通过 API从Box.com下载文件。
<cfhttp url="https://api.box.com/2.0/files/(FILE_ID)/content/" method="GET" redirect="true" >
<cfhttpparam type="header" name="Authorization" value="Bearer (DEVELOPER_TOKEN)">
</cfhttp>
Run Code Online (Sandbox Code Playgroud)
根据文档,它应该302 Found
作为响应返回。并重定向到 dl.boxcloud.com 进行下载。但我得到的200
回应。
不知道为什么我得到 200 作为回应。我需要通过 API 调用下载文件。我错过了什么吗?