File APIs for Java Developers
Manipulate DOC, XLS, PPT, PDF and many others from your application.
http://aspose.com/file-tools
The moose likes Sockets and Internet Protocols and the fly likes moving files over the network Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Java » Sockets and Internet Protocols
Bookmark "moving files over the network" Watch "moving files over the network" New topic
Author

moving files over the network

Alan Shiers
Ranch Hand

Joined: Sep 24, 2003
Posts: 237
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
chunks.

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
point.

Please advise,

Alan Shiers

**************************************

**********************************************
Balasubramani Amirthalingam
Greenhorn

Joined: Nov 02, 2004
Posts: 2
Hi

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)) {
try{
DataInputStream in = new DataInputStream(req.getInputStream());
int formDataLength = req.getContentLength();

if(formDataLength<=5000000){

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;
if(saveFile.length()!=0){
saveFile="D:\\soft\\"+saveFile;
FileOutputStream fileOut = new FileOutputStream(saveFile);
fileOut.write(dataBytes, startPos, (endPos - startPos));
fileOut.flush();
fileOut.close();
}


}
}catch(IOException e){
System.out.println("except.........."+e);
e.printStackTrace();
}
}
thx in advance
Balu
Alan Shiers
Ranch Hand

Joined: Sep 24, 2003
Posts: 237
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.

Alan

*********************************************

 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: moving files over the network