You are viewing a plain text version of this content. The canonical link for it is here.
Posted to httpclient-users@hc.apache.org by kevin_vdb6 <ke...@student.kdg.be> on 2011/04/20 09:56:04 UTC
Posting "large" file with PostMethod
Hello,
I am develloping a systemtray application that sends parameters of a record
to a servlet, however this is working perfectly with files smaller than 1mb
but if i try to send larger files it crashes. Im using Swing as client. (the
problem is at the Attachment parameter) I've been searching a few days for
this but i couldn't find an answer, any help would be highly appreciated!
Code client:
ActionListener sendTask = new ActionListener() {
@Override
public void actionPerformed(ActionEvent actionEvent) {
String request = "http://localhost:8080/rest/addTask";
HttpClient client = new HttpClient();
PostMethod method = new PostMethod(request);
//conversion blob
File file = new File(txtUpload.getText());
try {
byte[] blob = getBytesFromFile(file);
String blobje = new String(blob,"ISO-8859-1");
method.addParameter("description",
txtOmschrijving.getText());
method.addParameter("attachment", blobje);
method.addParameter("contentType", new
MimetypesFileTypeMap().getContentType(file));
method.addParameter("fileName",file.getName());
} catch (IOException e) {
e.printStackTrace(); //To change body of catch statement
use File | Settings | File Templates.
}
// Send POST request
try {
int statusCode = client.executeMethod(method);
System.out.println(statusCode);
InputStream rstream = null;
rstream = method.getResponseBodyAsStream();
BufferedReader br = new BufferedReader(new
InputStreamReader(rstream));
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
br.close();
} catch (Exception e) {
e.printStackTrace();
}
txtOmschrijving.setText("");
txtUpload.setText("");
}
};
public static byte[] getBytesFromFile(File file) throws IOException {
InputStream is = new FileInputStream(file);
// Get the size of the file
long length = file.length();
// You cannot create an array using a long type.
// It needs to be an int type.
// Before converting to an int type, check
// to ensure that file is not larger than Integer.MAX_VALUE.
if (length > Integer.MAX_VALUE) {
// File is too large
}
// Create the byte array to hold the data
byte[] bytes = new byte[(int)length];
// Read in the bytes
int offset = 0;
int numRead = 0;
while (offset < bytes.length
&& (numRead=is.read(bytes, offset, bytes.length-offset)) >= 0) {
offset += numRead;
}
// Ensure all the bytes have been read in
if (offset < bytes.length) {
throw new IOException("Could not completely read file
"+file.getName());
}
// Close the input stream and return bytes
is.close();
return bytes;
}
Code on servlet:
public class AddTaskService extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse
response)
throws ServletException, IOException {
String description = request.getParameter("description");
String attachment = request.getParameter("attachment");
String fileName = request.getParameter("fileName");
String contentType = request.getParameter("contentType");
//parsing String to Blob
byte[] blobbinarie = attachment.getBytes("ISO-8859-1");
InputStream stream = new ByteArrayInputStream(blobbinarie);
Blob blobje = Hibernate.createBlob(stream);
//getting TaskController
ServletContext context = getServletContext();
WebApplicationContext applicationContext =
WebApplicationContextUtils.getWebApplicationContext(context);
TaskController taskController = (TaskController)
applicationContext.getBean("taskController");
Date today = Calendar.getInstance().getTime();
Task task = new Task(description,blobje,today,contentType,fileName);
//try to add new Task into Database
taskController.createTask(task);
}
}
Thanks in advance,
Kevin
--
View this message in context: http://old.nabble.com/Posting-%22large%22-file-with-PostMethod-tp31439133p31439133.html
Sent from the HttpClient-User mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
For additional commands, e-mail: httpclient-users-help@hc.apache.org
Re: Posting "large" file with PostMethod
Posted by sebb <se...@gmail.com>.
On 20 April 2011 08:56, kevin_vdb6 <ke...@student.kdg.be> wrote:
>
> Hello,
>
> I am develloping a systemtray application that sends parameters of a record
> to a servlet, however this is working perfectly with files smaller than 1mb
> but if i try to send larger files it crashes.
Unless you actually provide details of the "crash", it make debugging
much harder.
> Im using Swing as client. (the
> problem is at the Attachment parameter) I've been searching a few days for
> this but i couldn't find an answer, any help would be highly appreciated!
>
> Code client:
> ActionListener sendTask = new ActionListener() {
> @Override
> public void actionPerformed(ActionEvent actionEvent) {
> String request = "http://localhost:8080/rest/addTask";
>
> HttpClient client = new HttpClient();
> PostMethod method = new PostMethod(request);
>
> //conversion blob
> File file = new File(txtUpload.getText());
> try {
> byte[] blob = getBytesFromFile(file);
> String blobje = new String(blob,"ISO-8859-1");
>
> method.addParameter("description",
> txtOmschrijving.getText());
> method.addParameter("attachment", blobje);
> method.addParameter("contentType", new
> MimetypesFileTypeMap().getContentType(file));
> method.addParameter("fileName",file.getName());
> } catch (IOException e) {
> e.printStackTrace(); //To change body of catch statement
> use File | Settings | File Templates.
> }
>
>
> // Send POST request
> try {
> int statusCode = client.executeMethod(method);
> System.out.println(statusCode);
>
> InputStream rstream = null;
>
> rstream = method.getResponseBodyAsStream();
>
> BufferedReader br = new BufferedReader(new
> InputStreamReader(rstream));
>
> String line;
>
> while ((line = br.readLine()) != null) {
> System.out.println(line);
> }
>
>
>
> br.close();
> } catch (Exception e) {
> e.printStackTrace();
> }
>
> txtOmschrijving.setText("");
> txtUpload.setText("");
>
> }
> };
>
>
> public static byte[] getBytesFromFile(File file) throws IOException {
> InputStream is = new FileInputStream(file);
>
> // Get the size of the file
> long length = file.length();
>
> // You cannot create an array using a long type.
> // It needs to be an int type.
> // Before converting to an int type, check
> // to ensure that file is not larger than Integer.MAX_VALUE.
> if (length > Integer.MAX_VALUE) {
> // File is too large
> }
>
> // Create the byte array to hold the data
> byte[] bytes = new byte[(int)length];
>
> // Read in the bytes
> int offset = 0;
> int numRead = 0;
> while (offset < bytes.length
> && (numRead=is.read(bytes, offset, bytes.length-offset)) >= 0) {
> offset += numRead;
> }
>
> // Ensure all the bytes have been read in
> if (offset < bytes.length) {
> throw new IOException("Could not completely read file
> "+file.getName());
> }
>
> // Close the input stream and return bytes
> is.close();
> return bytes;
> }
>
>
>
>
> Code on servlet:
> public class AddTaskService extends HttpServlet {
> public void doPost(HttpServletRequest request, HttpServletResponse
> response)
> throws ServletException, IOException {
>
> String description = request.getParameter("description");
> String attachment = request.getParameter("attachment");
> String fileName = request.getParameter("fileName");
> String contentType = request.getParameter("contentType");
>
> //parsing String to Blob
> byte[] blobbinarie = attachment.getBytes("ISO-8859-1");
> InputStream stream = new ByteArrayInputStream(blobbinarie);
>
>
> Blob blobje = Hibernate.createBlob(stream);
>
> //getting TaskController
> ServletContext context = getServletContext();
> WebApplicationContext applicationContext =
> WebApplicationContextUtils.getWebApplicationContext(context);
> TaskController taskController = (TaskController)
> applicationContext.getBean("taskController");
> Date today = Calendar.getInstance().getTime();
> Task task = new Task(description,blobje,today,contentType,fileName);
>
> //try to add new Task into Database
> taskController.createTask(task);
>
> }
> }
>
>
> Thanks in advance,
> Kevin
> --
> View this message in context: http://old.nabble.com/Posting-%22large%22-file-with-PostMethod-tp31439133p31439133.html
> Sent from the HttpClient-User mailing list archive at Nabble.com.
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
> For additional commands, e-mail: httpclient-users-help@hc.apache.org
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
For additional commands, e-mail: httpclient-users-help@hc.apache.org