• Post Reply Bookmark Topic Watch Topic
  • New Topic

moving files over the network

Alan Shiers
Ranch Hand
Posts: 237
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Hi there,

I have this one recurring problem with a worker-thread on a client app that
I use to upload files to a server app. The problem seems to only exist when
dealing with compressed files ( *.zip ) and the like. After an upload of a
compressed file, I go to the server and try to open it with a compression
utility. Every time it shoots up a message saying that the file is not a
valid archive file. For the life of me I don't understand why my code works
with any other file type except for compressed files. I need an expert to
look over my code and explain why it fails when dealing with compressed file
types. I need to get this problem rectified and make my code more robust
and failsafe.

To just give a brief explanation of my approach to creating these methods,
which you'll see below, is to determine an appropriate buffer size in
accordance with the largest file of any group of files being uploaded.
Next, I iterate over an array of File objects using a for loop structure
wherein its body I call a method (uploadFile(int bufferSize, File file))
that handles each File seperately. In uploadFile(...) I create instances of
BufferedOutputStream and BufferedInputStream to read in a file and send it
out the wire. If the file is substantially large (bigger than 4kb), which
many zipped files are, then I send the data over the wire in 256 byte

The method receiveMultipleFiles(), on the server-side, handles the incoming
data for this process.

Maybe I need to implement some kind of byte counting scheme to ensure the
exact number of bytes get read in and sent out the wire on the client side,
and the same thing on the server side? I don't know! I'm at a loss at this

Please advise,

Alan Shiers


Balasubramani Amirthalingam
Posts: 2
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator

I am also facing the problem to upload files in weblogic.
I got following exception like
java.net.ProtocolException: EOF after reading only: '16384' of: '269635' promised bytes, out of which at least: '0' were already buffered.

I am uploading one file in server but my code is working fine if the file size is less than 4096 bytes, if i hv given more than that i got exception.
if u refer my code, u can get some idea, simmilarly if u get the solution for that it will be helpful for me..

my code is...
private void uploadFunction(HttpServletRequest req,HttpServletResponse res){

String contentType = req.getContentType();
System.out.println("Content type is :: " +contentType);
if ((contentType != null) && (contentType.indexOf("multipart/form-data") >= 0)) {
DataInputStream in = new DataInputStream(req.getInputStream());
int formDataLength = req.getContentLength();


byte dataBytes[] = new byte[formDataLength];
int byteRead = 0;
int totalBytesRead = 0;

while (totalBytesRead < formDataLength) {
byteRead = in.read(dataBytes, totalBytesRead, formDataLength);
totalBytesRead += byteRead;
String file = new String(dataBytes);

String saveFile = file.substring(file.indexOf("filename=\"") + 10);

saveFile = saveFile.substring(0, saveFile.indexOf("\n"));
saveFile = saveFile.substring(saveFile.lastIndexOf("\\") + 1,saveFile.indexOf("\""));

int lastIndex = contentType.lastIndexOf("=");
String boundary = contentType.substring(lastIndex + 1,contentType.length());
int pos;
pos = file.indexOf("filename=\"");
pos = file.indexOf("\n", pos) + 1;
pos = file.indexOf("\n", pos) + 1;
pos = file.indexOf("\n", pos) + 1;
int boundaryLocation = file.indexOf(boundary, pos) - 4;
int startPos = ((file.substring(0, pos)).getBytes()).length;
int endPos = ((file.substring(0, boundaryLocation)).getBytes()).length;
FileOutputStream fileOut = new FileOutputStream(saveFile);
fileOut.write(dataBytes, startPos, (endPos - startPos));

}catch(IOException e){
thx in advance
Alan Shiers
Ranch Hand
Posts: 237
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Hi there,

Here is a program I came across in another newgroup on the net. I scoured many newsgroups for many hours and finally found this little gem. This solved my problems. Like they say, "KISS" Keep it simple stupid!

This program acts as both the server app and client app. So, you can run two instances of this class at the same time on one workstation. The main() method will start the program either as the server app or the client app depending on whether you pass an arguement to main() or not. The arguement can be anything.

Hope this helps you as it did me.



  • Post Reply Bookmark Topic Watch Topic
  • New Topic
Boost this thread!