Jak mógłbym obsłużyć pliki do pobrania za pomocą HttpResponse w Javie? Zrobiłem żądanie HttpGet do określonej witryny - strona zwraca plik do pobrania. Jak mogę obsłużyć to pobieranie? InputStream wydaje się nie być w stanie go obsłużyć (lub może używam go w niewłaściwy sposób).Obsługa plików do pobrania w Javie
Odpowiedz
Zakładając jesteś rzeczywiście mówić o HttpClient, Oto SSCCE:
package com.stackoverflow.q2633002;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
public class Test {
public static void main(String... args) throws IOException {
System.out.println("Connecting...");
HttpClient client = new DefaultHttpClient();
HttpGet get = new HttpGet("http://apache.cyberuse.com/httpcomponents/httpclient/binary/httpcomponents-client-4.0.1-bin.zip");
HttpResponse response = client.execute(get);
InputStream input = null;
OutputStream output = null;
byte[] buffer = new byte[1024];
try {
System.out.println("Downloading file...");
input = response.getEntity().getContent();
output = new FileOutputStream("/tmp/httpcomponents-client-4.0.1-bin.zip");
for (int length; (length = input.read(buffer)) > 0;) {
output.write(buffer, 0, length);
}
System.out.println("File successfully downloaded!");
} finally {
if (output != null) try { output.close(); } catch (IOException logOrIgnore) {}
if (input != null) try { input.close(); } catch (IOException logOrIgnore) {}
}
}
}
działa dobrze tutaj. Twój problem leży gdzieś indziej.
Dodałem typ zawartości do nagłówka (Application/octet-stream) i używając tej samej metody, która wydawała się robić lewy. – Tereno
Ogólnie, gdy przeglądarka ma wyświetlać okno dialogowe pobierania pliku do pobrania, należy ustaw przychodzącą zawartość inputstream
bezpośrednio w obiekcie kontrpara odpowiedzi i ustaw typ zawartości odpowiedzi (obiekt HttpServletResponse
) na odpowiedni typ pliku.
tj
response.setContentType(.. relevant content type)
typu treści można application/pdf
dla plików PDF jako przykład.
Jeśli przeglądarka ma wtyczkę do wyświetlenia odpowiedniego pliku w oknie przeglądarki, plik otworzy się i użytkownik może zapisać, w przeciwnym razie przeglądarka wyświetli okno pobierania.
otworzyć strumień i wysłać plik:
try {
FileInputStream is = new FileInputStream(_backupDirectory + filename);
OutputStream os = response.getOutputStream();
byte[] buffer = new byte[65536];
int numRead;
while ((numRead = is.read(buffer, 0, buffer.length)) != -1) {
os.write(buffer, 0, numRead);
}
os.close();
is.close();
}
catch (FileNotFoundException fnfe) {
System.out.println("File " + filename + " not found");
}
- 1. Obsługa plików do pobrania w QtWebEngine
- 2. Obsługa joysticka w Javie
- 3. Odtwórz zestaw plików do pobrania nazwa pliku
- 4. Obsługa VB w Javie 6?
- 5. Ograniczanie dostępu do prywatnych plików do pobrania w Django
- 6. Podejście programistyczne w Javie do porównywania plików
- 7. Jak zignorować określony typ plików do pobrania w wget?
- 8. Obsługa alertów za pomocą HtmlUnitDriver w Javie
- 9. Generowanie plików XSD w Javie
- 10. Django - Tworzenie Zip wielu plików i sprawiają, że do pobrania
- 11. Jak utworzyć publiczny link do pobrania plików na serwerze
- 12. HTML 5 wielu plików do pobrania z PHP
- 13. Obsługa pliku Excel (xlsx) do pobrania dla użytkownika w Django (Python)
- 14. Obsługa nieruchomości w Scala
- 15. Program do pobierania wszystkich plików w katalogu w Javie
- 16. Obsługa aktualizacji plików konfiguracyjnych Rpm
- 17. AFNetworking + duże pliki do pobrania + pliki do pobrania
- 18. Django - Obsługa MEDIA/wgranych plików w produkcji
- 19. Który Qt do pobrania?
- 20. Obsługa wyjątków C++ w Javie za pomocą SWIG
- 21. jslint.js link do pobrania
- 22. Dokumentacja do pobrania Elixir
- 23. Wyszukiwanie tymczasowego przechowywania plików w Javie
- 24. Manipulowanie uprawnieniami do plików systemu Windows w Javie
- 25. Naprawdę wymuś synchronizację plików/flush w Javie
- 26. Tworzenie poprawnych nazw plików w Javie
- 27. uzyskiwanie atrybutów twórcy plików/właściciela w Javie
- 28. Szydzenie plików w Javie - Mock Contents - Mockito
- 29. Czytanie plików Microsoft Access w Javie
- 30. Ustawianie znacznika czasu tworzenia plików w Javie
Jakie API/biblioteki mówisz? [Apache HttpComponents HttpClient v4] (http://hc.apache.org/httpcomponents-client/index.html)? Jeśli nie wiesz, podaj nazwę pakietu "HttpResponse" i "HttpGet", o których mówisz, i najlepiej opublikuj [SSCCE] (http://sscce.org), abyśmy mogli zauważyć twój błąd . – BalusC
Rzeczywiście używam Apache HttpComponents. Twoja odpowiedź wydaje się być tym, czego szukam. Czy byłoby jednak możliwe zapisanie wszystkich danych wejściowych w ciągu znaków w stosunku do rzeczywistego pliku? Moja konwersja strumienia wejściowego do metody łańcuchowej wykorzystuje buforowany czytnik, ale daje mi zerową wartość. – Tereno