4 Eylül 2009 Cuma

Java client ile servlet kullanarak file upload (Bu cümleyi Türkçe yazmak mümkün mü?)

Diyelim ki java ugulamanız ile bir server'a dosya upload etmeniz gerekiyor.. Apache bunun için http client ve file upload kütüphaneleri oluşturmuş. Bu kütüphaneleri kullanarak basit bir şekilde işinizi halledebiliyorsunuz. Ben client tarafında httpclient-2.0 jar'ı, server tarafında ise fileupload-1.0 jar'ı kullandım. Bunların yeni sürümleri de var ama bunlar da işimi gördü.

Öncelikle client koda bakalım:

public static void upload(String sourceFilePath) {
String servletUrl = "http://some.url/servlet";
try {
HttpClient client = new HttpClient();
MultipartPostMethod mPost = new MultipartPostMethod(servletUrl);
// Connection timeout in milliseconds
client.setConnectionTimeout(8000);

File file = new File(sourceFilePath);
mPost.addParameter(file.getName(), file);

int statusCode = client.executeMethod(mPost);
mPost.releaseConnection();
if (statusCode == 2000) {
throw new Exception("Dosya upload edilemedi");
}
// diğer işlemler....
} catch (Exception ex) {
// hatayla ilgili kod...
}
}


Karşı tarafta da bu isteği karşılayacak bir servlet yazmak gerekiyor:

protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
String dosyaDizini="D:\\";
try {
DiskFileUpload diskFileUpload = new DiskFileUpload();
// Maksimum kabul edilebilecek dosya boyutu
diskFileUpload.setSizeMax(1000000);

List requestItems = diskFileUpload.parseRequest(request);
Iterator iterator = requestItems.iterator();

while (iterator.hasNext()) {
FileItem fileItem = (FileItem) iterator.next();
if (!fileItem.isFormField()) {
File file= new File(dosyaDizini,fileItem.getName());
fileItem.write(file);
// CLİENT'A BAŞARI MESAJI
response.sendError(1000);
}
}
} catch (Exception ioex) {
// HATA OLUŞTU MESAJI
response.sendError(2000);
}
}

Tabi ki bu api ile dosya dışında metinsel parametreler göndermek de mümkün.



Hiç yorum yok: