Отправить Прикрепленные Файлы Постом

dimat

Lotus team
31.07.2008
516
0
#1
Всем привет!

Есть вот такая хтмл страничка, которая позволяет отправить логин, пароль и некоторый список файлов постом на сервер.
<html>
<head>
<title>Загрузка отчетов</title>
<style>
table {text-align:center;border:0px solid black;width:600px}
td {text-align:center;border:0px solid black;width:600px}
.tdLeft {text-align:left}
.tdRight {text-align:right}
</style>
<script type="text/javascript">
var maxFileId = 1;
var listFiles = "";
function createFormFile() {
var fileForms = document.getElementById("fileForms");

var divFile=document.createElement("DIV");
divFile.id = "divFile"+maxFileId;
divFile.innerHTML = "<input type=\"file\" name=\"report"+maxFileId+"\" id=\"idReport"+maxFileId+"\">";
divFile.innerHTML += "<a href=\"#\" style='cursor:pointer;visibility:hidden' id=\"delFile"+maxFileId+"\" onclick=\"deleteFormFile("+maxFileId+")\">Отменить</a>";

fileForms.appendChild(divFile);
maxFileId++;
}

function deleteFormFile(id) {
if(id == maxFileId-1)
return;
var fileForms = document.getElementById("fileForms");
var fileToDel = document.getElementById("divFile"+id);
fileForms.removeChild(fileToDel);
}

function createFiles() {
var form = document.getElementById("postForm");
if(document.URL[document.URL.length-1] != '/')
form.action = document.URL + '/' + 'upload';
else
form.action = document.URL + 'upload';
createFormFile();
checkLast();
}
function checkLast(){
var lastFile = document.getElementById("idReport"+(maxFileId-1));
var delFile = document.getElementById("delFile"+(maxFileId-1));
if(lastFile.value) {
delFile.style.visibility = "visible";
createFormFile();
}
setTimeout("checkLast();",200);
}
function getFiles(){
var i;
listFiles = "";
for(i=0;i<document.forms[0].elements.length;i++) {
if(document.forms[0].elements.type == "file")
listFiles += document.forms[0].elements.name + " ";
}
document.getElementById("fileList").value = listFiles.substr(0,listFiles.length-1);
}
</script>
</head>
<body onload="createFiles()">
<div align="center">
<form action="upload" enctype="multipart/form-data" method="post" onsubmit="getFiles();" id="postForm">
<table>
<tr><td colspan="2"><h2>Загрузка отчетов</h2>ver 1.1.2.7</td></tr>
<tr><td class="tdRight">Логин:</td><td class="tdLeft"><input type="text" name="login"></td></tr>
<tr><td class="tdRight">Пароль:</td><td class="tdLeft"><input type="password" name="password"></td></tr>
<tr><td colspan="2">
<b>Укажите файлы загружаемых отчетов</b><br>
<p id="fileForms">
</p>
</td></tr>
<tr><td colspan="2" class="tdRight">
<input type="hidden" name="fileList" value="" id="fileList">
<input type="submit" value="Отправить" >
</td></tr>
</table>
</form>
</div>
</body>
</html>




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

Подскажите как это сделать?
 

dimat

Lotus team
31.07.2008
516
0
#3
Уточнение: нужно сделать на форме лотус и все это должно работать в клиенте(не web)
 

savl

Lotus team
28.10.2011
2 135
104
#4
хм... агент на текущем документе, на сервере.
еще вариант отправлять письмо-запрос с параметрами, сервер принимает запрос -> обрабатывает.
а может xpage? по сути такая же страница, но при этом и на клиенте...

ps я бы делал запросом, до xpage еще руки не дошли.
Отправлял бы письмо на определенный адрес, mail-in database. В ней агент на обработку.
После обработки сносил бы документ где содержится attach, логин, пароль.
Если ошибка - документ жив, можно поправить и переобработать.
 

dimat

Lotus team
31.07.2008
516
0
#5
Ну тут разные варианты могут быть, с этим нет проблем, проблема в том, что я не знаю как сформировать такой же пост запрос и отправить его

Кстати, xpage не вариант, у всех 7 клиент стоит
 

dimat

Lotus team
31.07.2008
516
0
#7
Вобщем сделали так: пхп скрипт который гетом принимает параметры (логин, пароль, список путей к файлам) и отправляет уже пост с логином паролем и файлами, на стороне лотуса гет выполняет ява агент, предварительно определив пару логин/пароль и список путей к файлам.

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

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 583
269
#8
Вобщем сделали так: пхп скрипт который гетом принимает параметры (логин, пароль, список путей к файлам) и отправляет уже пост с логином паролем и файлами, на стороне лотуса гет выполняет ява агент, предварительно определив пару логин/пароль и список путей к файлам.

наверное можно было бы сделать все на ява, но я так и не смог разобраться как отправить помимо текста еще и файлы.
вы про апач либу читали - там прям код написан, кот. нуна в джава вставить
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 583
269
#13
кста - вот полный пример (ссылка в блоге выше не работает)
http://indiwiz.wordpress.com/2009/02/11/mu...ts-http-client/

Добавлено: текст выложу, ато сцылки могут подохнуть :(<!--shcode--><pre><code class='java'>import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.nio.charset.Charset;
import org.apache.http.HttpResponse;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.entity.mime.content.StringBody;
import org.apache.http.impl.client.DefaultHttpClient;

...

// The input:
File f = ...;
String title = ...;
String desc = ...;

// The execution:
DefaultHttpClient httpclient = new DefaultHttpClient();

HttpPost method = new HttpPost("http://host:port/path");
MultipartEntity entity = new MultipartEntity();
entity.addPart("title", new StringBody(title, Charset.forName("UTF-8")));
entity.addPart("desc", new StringBody(desc, Charset.forName("UTF-8")));
FileBody fileBody = new FileBody(f);
entity.addPart("file", fileBody);
method.setEntity(entity);

HttpResponse response = httpclient.execute(method);
System.out.println(response.getStatusLine());[/CODE]

Добавлено: останется вопрос с авторизацией ;) (сессионной), но это тема отдельная (здесь как-то пробегала КМК)