2016-08-20 2 views
0

Я пытаюсь заставить пользователей отправлять мне некоторые связанные со мной файлы. Для этого я сделал папку с файлом «файл» на моей странице. Каждый раз, когда я получаю это сообщение Error 405 - Method not allowed. Вот мой код:Загрузка файла через Android в папку Dropbox

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; 
    } 
} 
+0

Dropbox не предлагает программный интерфейс для загрузки таких файлов, как это. Мы рассмотрим этот запрос функции. Загрузка программ должна выполняться через API, как указано в ответе ниже. – Greg

ответ

0

Error 405 - Method not allowed говорит мне, что тип запроса не является правильным. Вы пытаетесь выполнить запрос PUT на своем сервере. Проверьте это снова, тип запроса сервера может быть POST.

Еще одна вещь, которую вам нужно проверить, - это url или путь, по которому вы вызываете метод сервера. Неправильный 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 Key и APP SECRET.

+0

Спасибо за ваш ответ :) .. Я использовал POST раньше, и он дал мне тот же ответ, поэтому я попробовал PUT как альтернативу. Правильный URL-адрес и я дважды проверил его с DROPBOX. узнайте об аутентификации, так что, если кто-нибудь сможет просветить нас, я действительно буду этому благодарен. –

+0

См. Отредактированный ответ. –

+0

Я знаю о DropBox API, но я искал более простой способ сделать задачу специально, что они уже открыли «Запросы файлов». –