Загрузка файла Axis2 по чанку - PullRequest
3 голосов
/ 17 ноября 2010

Я пытаюсь загрузить файл с помощью веб-службы Axis2 размером 1024 чанка.

Моя серверная сторона выглядит следующим образом:

public void appendChunk(int count, byte[] buffer){
    FileOutputStream fos = null;
     try {
         File destinationFile = new File("c:\\file1.exe");
        fos = new FileOutputStream(destinationFile,true);
        fos.write(buffer,0, count);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    finally{
        try {
            fos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Моя клиентская сторона выглядит следующим образом:

static int CHUNK_SIZE =1024;
public static void main(String[] args) throws IOException, ServiceException {
    FileUploadService strub = new FileUploadServiceLocator();
    FileUploadServicePortType a = strub.getFileUploadServiceHttpSoap12Endpoint();
    byte[] buffer = new byte[CHUNK_SIZE];
    FileInputStream fis = null;
    File file = new File("C:\\install.exe");
    int count;
    try {
         fis =  new FileInputStream(file);
        while((count = fis.read(buffer, 0, CHUNK_SIZE)) >0 )
        {
            a.appendChunk(count, buffer);
        }   
        } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
        finally{
            fis.close();
        }
}

После этого размер файла неверный и если размер файла оригинала500 Кб, оригинальный размер варьируется от 200 до 400 Кб.

Что я делаю не так?

Обновление: Я посмотрел файл log4j в Tomcat

Nov 17, 2010 2:08:31 PM org.apache.tomcat.util.net.JIoEndpoint createWorkerThread
INFO: Maximum number of threads (200) created for connector with address null and port 80

Похоже, что все запросы к веб-серверу выполняются асинхронно, и я также получаю исключение ввода-вывода, чтофайл используется другим процессом.

1 Ответ

1 голос
/ 26 мая 2011

попробуйте добавить fos.flush(); перед вашим fos.close(); в реализации вашего сервера.

Изменить

while((count = fis.read(buffer, 0, CHUNK_SIZE)) >0 )

на

while((count = fis.read(buffer, 0, CHUNK_SIZE)) != -1 )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...