• Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other Pie Elite all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Campbell Ritchie
  • Jeanne Boyarsky
  • Ron McLeod
  • Paul Clapham
  • Liutauras Vilda
Sheriffs:
  • paul wheaton
  • Rob Spoor
  • Devaka Cooray
Saloon Keepers:
  • Stephan van Hulst
  • Tim Holloway
  • Carey Brown
  • Frits Walraven
  • Tim Moores
Bartenders:
  • Mikalai Zaikin

moving files over the network

 
Ranch Hand
Posts: 237
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • 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
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

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

**********************************************
 
Greenhorn
Posts: 2
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
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
Posts: 237
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • 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.

Alan

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

 
I am Arthur, King of the Britons. And this is a tiny ad:
a bit of art, as a gift, that will fit in a stocking
https://gardener-gift.com
reply
    Bookmark Topic Watch Topic
  • New Topic