JavaRanch » Java Forums »
Java »
Sockets and Internet Protocols
| Author |
moving files over the network
|
Alan Shiers
Ranch Hand
Joined: Sep 24, 2003
Posts: 216
|
|
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: 216
|
|
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 *********************************************
|
 |
 |
|
|
subject: moving files over the network
|
|
|
|