Pobieranie plikow z Dropbox

0

Witam, otoz znalazlem w siecie bardzo przyjemny kod na Pobieranie plikow z URL i zapis do wyznaczonej sciezki, jednak zauwazylem pewien problem.
Problemem okazalo sie pobieranie przykladowo paczki .zip z Dropboxa.

Ma ktos moze pomysl jak mozna poprawić kod by pobieralo?

public class HttpDownloader {

	public static void main(String[] args) {
		String fileURL = "https://www.dropbox.com/s/vc0dbvag0lff47a/Paczka.zip?dl=1";
		String saveDir = "E:/Download";
		try {
			HttpDownloadUtility.downloadFile(fileURL, saveDir);
		} catch (IOException ex) {
			ex.printStackTrace();
		}
	}
}
public class HttpDownloadUtility {
	private static final int BUFFER_SIZE = 4096;

	public static void downloadFile(String fileURL, String saveDir)
			throws IOException {
		URL url = new URL(fileURL);
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		int responseCode = httpConn.getResponseCode();

		if (responseCode == HttpURLConnection.HTTP_OK) {
			String fileName = "";
			String disposition = httpConn.getHeaderField("Content-Disposition");
			String contentType = httpConn.getContentType();
			int contentLength = httpConn.getContentLength();

			if (disposition != null) {
				int index = disposition.indexOf("filename=");
				if (index > 0) {
					fileName = disposition.substring(index + 10,
							disposition.length() - 1);
				}
			} else {
				fileName = fileURL.substring(fileURL.lastIndexOf("/") + 1,
						fileURL.length());
			}

			System.out.println("Content-Type = " + contentType);
			System.out.println("Content-Disposition = " + disposition);
			System.out.println("Content-Length = " + contentLength);
			System.out.println("fileName = " + fileName);

			InputStream inputStream = httpConn.getInputStream();
			String saveFilePath = saveDir + File.separator + fileName;
			
			FileOutputStream outputStream = new FileOutputStream(saveFilePath);

			int bytesRead = -1;
			byte[] buffer = new byte[BUFFER_SIZE];
			while ((bytesRead = inputStream.read(buffer)) != -1) {
				outputStream.write(buffer, 0, bytesRead);
			}

			outputStream.close();
			inputStream.close();

			System.out.println("File downloaded");
		} else {
			System.out.println("No file to download. Server replied HTTP code: " + responseCode);
		}
		httpConn.disconnect();
	}
}
0

Przecież pisałem problem, ale jak trzeba to jeszcze raz opiszę.

Po podaniu linku do pobierania paczki .zip z dropboxa nie pobiera natomiast gdy podaje się link do paczki zuploadowanej przykładowo na własnej stronie to pobiera jak trzeba.

I moje pytanie czy może ktoś wie gdzie tkwi problem w tym że nie pobiera mimo że link jest jak najbardziej prawidłowy?

0

Podajesz direct linka z dropboxa czy link do strony gdzie trzeba nacisnąć przycisk Pobierz?

0

Direct link taki jak w kodzie powyzej

0

Nie możesz pobrać jakiegokolwiek pliku, ponieważ Twoje połączenie nie jest nigdzie autoryzowane, a tego własnie wymaga dropbox. Jeżeli nie chcesz wynajdować koła drugi raz to sprawdź ten link: https://www.dropbox.com/developers-v1/core/start/java

0

A co gdyby użyc biblioteki unirest java?

Jak na razie uzyskalem taki kod :

HttpResponse<InputStream> response = Unirest.get("https://www.dropbox.com/s/vc0dbvag0lff47a/Paczka.zip?dl=1")
     .asBinary();
InputStream body = response.getBody();
String contentDisposition = response.getHeaders().getFirst("Content-Disposition");

Files.copy(body, Paths.get("wypakuj/tutaj/Paczka.zip"));

Pattern regex = Pattern.compile("filename=['\"]?([^'\";]+)['\"]?");
Matcher matcher = regex.matcher(contentDisposition);
if (matcher.find()) {
  String filename = matcher.group(1);
} else {
}

niestety z aktualnego kodu uzyskuje blad "Type mismatch: cannot convert from Object to InputStream"
Pomoze ktos rozwiazac ten problem?

0

@Refresh

1 użytkowników online, w tym zalogowanych: 0, gości: 1