Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как получить имя файла по зная url? 
:(
    Опции темы
nworm
Дата 2.11.2010, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 502
Регистрация: 22.10.2005

Репутация: нет
Всего: 8



Есть url=http://etp.roseltorg.ru/trade/view/get.php?auction=MOS26101000200&file=http://api.roseltorg.ru/file.php?id=66150
Если на него нажать, скачивается файл Извещение_45-АЭФ_Документация_об_аукционе_радиометр(3).docx
Вопрос, как получить имя этого файла зная только url?
Так не выходит

Код

java.net.URL my_url = new java.net.URL(url.toString());
StringTokenizer st=new StringTokenizer(my_url.getFile(), "/");
while (st.hasMoreTokens())
   newlink=st.nextToken();

PM MAIL WWW   Вверх
Skipy
Дата 2.11.2010, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 487
Регистрация: 24.8.2006
Где: Москва, Россия

Репутация: 4
Всего: 16



Цитата(nworm @ 2.11.2010,  18:10)
Так не выходит

А почему Вы думаете, что должно выйти? URL не содержит имени. И что выдает сервер в качестве имени файла - скорее всего, в теге Content-Disposition - знает только он сам. Без запроса Вы имя файла не получите.


--------------------
С уважением,
Евгений aka Skipy
www.skipy.ru
PM MAIL WWW ICQ   Вверх
nworm
Дата 2.11.2010, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 502
Регистрация: 22.10.2005

Репутация: нет
Всего: 8



А как получить с запросом?
PM MAIL WWW   Вверх
dobrolub
Дата 3.11.2010, 00:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 385
Регистрация: 18.12.2009
Где: Vancouver, Canada

Репутация: 1
Всего: 16



Код

import java.io.*;
import java.net.*;

public class T {
    public static void main(String []args) throws Exception {
        URL url = new URL("http://www.jtricks.com/download-text");
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        String disposition = conn.getHeaderField("Content-Disposition");

        System.out.println(disposition);
    }
}


PM   Вверх
nworm
Дата 3.11.2010, 01:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 502
Регистрация: 22.10.2005

Репутация: нет
Всего: 8



Клёво.

attachment; filename="=?windows-1251?B?yOfi5fnl7ejlXzQ1LcDd1F/E7urz7OXt8uD26P9f7uFf4PPq9uju7eVf8ODk6O7s5fLwLmRvY3g=?="

А как бы ещё сделать filename в нормальной кодировке?
PM MAIL WWW   Вверх
dobrolub
Дата 3.11.2010, 02:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 385
Регистрация: 18.12.2009
Где: Vancouver, Canada

Репутация: 1
Всего: 16



"=?windows-1251?B?yOfi5fnl7ejlXzQ1LcDd1F/E7urz7OXt8uD26P9f7uFf4PPq9uju7eVf8ODk6O7s5fLwLmRvY3g=?="
                 
 у этой строки следующие составляющие

- ?windows-1251? - encoding
- ?B? – BASE64  (вместо B может быть и Q, но сейчас можно думать только о B)

алгоритм такой

вычленить charset windows-1251
вычленить encoding (BASE 64)

преобразовать оставшиеся символы в byte[] 
прочитать byte[] с помощью encoding windows-1251

Извещение_45-АЭФ_Документация_об_аукционе_радиометр.docx

Код

import java.io.*;
import com.sun.xml.internal.messaging.saaj.util.*;

public class T {
    private static String parseEncoding(StringReader reader) throws IOException {
        StringBuilder builder = new StringBuilder();

        int i;

        while ((i = reader.read()) > 0) {
            if (i == '?')
                break;

            builder.append((char)i);
        }

        return builder.toString();
    }

    private static char parseMethod(StringReader reader) throws IOException {
        return (char) reader.read();
    }

    private static String parseData(StringReader reader) throws IOException {
        StringBuilder builder = new StringBuilder();

        int i;
        while ((i = reader.read()) > 0) {
            if (i == '?')
                break;

            builder.append((char)i);
        }

        return builder.toString();
    }

    public static void main(String []args) throws Exception {
        String filename = "=?windows-1251?B?yOfi5fnl7ejlXzQ1LcDd1F/E7urz7OXt8uD26P9f7uFf4PPq9uju7eVf8ODk6O7s5fLwLmRvY3g=?=";
        StringReader reader = new StringReader(filename);
        reader.read();
        reader.read();
        String encoding = parseEncoding(reader);
        char method = parseMethod(reader);
        reader.read();
        String data = parseData(reader);

        Base64 base64 = new Base64();
        byte[] fileNameBytes = base64.decode(data.getBytes());

        String result = new String(fileNameBytes, encoding);


        System.out.println("encoding: " + encoding);
        System.out.println("method: " + method);
        System.out.println("data: " + data);

        PrintStream ps = new PrintStream(new FileOutputStream("/tmp/x.txt"), false,  "UTF-8"); //имя будет в файле который utf-8 encoded. с ноут падом можно смотреть, но надо чтобы открыл как utf-8 encoded.
        ps.print(result);
        ps.close();
        System.out.println("файл:" + result);
    }
}



Это сообщение отредактировал(а) dobrolub - 3.11.2010, 02:12
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Работа с сетью | Следующая тема »


 




[ Время генерации скрипта: 0.0422 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.