0

オブジェクトにバイト[]としてリンクされたファイルがあります。このファイルをDBに格納し、アノテーションBlob column typeでバインディングします。@Lob

問題は、このシステムがファイルの種類を管理していないことです (つまり、pdf をアップロードしますが、ダウンロードすると種類がありません)。

この種の問題に対処する簡単な方法を教えてください。

私の最初の考えは、型を単純に格納することvarchar columnでしたが、byte[] ゲッターでストリームの型をどのように変更しますか?

4

2 に答える 2

0

ロブコンテンツのmimeTypeに別のフィールドを使用することについては、あなたが正しいと思います。したがって、アップロード中にmimetypeを推測してjpaエンティティに保存できます。

ダウンロード サーブレットでは、次のように記述できます。

String mimetype = entity.getMimeType();

// sets response content type
if (mimetype == null) {
    mimetype = "application/octet-stream";
}
response.setContentType(mimetype);
response.setContentLength((int)file.length());
String fileName = (new File(filePath)).getName();

// sets HTTP header
response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
于 2013-07-19T10:04:31.870 に答える
0

ファイルをデータベースに正常に永続化すると仮定します。それをダウンロードしてタイプを知るには、オブジェクトcontent-type内でを提供する必要があります。HttpSessionResponse

ではJSF、次のように実行できます。

FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
HttpServletResponse response = (HttpServletResponse) externalContext.getResponse();
response.reset();
response.setContentType(contentType);
response.setHeader("Content-Disposition", "attachment; filename=\"" + filename + "\"");

その後、ストリームをレスポンスのOutputStream.

さまざまな種類のファイルをアップロードする場合は、アップロードされたドキュメントの正確な種類をデータベースのどこかに保存することをお勧めします。次に、所有しているドキュメントの種類ごとに、対応する (またはcontent-typeとも呼ばれる)を見つけることができます。MIME-typeinternet-media-type

ここにすべてのリストがありますMIME-types

于 2013-07-19T09:59:44.313 に答える