Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > загрузка файлов на сервер


Автор: Alexandering 15.10.2009, 23:01
Имею: используя пакет java.net.* организовать заливку файлов на сервер.
Делаю все пока на лок. машине.
С сокетами разобрался. Отправлять скажем текстовые файлы тож могу, построчно читая, записывая в Stream и на сервере из Stream построчно читая.
------------------
Но как быть с произвольным файлом?
Для этого использовал:
на клиенте:
Код

Socket socket = new Socket(HOST, PORT);
         FileInputStream in = new FileInputStream(sourceFile);
         FilterOutputStream out = new FilterOutputStream(socket.getOutputStream());
..........................................
while (in.read(repeatArr) != -1) {
             out.write(repeatArr);
         }


где repeatArr -массив byte[]. Если выделять память для массива более чем на 1 элемент(1 байт), то файл приходит на сервер не нормально, размер его в чреднем увеличен в 2 раза. Если оставить 1 Байт, то передача даже файла в 1 МБ очень длительна.

На сервере:
Код

FilterInputStream in = new BufferedInputStream(socket.getInputStream());
.................
FileOutputStream out = new FileOutputStream(new File(new String(fileName)));

................
while (in.read(repeatArr) != -1) {
             out.write(repeatArr);
         }


На сервере тож приходится по 1 байтику читать.
В чем тут проблема?
Для текстового файла: небольшие, скажем 1,4 КБ приходят норм, при кол-ве элементов для массива 100.
Файлы побольше - тест целиком приходит тот же, но в конец дописывается еще куча повторного текста, и так еще и еще,..не понятно с какого места...
Не знаю, как в этом случае применять in.flush out.flush и куда их вставлять и зачем, ведь у мну вроде Буферизованных потоков нет.
-----------------------
Да, использую TCP:
Socket
ServerSocket.

Автор: garbuz 15.10.2009, 23:40
Посмотрите в сторону http://commons.apache.org/fileupload/

Автор: firedrago 15.10.2009, 23:42
и когда мы будем пользоваться поиском ?!  smile 
http://base.vingrad.ru/Networking-528  и раздел по http://forum.vingrad.ru/forum/java-network.html для кого ?!

Добавлено @ 23:50
Код

private static PrintWriter out;
private static BufferedReader in;

public static final int BUFFER_SIZE = 1024 * 1024 * 5;
private byte[] buffer = new byte[BUFFER_SIZE];
    
private void inputStreamToFile(InputStream is, String filename) throws IOException{
        
    BufferedInputStream in = new BufferedInputStream(is);
    BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(filename));
    int len = 0;
    int recieve = 0;
    while ((len = in.read(buffer)) > 0) {
        out.write(buffer, 0, len);
        recieve +=len;
    }
    in.close();
    out.flush();
    out.close();
}


Код

private PrintWriter out;
private BufferedReader in;

public static final int BUFFER_SIZE = 1024 * 1024 * 5;
private byte[] buffer = new byte[BUFFER_SIZE];

private void fileToOutputStream(String filename, OutputStream os) throws IOException{
    BufferedInputStream in = new BufferedInputStream( new FileInputStream(new File(filename)));
    BufferedOutputStream bos = new BufferedOutputStream(os);
            
    int len = 0;
    int send = 0;
    while ((len = in.read(buffer)) > 0) {
        bos.write(buffer, 0, len);
        send += len;
    }
    in.close();
    bos.flush();
    bos.close();        
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)