Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
5 / 5 / 3
Регистрация: 21.08.2012
Сообщений: 205
1

Траблы с ФТП

05.05.2013, 03:36. Показов 588. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет всем. Проблема такая, я заливаю на фтп текстовый файл – нормально, он читабельный, заливаю архив уже не открывает, пишет сразу ошибку "file header is corrupt", рисунки тоже заливает плохо, либо не отображаются либо наполовину криво.
Вот код написанного мною ФТП клиента, помогите разобраться. Очень прошу.
Файл попадает как org.springframework.web.multipart.MultipartFile
Я из него методом достаю InputStream и передаю дальше. Я уже пробовал и читать сначала в память, то есть в массив байтов а потом на его основании делать ByteArrayInputStream но результат тотже.


Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.SocketException;
import java.util.Map;
 
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
 
public class FTPSimpleClient {
    private String ftpIP = "";
    private String userName = "";
    private String password = "";
    private String httpSource = "";
    private FTPClient client = new FTPClient();
 
    public FTPSimpleClient() {
    }
 
    public String getFtpIP() {
        return ftpIP;
    }
 
    public void setFtpIP(String ftpIP) {
        this.ftpIP = ftpIP;
    }
 
    public String getUserName() {
        return userName;
    }
 
    public void setUserName(String userName) {
        this.userName = userName;
    }
 
    public String getPassword() {
        return password;
    }
 
    public void setPassword(String password) {
        this.password = password;
    }
 
    public String getHttpSource() {
        return httpSource;
    }
 
    public void setHttpSource(String httpSource) {
        this.httpSource = httpSource;
    }
 
    public FTPClient getClient() {
        return client;
    }
 
    public void setClient(FTPClient client) {
        this.client = client;
    }
 
    private InputStream byteArraytoInputSream(byte[] bytes) {
        if (bytes == null) {
            System.out.println(this.getClass().getName()
                    + ": array of bytes is empty");
            return null;
        } else {
            return new ByteArrayInputStream(bytes);
        }
    }
 
    @SuppressWarnings("finally")
    private boolean connectFTP(final String ftpIP) {
        boolean isConnected = true;
        try {
            client.connect(ftpIP);
        } catch (SocketException e) {
            isConnected = false;
            System.out.println(e.toString());
        } catch (IOException e) {
            isConnected = false;
            System.out.println(e.toString());
        } finally {
            return isConnected;
        }
    }
 
    @SuppressWarnings("finally")
    private boolean loginFTP(final String userName, final String password) {
        boolean IsLogined = true;
        try {
            IsLogined = client.login(userName, password);
        } catch (IOException e) {
            IsLogined = false;
            System.out.println("\nsssss" + e.getMessage());
        } finally {
            return IsLogined;
        }
    }
 
    @SuppressWarnings("finally")
    private boolean uploadBytes(String fileName, InputStream bais) {
        boolean isUploaded = true;
        try {
            client.storeFile(fileName, bais);
            FTPFile[] files = client.listFiles();
            for (FTPFile f : files) {
                System.out.println("+++++++" + f.getName());
                System.out.println("+++++++" + f.getSize());
            }
        } catch (IOException e) {
            isUploaded = false;
            System.out.println("\nsssss" + e.getMessage());
        } finally {
            return isUploaded;
        }
 
    }
 
    public boolean uploadToFTP(InputStream bais,
            final String fileName) throws IOException {     
        if (bais == null) {
            return false;
        }
        if (!client.isConnected()) {
            client.disconnect();
        }
        if (!this.connectFTP(this.ftpIP)) {
            return false;
        }
        if (!this.loginFTP(this.userName, this.password)) {
            return false;
        }
 
        if (!this.uploadBytes(fileName, bais)) {
            return false;
        }
        return true;
    }
 
    public boolean setConfigFromFile(String path, String rootNodeName) {
        String ftpIP = "";
        String userName = "";
        String passwrod = "";
        String httpSource = "";
        XMLDOMParser xmlDOMP = new XMLDOMParser(path);
        Map<String, String> fields = xmlDOMP
                .getMapFieldsFromXMLNodes(rootNodeName);
 
        if (fields == null) {
            return false;
        }
 
        ftpIP = fields.get("FtpIP");
        userName = fields.get("UserName");
        passwrod = fields.get("Password");
        httpSource = fields.get("HttpSource");
        this.SetConfig(ftpIP, userName, passwrod, httpSource);
 
        return true;
    }
 
    public void SetConfig(String ftpIP, String userName, String password,
            String httpSource) {
        this.ftpIP = ftpIP;
        this.userName = userName;
        this.password = password;
        this.httpSource = httpSource;
    }
 
    public boolean isConnected() {
        return client.isConnected();
    }
}
Код исользуется на веб приложении (Spring, Singleton)
Всем спасибо за ответы.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.05.2013, 03:36
Ответы с готовыми решениями:

Программа фтп-клиент скачивает файл с большим размером, чем он есть на фтп-сервере
Здравствуйте! Есть программа фтп-клиент, работает через консоль под Linux, после подключения к...

