2016-02-11 8 views
2

Общие примеры для okhttp охватывают сценарии получения и публикации.Okhttp проверить размер файла без загрузки файла

Но мне нужно получить размер файла файла с URL-адресом. Поскольку мне нужно сообщить об этом пользователю и только после получения разрешения на загрузку файла.

В настоящее время я использую этот код

URL url = new URL("http://server.com/file.mp3"); 
URLConnection urlConnection = url.openConnection(); 
urlConnection.connect(); 
int file_size = urlConnection.getContentLength(); 

упоминается в этом StackOverflow вопрос How to know the size of a file before downloading it?

который работает, но как я с помощью okhttp в моем проекте для других получить запросов я в надежде использовать его для этого сценарий также.

ответ

0

Не знаю, если это возможно в вашем случае. Но общая стратегия состоит в том, чтобы сначала сделать HTTP-запрос «HEAD» на сервер для этого URL-адреса. Это не приведет к возврату полного содержимого URL-адреса. Вместо этого он просто возвращает заголовки, описывающие URL-адрес. Если сервер знает размер содержимого за URL-адресом, заголовок Content-Length будет установлен в ответе. Но сервер может и не знать - это вам решать.

Если размер подходит пользователю, вы можете выполнить обычную транзакцию «GET» для URL-адреса, которая вернет весь контент в теле.

0
private final OkHttpClient client = new OkHttpClient(); 


public long run() throws Exception { 
     Request request = new Request.Builder() 
       .url("http://server.com/file.mp3") 
       .build(); 

     Response response = client.newCall(request).execute(); 
     return response.body().contentLength(); 
} 
+0

это загружает файл – pt123

3
public static long getRemoteFileSize(String url) { 
    OkHttpClient client = new OkHttpClient(); 
    // get only the head not the whole file 
    Request request = new Request.Builder().url(url).head().build(); 
    Response response=null; 
    try { 
     response = client.newCall(request).execute(); 
     // OKHTTP put the length from the header here even though the body is empty 
     long size = response.body().contentLength(); 
     response.close(); 
     return size; 
    } catch (IOException e) { 
     if (response!=null) { 
      response.close(); 

     } 
     e.printStackTrace(); 
    } 
    return 0; 

} 

 Смежные вопросы

  • Нет связанных вопросов^_^