我们使用Dropbox Core API在我们的Android应用中访问用户的Dropbox帐户:
https://www.dropbox.com/developers/core/start/android
当用户第一次启动应用程序时,他会看到以下两个Dropbox屏幕:
屏幕1:

屏幕2:

在第一次成功验证后,我们将OAuth2会话密钥存储在SharedPreferences,并使用该密钥进行所有后续API访问.
这似乎有效:当用户第二次启动应用程序时,屏幕1不会出现,因此我们假设我们已正确使用了会话密钥.
但是,Dropbox仍然显示第二个屏幕,要求用户允许将应用程序链接到他的Dropbox帐户.无论用户授权链接应用程序多少次,都会在应用程序启动时显示屏幕2.
知道我们做错了什么吗?
我正在开发一个应该能够在多个设备之间同步数据存储的应用程序.
我无法弄清楚为什么我无法从不是数据存储区所有者的设备读取记录.而数据存储区的所有者设备可以读取同一记录.我必须确切地说,数据存储区是使用EDITOR权限创建的(见下文).
try {
datastoreTitle = mDatastoreManager.createDatastore();
datastoreTitle.setRole(DbxPrincipal.PUBLIC, DbxDatastore.Role.EDITOR);
} catch (DbxException e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
有人让他遇到同样的问题吗?提出此问题的代码如下:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
/**
* Opening of the database
*/
db = new SQliteHelper( this ) ;
/**
* Connection to dropbox API
*/
mAccountManager = DbxAccountManager.getInstance(getApplicationContext(), APP_KEY, APP_SECRET);
// Set up the datastore manager
if (mAccountManager.hasLinkedAccount()) {
try {
// Use Dropbox datastores
mDatastoreManager = DbxDatastoreManager.forAccount(mAccountManager.getLinkedAccount());
} catch (DbxException.Unauthorized e) {
System.out.println("Account was unlinked remotely");
}
}
if …Run Code Online (Sandbox Code Playgroud) 我正在尝试通过webbrowser(FF 42.0,PhantomJS 1.9.8)和Dropbox v2 API将数据上传到Dropbox。我的功能看起来像这样
function(path, data, callback) {
$.ajax({
url: 'https://content.dropboxapi.com/2/files/upload',
type: 'post',
contentType: 'application/octet-stream',
beforeSend: function(jqXHR) {
jqXHR.setRequestHeader("Content-Type","application/octet-stream");
},
data: data,
headers: {
"Authorization": "Bearer " + token,
"Dropbox-API-Arg": '{"path": "' + path + ',"mode": "add","autorename": true,"mute": false}',
"Content-Type": "application/octet-stream"
},
success: function (data) {
callback(data);
}
});
}
Run Code Online (Sandbox Code Playgroud)
甚至我在所有可以想到的属性上都设置了Content-Type时application/octet-stream,出现以下错误
Error in call to API function "files/upload": Bad HTTP "Content-Type" header: "application/octet-stream
; charset=UTF-8". Expecting one of "application/octet-stream", "text/plain; charset=dropbox-cors-hack"
Run Code Online (Sandbox Code Playgroud)
看一下Firebug中的请求,我发现Content-Type确实设置为application/octet-stream; charset=UTF-8。当尝试text/plain; charset=dropbox-cors-hack …
我使用的V2 HTTP API:https://www.dropbox.com/developers/documentation/http/documentation 我试图职位:https://api.dropboxapi.com/2/files/get_metadata 为根文件夹。
我的请求正文: {"path":""}
我的标题:
Content-Type: application/json
Authorization: Bearer my_token
Dropbox-API-Select-User: dbmid:some_user_id
Run Code Online (Sandbox Code Playgroud)
我收到身体的响应代码 400:
Error in call to API function "files/get_metadata":
request body: path: '' did not match pattern '((/|id:).*)|(rev:[0-9a-f]{9,})'
Run Code Online (Sandbox Code Playgroud)
发送一个空的 json 也不起作用。
当我尝试访问非 root 文件夹时,它可以工作(例如:“/111”)。
在“路径格式”部分的文档中,它说:“空字符串(“”)代表根文件夹”。
我究竟做错了什么?
谢谢!
我使用以下代码将文件上传到dropbox.
我正在使用nuget包Dropbox.Api并获取异常System.Threading.Tasks.TaskCanceledException("任务被取消.")
从这个SO问题看来,它似乎是一个超时问题.
那么如何修改以下代码来设置超时.
public async Task<FileMetadata> UploadFileToDropBox(string fileToUpload, string folder)
{
DropboxClient client = new DropboxClient(GetAccessToken());
using (var mem = new MemoryStream(File.ReadAllBytes(fileToUpload)))
{
string filename = Path.GetFileName(fileToUpload);
try
{
string megapath = GetFullFolderPath(folder);
string megapathWithFile = Path.Combine(megapath, Path.GetFileName(Path.GetFileName(filename))).Replace("\\", "/");
var updated = client.Files.UploadAsync(megapathWithFile, WriteMode.Overwrite.Instance, body: mem);
await updated;
return updated.Result;
}
catch (Exception ex)
{
return null;
}
}
}
Run Code Online (Sandbox Code Playgroud)