Добавить изображения в банке динамически - PullRequest
3 голосов
/ 01 марта 2011

Как динамически добавлять изображения в банку?Это вообще возможно?

В моем проекте свинга я позволил пользователю выбрать его user_image с помощью JFileChooser.Теперь я не могу использовать базу данных.Поэтому я думаю, что если я могу добавить загруженное изображение в банку, а затем получить его.Должно ли это быть правильным способом?Или любая другая идея сделать это?Как я могу эффективно сохранять изображения, чтобы мое приложение Swing могло получить к нему доступ.Количество изображений не является фиксированным, поскольку изображения будут загружены несколькими пользователями на одном компьютере с использованием одного и того же файла JAR.

Ответы [ 2 ]

0 голосов
/ 01 марта 2011

Я не уверен, что хранить динамические данные в банке - это хорошая идея.Если вы создаете динамическое локальное приложение, вы можете использовать рабочий каталог .Или вы можете использовать http соединение для работы с удаленным хранилищем изображений .Или вы можете использовать DB .

. Или вы разрабатываете что-то вроде гибкого интерфейса, например:

public interface ImageProvider {
  public void storeImage(MyImageClass image, String imageLable);
  public MyImageClass getImage(String imageLable);
}

.

И реализуете его с помощью классовПока ваше приложение разрабатывается:

public class ImageJarProvider implements ImageProvider { // jar solution
  private File jar = null;
  public ImageJarProvider(File jar) {
    this.jar = jar;
  }
  public void storeImage(MyImageClass image, String imageLable) {
     // implement jar repack:
     // use classes JarFile, ZipEntry and ZipOutputStream.
     // unpack file
     JarFile jarFile = new JarFile(jar);
     ZipEntry inputEntry = jarFile.getEntry("path/you/need/to/file");
     File outFile = new File("temp.jar");
     FileOutputStream zipFileStream = new FileOutputStream(outfile);
     ZipOutputStream zipOutStream = new ZipOutputStream(new BufferedOutputStream(zipFileStream));
     ZipEntry entry = new ZipEntry("filename you pack");
     zipOutStream.putNextEntry(entry);
     //pack all your files and pack new image.
     //this code just shows how to unpack and pack zip(jar)-archives.
     BufferedInputStream origin = new BufferedInputStream(new jarFile.getInputStream(inputEntry));
     byte data[] = new byte[2048];
     int count = 0;
     while((count = origin.read(data, 0, data.length)) != -1) {
       zipOutStream.write(data, 0, count);
     }
     zipOutStream.close();
     origin.close();
  }

  public MyImageClass getImage(String imageLable) {
     // implement unpack of image
     ...
  }
}

public class ImageHttpProvider implements ImageProvider { // http solution
  public ImageHttpProvider(String host, int port) {
     ...
  }

  public void storeImage(MyImageClass image, String imageLable) {
     // implement image upload
     ...
  }

  public MyImageClass getImage(String imageLable) {
     // implement HTTP image download
     ...
  }
}

public class ImageDirProvider implements ImageProvider { // working directory solution
  public ImageDirProvider(File dir) {
     ...
  }

  public void storeImage(MyImageClass image, String imageLable) {
     // implement file work
     ...
  }

  public MyImageClass getImage(String imageLable) {
     // implement file work
     ...
  }
}

public class ImageDBProvider implements ImageProvider { // DB solution
  public ImageDBProvider(String jdbcURL, Properties jdbcProperties) {
     ...
  }

  public void storeImage(MyImageClass image, String imageLable) {
     // implement jdbc clob
     ...
  }

  public MyImageClass getImage(String imageLable) {
     // implement jdbc clob
     ...
  }
}

.

Вы можете организовать хранение и чтение изображений по своему усмотрению без изменений в механизме вашего приложения.

0 голосов
/ 01 марта 2011

Я бы предложил вам иметь каталог приложения , из которого ваше приложение считывает изображения , и настроить этот каталог с помощью Preference-API

...