Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > загрузка файлов?


Автор: Klio 18.4.2010, 12:55
Приветствую господа программисты!
У меня есть пара-тройка вопросов о скачивании файлов:
- файл сервер поддерживает загрузку только по ftp протоколу, как можно организовать загрузку.
- возможно ли узнать размер закачиваемого файла до обработки самой загрузки, 
- как можно осуществить организацию прерывания загрузки!
Заранее спасибо всем кто хоть что-то об этом знает!

Автор: powerOn 18.4.2010, 13:48
Цитата

загрузка файлов? атрибуты закачки

Цитата(Klio @  18.4.2010,  13:55 Найти цитируемый пост)
У меня есть пара-тройка вопросов о скачивании файлов:

Так вас интересует upload файлов на сервер или download с сервера?

Цитата(Klio @  18.4.2010,  13:55 Найти цитируемый пост)
файл сервер поддерживает загрузку только по ftp протоколу, как можно организовать загрузку.

Вы пишите файл сервер или клиента? или и то и то? Общение по FTP протоколу? 

Цитата(Klio @  18.4.2010,  13:55 Найти цитируемый пост)
- возможно ли узнать размер закачиваемого файла до обработки самой загрузки, 

На клиенте или сервере?

Цитата(Klio @  18.4.2010,  13:55 Найти цитируемый пост)
- как можно осуществить организацию прерывания загрузки!

На клиенте или сервере?


Автор: Klio 18.4.2010, 13:56
извиняюсь не корректно написал...
Загрузка файлов на сервер (upload).
Размер файла определить на сервере в Servletе.
Возможность сервера - лишь чтение и обработка файлов, запись на диск возможна 
лишь по ftp.

Автор: dobrolub 19.4.2010, 07:59
Код

import java.io.*;
import java.net.*;

public class T {
  public static void main(String[] args) throws Exception {
    File file = new File("c:/temp/file-to-upload.bin");  // локальный файл
    System.out.println("Len: " + file.length()); // size of file
    InputStream in = new FileInputStream(file);
    
    URL url = new URL("ftp://username:[email protected]/pub/upload/target-file.bin"); //username and password, target file
    OutputStream out = url.openConnection().getOutputStream();
    byte []buffer = new byte[9192];
    int len;
    while ((len = in.read(buffer)) > 0)
       out.write(buffer, 0, len);

    out.flush();
    out.close();
  
    //сделано

   
  }
}


Для того чтобы процесс был прерываемым надо делать upload в новой Thread  и прерывать эту Тhread



Автор: Klio 19.4.2010, 17:19
Мне казалось как Тhread так и InputStream и OutputStream это организации потоков!

или же необходимо создать отдельно поток рода "       Thread nnew;          " 
а потом, указанную выше обработку загрузки, добавить в обработку данного потока?

Автор: dobrolub 19.4.2010, 18:47
примерно так:
 

Код

Runnable uploader  = new Runnable() {
  public void run() {
     //код загрузки;
  }
};

Thread worker = new Thread(uploader);
worker.start();

Автор: Klio 19.4.2010, 20:23
поточный вопрос:
можно ли куда-нибудь (например в куки) записать ссылку на элемент "worker" - чтобы потом можно управлять данным потоком (остановка, приостановка, запуск), с других страниц (задумка для реализации на Ajax).
Или же есть более простой вариант реализации?

Автор: dobrolub 19.4.2010, 20:46
Да. Worker нужно поместить в Map<String, Thread> map = new HashMap<String, Thread>();

где  String уникальный идентификатор выдаваемый каждому workerу.

Этот идентификатор и надо пересылать в браузер и обратно, в сервлет, когда требуется остановить закачку.

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