0

画像をMysqlデータベースに挿入すると、画像が保存されます。

File file = new File("G:/photos/New Folder (2)/www.geocities.com_cliknenjoy_lakshmimittal.jpg");

byte[] bFile = new byte[(int) file.length()];

try {

    FileInputStream fileInputStream = new FileInputStream(file);
    fileInputStream.read(bFile);
    fileInputStream.close();
} catch (Exception e) {
     e.printStackTrace();

}
inpatient.setImagefile(bFile);

私はmysqlでblobデータ型を使用しています。

private byte[] imagefile;

public byte[] getImagefile() {      
    return imagefile;   
}   

public void setImagefile(byte[] imagefile) { 
    this.imagefile = imagefile;     
}

mysqldatabase から画像ファイルを開くことができません。どうすればこれを開くことができますか?

4

1 に答える 1

0

JPA アノテーションを使用する場合、プロパティに次のようにアノテーションを付けることができます。@Lob

@Lob
private byte[] imagefile;

また、@Basic(fetch=FetchType.LAZY)データのオーバーヘッドを回避するためにも使用できます。

ステファノ

- 編集

画像のバイナリ コンテンツを byte[] として保持したら、画像を表示する方法が 2 つあります。新しいサーブレットまたは新しいコントローラーを作成することです。前者は不必要に複雑になるため、通常は後者の方法を使用します。

最初に、コントローラーが応答するパスを選択する必要があります。仮定する"/dbresources/images/{id}"

コントローラーは次のようになります

@Controller
@RequestMapping(value = "/dbresources/images")
public class PictureImageController {

    @Autowired
    private PictureService pictureService; // a service to retrieve pictures fomr DB

    // getters and setters

@RequestMapping(value = "/{id}")
public void writePicture(@PathVariable("id") String id, HttpServletRequest request, HttpServletResponse response) throws IOException {
        try{
            Picture img = pictureService.findById(id);
            response.setContent(picture.getImagefile());
            response.setContentLength(picture.getImagefile().length);

            //additionally, you should add the mime-type and the last
            //change date (to allow the browsers to use the cache) if these info are available

            response.getOutputStream().write(picture.getImagefile());
            response.setStatus(HttpServletResponse.SC_OK);
        }
        catch(Exception e){
            response.setStatus(HttpServletResponse.SC_NOT_FOUND); // 404. Add specific catch for specific errors
        }
}

次に、jsp(x) に次のように記述する必要があります。

<img src="/dbresources/images/[the id of the image to show]" />

コントローラはこのリクエストをインターセプトし、画像のバイナリ コンテンツを出力ストリームに書き込んで処理します。

これが十分に明確であることを願っています。また、その場で書いたので、コードの正確性を信頼しないでください。

ステファノ

于 2013-03-27T16:06:10.293 に答える