通过Android将文件上传到Dropbox文件夹

时间:2016-08-20 22:27:55

标签: android dropbox

我正在尝试让用户向我发送一些应用相关文件。我在我的下拉框页面中创建了一个“文件请求”文件夹。每次我收到此消息Error 405 - Method not allowed。这是我的代码:

private class UploadFile extends AsyncTask<Void, Void, Void> {

    @Override
    protected Void doInBackground(Void... params) {

        try {
            String sourceFileUri = "/data/com.mostafa.android.roadbump/databases/matab.db";
            HttpURLConnection conn = null;
            DataOutputStream dos = null;
            String lineEnd = "\r\n";
            String twoHyphens = "--";
            String boundary = "*****";
            int bytesRead, bytesAvailable, bufferSize;
            byte[] buffer;
            int maxBufferSize = 1 * 1024 * 1024;

            if (dB.isFile()) {

                try {
                    String upLoadServerUri = "https://www.dropbox.com/request/KJcdVMDyxHvM2So1mJkK";

                    // open a URL connection to the Server
                    FileInputStream fileInputStream = new FileInputStream(dB);
                    URL url = new URL(upLoadServerUri);

                    // Open a HTTP connection to the URL
                    conn = (HttpURLConnection) url.openConnection();
                    conn.setDoInput(true); // Allow Inputs
                    conn.setDoOutput(true); // Allow Outputs
                    conn.setUseCaches(false); // Don't use a Cached Copy
                    conn.setRequestMethod("PUT");
                    conn.setRequestProperty("Connection", "Keep-Alive");
                    conn.setRequestProperty("ENCTYPE", "multipart/form-data");
                    conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);
                    conn.setRequestProperty("bill", sourceFileUri);

                    dos = new DataOutputStream(conn.getOutputStream());

                    dos.writeBytes(twoHyphens + boundary + lineEnd);
                    dos.writeBytes("Content-Disposition: form-data; name=\"bill\";filename=\""
                            + sourceFileUri + "\"" + lineEnd);

                    dos.writeBytes(lineEnd);

                    // create a buffer of maximum size
                    bytesAvailable = fileInputStream.available();

                    bufferSize = Math.min(bytesAvailable, maxBufferSize);
                    buffer = new byte[bufferSize];

                    // read file and write it into form...
                    bytesRead = fileInputStream.read(buffer, 0, bufferSize);

                    while (bytesRead > 0) {

                        dos.write(buffer, 0, bufferSize);
                        bytesAvailable = fileInputStream.available();
                        bufferSize = Math
                                .min(bytesAvailable, maxBufferSize);
                        bytesRead = fileInputStream.read(buffer, 0,
                                bufferSize);

                    }

                    // send multipart form data necesssary after file
                    // data...
                    dos.writeBytes(lineEnd);
                    dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);

                    Log.d("Sasaaa", "Done");

                    int responseCode = conn.getResponseCode();
                    String responseMessage = conn.getResponseMessage();

                    Log.d("Sasaaa", String.valueOf(responseCode));
                    Log.d("Sasaaa", responseMessage);

                    // close the streams //
                    conn.disconnect();
                    fileInputStream.close();
                    dos.flush();
                    dos.close();

                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return null;
    }
}

1 个答案:

答案 0 :(得分:0)

Error 405 - Method not allowed告诉我您的请求类型不正确。您正在尝试在服务器中执行PUT请求。请再次检查,服务器请求类型可能是POST。

您需要检查的另一件事是url或您调用服务器方法的路径。不正确的网址可能会导致此类错误。

在调用方法之前,您需要检查是否存在任何类型的身份验证过程。

修改

Dropbox有自己的API可以将文件上传到Dropbox服务器。您可以检查它们以轻松完成此工作。

我引用了另一个answer from here以便您轻松访问。

private DropboxAPI<AndroidAuthSession> mDBApi;

File tmpFile = new File(fullPath, "/data/com.mostafa.android.roadbump/databases/matab.db);

FileInputStream fis = new FileInputStream(tmpFile);

try {
    DropboxAPI.Entry newEntry = mDBApi.putFileOverwrite("matab.db", fis, tmpFile.length(), null);
} catch (DropboxUnlinkedException e) {
    Log.e("DbExampleLog", "User has unlinked.");
} catch (DropboxException e) {
    Log.e("DbExampleLog", "Something went wrong while uploading.");
}

您可以使用look at here来了解API密钥和APP SECRET。