陷入文件上传使用java在DropBox中下载应用程序

时间:2014-02-17 14:10:42

标签: java dropbox dropbox-api

我正在使用java工作Dropbox api。 第一个应用是在Dropbox帐户上传和下载文件。 我有一个令牌用Dropbox进行身份验证但是当我尝试在帐户中上传文件时我得到了错误的请求错误,如:

Exception in thread "main" com.dropbox.core.DbxException$BadResponse: unexpected response code: 401
    at com.dropbox.core.DbxClient$4.handle(DbxClient.java:274)
    at com.dropbox.core.DbxClient$4.handle(DbxClient.java:270)
    at com.dropbox.core.DbxRequestUtil.doGet(DbxRequestUtil.java:265)
    at com.dropbox.core.DbxClient.doGet(DbxClient.java:1912)
    at com.dropbox.core.DbxClient.getAccountInfo(DbxClient.java:270)
    at com.prit.net.Main.main(Main.java:50)

我的代码低于package com.prit.net;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URISyntaxException;
import java.util.Locale;
import com.dropbox.core.DbxAppInfo;
import com.dropbox.core.DbxClient;
import com.dropbox.core.DbxEntry;
import com.dropbox.core.DbxException;
import com.dropbox.core.DbxRequestConfig;
import com.dropbox.core.DbxWebAuthNoRedirect;
import com.dropbox.core.DbxWriteMode;
public class Main {

    public static void main(String[] args) throws IOException, DbxException, URISyntaxException {
    // Get your app key and secret from the Dropbox developers website.
    final String APP_KEY = "mykey"; // change with yours
    final String APP_SECRET = "mysecret"; // change with yours

    DbxAppInfo appInfo = new DbxAppInfo(APP_KEY, APP_SECRET);

    DbxRequestConfig config = new DbxRequestConfig("JavaTutorial/1.0",Locale.getDefault().toString());
    DbxWebAuthNoRedirect webAuth = new DbxWebAuthNoRedirect(config, appInfo);
    // Have the user sign in and authorize your app.
    String authorizeUrl = webAuth.start();
    //Desktop.getDesktop().browse(new URL(authorizeUrl).toURI());
    // System.out.println("1. Go to: " + authorizeUrl);
    // System.out
    // .println("2. Click \"Allow\" (you might have to log in first)");
    // System.out.println("3. Copy the authorization code.");
    // String code = new BufferedReader(new InputStreamReader(System.in))
    // .readLine().trim();
    //DbxAuthFinish authFinish = webAuth.finish(code);
    // System.out.println("Access token is:");
    // System.out.println(authFinish.accessToken.toString());

    // save the value of myToken to a file for future use
    String myToken = "myTokensecretkeyxxxxxxxxxxxxxxxxx"; // change with
                                                                // yours
    // DbxClient client = new DbxClient(config, authFinish.accessToken);
    DbxClient client = new DbxClient(config, myToken);
    System.out.println(config);
    System.out.println(myToken);

    System.out.println("check1");
    File inputFile = new File("C:\\Dev\\foo.txt");
    System.out.println("check2");
    FileInputStream inputStream = new FileInputStream(inputFile);
    System.out.println("check3");
    try {
        DbxEntry.File uploadedFile = client.uploadFile("/FileApiDemo/fooup2.txt",
                DbxWriteMode.add(), inputFile.length(), inputStream);
        System.out.println("Uploaded: " + uploadedFile.toString());
    } catch (Exception e) {

        e.printStackTrace();
    } finally {
        inputStream.close();
    }

    DbxEntry.WithChildren listing = client.getMetadataWithChildren("/FileApiDemo");
    System.out.println("Files in the root path:");
    for (DbxEntry child : listing.children) {
        System.out.println("    " + child.name + ": " + child.toString());
    }

    // download file
        FileOutputStream outputStream = new FileOutputStream("C:\\Dev\\downloadedfile.txt");
        try {
            DbxEntry.File downloadedFile = client.getFile("/FileApiDemo/fooup2.txt", null,  outputStream);
            System.out.println("Metadata: " + downloadedFile.toString());
        }     finally {
            outputStream.close();
        }

    }

} `

2 个答案:

答案 0 :(得分:0)

仔细检查myToken的值。您上面的注释代码可能会为您提供一个工作访问令牌,对吧?如果是这样,请确保您在该流程末尾看到的访问令牌是您正在保存并在后续运行中使用的访问令牌。

答案 1 :(得分:0)

以下是Dropbox的基本上传示例。该示例使用DropBox API v2。

示例中的客户端变量来自DbxClientV2....

try
        {
            File file = new File("C:\\... Storage location of file on local system");
            //reads file as input for the method to dropbox
            InputStream fileupload = new FileInputStream(file);
            //path in dropbox account to store the file 
            // if want to store it in root just put '/'
            //if want to store file in a folder '/foldername/'
            client.files().uploadBuilder("/" + file.getName())
                    .withMode(WriteMode.OVERWRITE)//always overwrites the existing file in the dropbox folder
                    .uploadAndFinish(fileupload);
            JOptionPane.showMessageDialog(null, "File uploaded to dropbox");
        }
        //exception handled
        catch (DbxException e)
        {
            //error message for uploading file to dropboxcloud
            JOptionPane.showMessageDialog(null, "Unable to upload file to Cloud \n Error: " + e);
        }
        catch (IOException e)
        {
            JOptionPane.showMessageDialog(null, "Unable to upload file to cloud \n Error: " + e);
        }

此基本示例不包括文件上传到云或任何其他检查的进度。

希望这是有帮助的