Траблы с визуалкой и sql в чем траблы незнаю
Все работало нормально что визуалка что сам sql. а тут хз что за ошибка. Таже ошибка и в визуалке.

фтп
возможно тему создал не там где надо,но у меня возникла проблема после отправки по командному...

ФТП
Вот бат файл: @echo off ftp -s:ftp_cmd.txt -n Вот файл ftp_cmd.txt: open ftp.ft5pft4p.h16.ru...

6
2586 / 2259 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
05.05.2013, 14:42 2
красота - логика в эксепшенах )
0
5 / 5 / 3
Регистрация: 21.08.2012
Сообщений: 205
05.05.2013, 15:53  [ТС] 3
проблема решена... Перед отправкой нужно задать:
Java
1
client.setFileType(FTP.BINARY_FILE_TYPE);
красота - логика в эксепшенах )
Я только учусь... но скоро этот код придется показывать перед большой аудиторией, стыдно будет если плохой почерк, перепишите пожалуйста один из методов, объясните, что тут плохо... буду благодарен.
0
2586 / 2259 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
05.05.2013, 19:10 4
Цитата Сообщение от Dzib Посмотреть сообщение
стыдно будет если плохой почерк
эксепшены должны обрабатывать ошибки, не логику.
Перепишите так чтобы логика не зависела от эксепов.
Java
1
2
3
4
5
6
7
8
9
    private boolean loginFTP(final String userName, final String password) {
        boolean isLogined = false;
        try {
            isLogined = client.login(userName, password);
        } catch (IOException e) {
            System.out.println("\nsssss" + e.getMessage());
        } 
        return isLogined;
    }
логироваться хорошо бы в логгер а не в сисаут, но это уже из другой оперы
1
5 / 5 / 3
Регистрация: 21.08.2012
Сообщений: 205
06.05.2013, 00:38  [ТС] 5
логгер есть, просто клас тестировал отдельно.

Это не по теме, но все же, насчет Exception, вижу люди по разному пишут, одни try-catch блоки, другие throws, на мой взгляд throws порпоще написать, особенно если все методы класа один и тот же тип бросают, но они летят тогда хз куда, мне вот интересно, в каких случаях throws можно писать?
0
2586 / 2259 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
06.05.2013, 01:17 6
Цитата Сообщение от Dzib Посмотреть сообщение
мне вот интересно, в каких случаях throws можно писать?
этот вопрос на грани религиозного срача.

Изначально эксепшены планировались для более развёрнутого управления ошибками.
Это всё выглядит очень красиво и стройно в рамках небольших проектов.

Потом в ОЧЕНЬ сложных проектах вылезло что если пробрасывать ошибку далеко наверх,
а количство разных кастомных ошибок может при этом накапливаться с очень нехорошей тенденцией к бесконечности,
то код обрастает немыслимыми количествами трай кеч блоков на верхних уровнях.
Представьте себе какой адов код получается при такой ситуации.

Балансировать в рамках необходимого минимума кунгфу с эксепами тем сложнее, чем больше разных команд вовлечены в разработку проекта, например когда происходит слияние 2 и более сложных систем в одну.

Вернёмся к вашему вопросу: по моему если есть хоть какая малейшая возможность обработать ошибку на текущем уровне,
её ни в коем случае нельзя пробрасывать вверх. В вашем случае это вполне возможно.
1
653 / 402 / 35
Регистрация: 19.02.2013
Сообщений: 1,072
Записей в блоге: 2
06.05.2013, 01:19 7
Цитата Сообщение от Dzib Посмотреть сообщение
логгер есть, просто клас тестировал отдельно.

Это не по теме, но все же, насчет Exception, вижу люди по разному пишут, одни try-catch блоки, другие throws, на мой взгляд throws порпоще написать, особенно если все методы класа один и тот же тип бросают, но они летят тогда хз куда, мне вот интересно, в каких случаях throws можно писать?
например у вас есть слой дао (обеспечивает связь и логику работы с базой данных) и слой контроллеров бизнес логики (ну типа логики приложения. например формулы всякие, если прога чего-то там считает). вы пытаетесь записать нечто в базу. тут у вас могут вылететь несколько типов ошибок. ошибки работы с базой вы кечите в слое дао (например если база отвалилась или конекшен умер). ошибки бизнес логики вы пробрасываете тровсом из дао и кетчите в слое бизнес логики который это дао пинает (например попытка записать в базу магазина товар который там уже существует)
1
06.05.2013, 01:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.05.2013, 01:19
Помогаю со студенческими работами здесь

Соединение с фтп
Подскажите пожалуйста как правильно выполнить соединение с фтп сервером и загрузку указанного файла...

Верстка на ФТП
Добрый вечер! Знакомые попросили переделать домашнею страницу сайта-добавить пару блоков,...

Работа с фтп
Здравствуйте. Вот сталкнулся с такой проблемой. Мне надо, чтоб я мог через свой сайт лазить на фтп...

циско_аса5505 и фтп
день добрый помогите плиз разобраться. есть роутер циско аса5505. нужно собирать с нее логи....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru