Jakarta HTTPClient upload problemer!
Hej,Efter at have fundet ud af at Suns egne HTTP biblioteker insistere på at buffere alting i hukommelsen før det uploades til en server, (hvilket resulterede i en OutOfMemory exception), så er jeg startet på at se om jeg kan bruge det bibliotek der kommer fra Jakarta. Så strikkede jeg dette kode sammen:
= = = = = = = = = = = = =
String source = "file.zip";
String destination = "http://somewhere.com/perl/db.pl";
try {
HttpClient client = new HttpClient();
PostMethod method = new PostMethod(destination);
method.setRequestHeader("User-Agent", "ascii");
Part[] parts = {
new StringPart("action", "uploadfile"),
new StringPart("project", "lib"),
new FilePart(source, new File(source))
};
method.setRequestEntity(new MultipartRequestEntity(parts,
method.getParams()));
// Authenticate
client.getParams().setAuthenticationPreemptive(true);
Credentials defaultcreds = new UsernamePasswordCredentials("login",
"passwd");
client.getState().setCredentials(AuthScope.ANY, defaultcreds);
// Execute the POST method
int statusCode = client.executeMethod(method);
if( statusCode != -1 )
{
String contents = method.getResponseBodyAsString();
method.releaseConnection();
System.out.println( contents );
}
}
catch(Exception e)
{
e.printStackTrace();
}
= = = = = = = = = = = = =
Når jeg eksekvere det parses de første parametre ok ("action" & "project"), men koden på serveren der står for validering af parametre stejler over FilePart parameteren som den tager for at være en parameter kaldet “file.zip”. Men selv hvis jeg fjerner dette valideringskode så fejler serveren (i Perl CGI biblioteket) på et senere tidspunkt med en fejl om at den ikke kan finde en File Handle. Alt dette havde jeg allerede haft til at fungere fint med Suns egne Java biblioteker.
Så har jeg prøvet nogle alternative metoder til at overføre parametre:
= = = = = = = = = = = = =
// Configure the form parameters
method.addParameter("project", "lib");
method.addParameter("action", "uploadfile");
= = = = = = = = = = = = =
Men det syntes ikke at være muligt at overføre FiLEs med “addParameter”. Og:
= = = = = = = = = = = = =
NameValuePair[] data = {
new NameValuePair("project", "lib"),
new NameValuePair("action", "uploadfile"),
};
filePost.setRequestBody(data);
= = = = = = = = = = = = =
Tager heller ikke FILEs. Og er vist i øvrigt deprecated.
- Hjælp! Jeg skal blot have noget kode der uploader filer til en Apache server der bruger nogle Perl Cgi scripts. Det kan da ikke være så svært?! Hvad gør jeg forkert?