#java #xml #upload #ftp #network-programming
#java #xml #загрузка #ftp #сетевое программирование
Вопрос:
У меня возникла ситуация, которую мне нужно разрешить. Мне нужно загрузить определенные элементы xml-файла, чтобы загрузить его на сервер, мне удалось это сделать, и я создал демонстрационный метод, чтобы проверить, загружается ли файл на сервер или нет.
Мой XML-файл имеет структуру,
<config>
<engine>
<eid>1</eid>
<sometextelement>text</sometextelement>
</engine>
<engine>
<eid>2</eid>
<sometextelement>text</sometextelement>
</engine>
<engine>
<eid>3</eid>
<sometextelement>text</sometextelement>
</engine>
</config>
Мой код сервлета:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.setContentType("application/json");
//response.setHeader("Cache-Control", "no-cache");
PrintWriter out = response.getWriter();
JSONObject obj = new JSONObject();
String value = request.getParameter("value");
String message = "";
String update = "";
Element element = null;
Element root = null;
XMLOutputter xmlOutputter = new XMLOutputter();
try{
doc = saxBuilder.build("E:/workbench j2ee/cPEP_UI/WebContent/engine.xml");
}catch(Exception e){
e.printStackTrace();
}
root = doc.getRootElement();
List list = doc.getRootElement().getChildren();
Iterator itr = list.iterator();
int i = 0;
while(itr.hasNext()){
element = (Element)itr.next();
System.out.println("Entered 1");
File f = File.createTempFile("engine_",".xml");
System.out.println(f);
xmlOutputter.output(element, new FileWriter(f));
i = 1;
putFile(f,i);
}
// xmlOutputter.output(doc, new FileWriter("E:/workbench j2ee/cPEP_UI/WebContent/engine.xml"));
// System.out.println("hello from system");
// out.println("hello");
}
public void putFile(File f, int i) throws SocketException, IOException{
FTPClient client = new FTPClient();
FileInputStream fis = null;
client.connect("ftp.someserver.co.uk",21);
boolean login = client.login("webmaster@someserver.co.uk",
"mypassword");
fis = new FileInputStream(f);
if(client.storeFile("engine_" i ".xml", fis)){
System.out.println("yes");
}else{
System.out.println("no");
}
client.logout();
fis.close();
}
Но проблема в том, что файл загружается должным образом, но содержимое неполное, я хочу сказать, что оно <engine>
есть, но </engine>
его там нет. Но я перепроверил это в своей локальной системе, которая создает временный файл, и он показывает полный XML-файл. Почему весь контент не загружается на сервер!?
есть идеи?
Это то, что я вижу на сервере,
<engine>
<eid>1</eid>
<sometextelement
Ответ №1:
Если вы написали клиентский код самостоятельно, похоже, что поток на стороне клиента сброшен неправильно.
Попробуйте очистить или закрыть ( close()
также удаляет поток) поток клиента.
Комментарии:
1. Я не достал тебе Вивьен! не существует метода fis. flush().
2. как это сделать?! Пожалуйста, помогите мне с этим!
3. На стороне клиента, когда вы загружаете файл. Что вы используете? Вероятно, какой-то OutputStream с
flush()
методом.4. Я использую метод PutFile(), код которого уже есть в вопросе. но метод flush не связан ни с одним потоком, который я использую.
5. В данном случае это может быть тот,
new FileWriter(f)
который вы используете для хранения вашего временного XML-файла.