powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Скачивание файла с фтп
2 сообщений из 2, страница 1 из 1
Скачивание файла с фтп
    #34437627
Дорабатываю программу, осуществляющую поиск по ftp серверам файлов с определенными разрешениями, для внесения их в базу mysql и дальнейшего анализа и поиска файлов через web. Например файл с расширением txt и объемом не больше 8 Кб скачивается полностью, и после определенной обработки его содержимое падает в базу данных... в этом случае файл полностью скачивается с сервера и проблем нет, проблема вознимает при обработке файла с расширением avi, у которого программа должна скачивать первые 8 Кб (и последние 8 Кб, если возможно), чтобы получить хэше байтовых последовательностей и в дальнейшем искать файлы с одинаковыми хэшами, но разными именами для постоения списка ftp зеркал для закачки... вот кусок кода который правильно скачивает txt файлы и сопутствующие функции чтения-записи...

try
{
logOut("|> get: "+dir+name);

// вначале пробуем скачать в пассивном режиме
InetSocketAddress isa = getPasv();
if(isa != null)
{
try
{
write(socket1.getOutputStream(), "RETR "+dir+name+"\r\n");
socket2 = new Socket();
socket2.connect(isa, 30000);
String reply = read(socket1.getInputStream());
if((reply.indexOf("4") != 0)&&(reply.indexOf("5") != 0))
{
buf = read(socket2.getInputStream(), (int) size);

if(reply.indexOf("\n1") < 0)
if(reply.indexOf("\n2") < 0)
if(reply.indexOf("\n3") < 0)
if(reply.indexOf("\n4") < 0)
if(reply.indexOf("\n5") < 0)
read(socket1.getInputStream());
}
else isa = null;
socket2.close();
}
catch(Exception ex){isa = null;}
}
if(isa == null) // если не получилось в пассивном - попытка скачать в активном
{
ServerSocket ss = new ServerSocket(0, 1, InetAddress.getLocalHost());
String reply = write("PORT "+
ss.getInetAddress().getHostAddress().replace('.',',')+
","+((ss.getLocalPort()&0xff00)>>8)+
","+(ss.getLocalPort()&0xff)+"\r\n");
if((reply.indexOf("4") == 0)||(reply.indexOf("5") == 0)) return;

reply = write("RETR "+dir+name+"\r\n");

Socket socket2 = ss.accept();
buf = read(socket2.getInputStream(), (int) size);
socket2.close();
ss.close();

if(reply.indexOf("\n1") < 0)
if(reply.indexOf("\n2") < 0)
if(reply.indexOf("\n3") < 0)
if(reply.indexOf("\n4") < 0)
if(reply.indexOf("\n5") < 0)
read(socket1.getInputStream());
}

// в случае успешной закачки - запуск вычислительного потока для обработки
setDaemon(false);
start();
}
catch(Exception e){}

функция read и write

protected byte[] read(InputStream is, int lng)
{
byte buf[] = new byte[lng];
int off = 0, r = 1;
try
{
while((r > 0)&&(off < lng))
{
r = is.read(buf, off, buf.length-off);
if(r > 0)
{
off += r;
if(buf[off-1] == 0) r = 0;
}
}
}
catch(Exception e){}
if(off > 0)
{
byte b[] = new byte[off];
for(r = 0; r < off; r++) b[r] = buf[r];
buf = b;
System.gc();
}

incoming += (long)lng;
return buf;
}

protected void write(OutputStream os, String str) throws Exception
{
eventTime();
os.write(str.getBytes());
//logOut("> "+str);
outcoming += str.length();
}


в принципе, как я понимаю, после получения первой порции данных, размером 8Кб (на лету правится (int) size ) для файлов с расширением avi и размером больше 8 Кб требуется отправка команды ABOR и повторное установление соединения с сервером, но вот дальнейшая только у меня не получается правильно отправить сообщение через сокет и возникает ошибка при дальнейшей обработке полученного buf - если кто работал с ftp протоколом, как можно скачать только часть файла, возможно даже не с самого начала, а с заданной позиции ???
...
Рейтинг: 0 / 0
Скачивание файла с фтп
    #34438772
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это не ответ на ваш вопрос, но мне кажется вот лучше в эту сторону смотреть:
http://www.javaworld.com/javaworld/jw-04-2003/jw-0404-ftp.html
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Скачивание файла с фтп
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]