2017-12-01 19 views
-1

私は春のwebappを開発していて、mariadbにいくつかの画像をbyte []として保存したいと考えています。私は自分のDBに接続するリポジトリをコーディングする方法を知っていますが(チュートリアルでこれを見てきました)、これらのイメージを私のビューからアップロードサービスにどのように投稿できますか?私はCSSと小さなjavascriptで純粋なxhtmlサイトを使用しています。Springブートでデータベースに画像を保存

これらの画像をHTMLでどのように表示することも可能ですか?

Greets!

+0

アプリケーションのコードは作成しません。あなたの問題をいくつかのコードスニペットで提供してください。 – Sim

答えて

0

Webサーバーの場合、イメージ(およびビデオなど)をファイルシステムに入れてから、HTML <img src=path/to/pic>を使用してロードする方が簡単です。一方、データベーステーブルの列に "path/to/pic"を格納する(そうでなければ構築することができる)。

代替案は不器用です - ここには1つあります:MEDIUMBLOBに画像を保存してからbin64に変換し、画像にインラインで<img...bin64...>と言うことができます。ヤック(これはサムネイルにはあま​​りにも悪くないが、大きな画像には非効率的である)

0

あなたの答えはリックジェームズありがとう!

だからこれは私のHTMLフォームです:

<form method="POST" enctype="multipart/form-data" action="/"> 
        <table> 
         <tr><td>File to upload:</td><td><input type="file" name="file" /></td></tr> 
         <tr><td></td><td><input type="submit" value="Upload" /></td></tr> 
        </table> 
       </form> 

ストレージサービス:

@Service 
public class StorageService { 

Logger log = LoggerFactory.getLogger(this.getClass().getName()); 
private final Path rootLocation = Paths.get("upload-dir"); 

public void store(MultipartFile file){ 
    try { 
     Files.copy(file.getInputStream(), this.rootLocation.resolve(file.getOriginalFilename())); 
    } catch (Exception e) { 
     throw new RuntimeException("FAIL!"); 
    } 
} 

public Resource loadFile(String filename) { 
    try { 
     Path file = rootLocation.resolve(filename); 
     Resource resource = new UrlResource(file.toUri()); 
     if(resource.exists() || resource.isReadable()) { 
      return resource; 
     }else{ 
      throw new RuntimeException("FAIL!"); 
     } 
    } catch (MalformedURLException e) { 
     throw new RuntimeException("FAIL!"); 
    } 
} 

public void deleteAll() { 
    FileSystemUtils.deleteRecursively(rootLocation.toFile()); 
} 

public void init() { 
    try { 
     Files.createDirectory(rootLocation); 
    } catch (IOException e) { 
     throw new RuntimeException("Could not initialize storage!"); 
    } 
} 

}

と最後ではなく、少なくとも私のStorageController:

@PostMapping("/") 
public String handleFileUpload(@RequestParam("file") MultipartFile file)  { 
    try { 
     storageService.store(file); 
     files.add(file.getOriginalFilename()); 
    } catch (Exception e) { 
     System.out.println("Upload Failure!"); 
    } 
    return "redirect:/restaurant/uploadForm.xhtml"; 
} 

私の唯一の問題r今度は、これらのイメージを表示したいとき、リソースディレクトリにないので、パスを見つけることができません。

Project sources

私からの完全なパスを使用する/またはそれは私がたまに別のサーバーで、このWebアプリケーションを実行できるように、プロジェクトのルートディレクトリを使用することが可能であるべきでしょうか?

ありがとうございます!