我試圖堅持使用JPA提供了上傳文件到數據庫中。最「自然」的方式(對我來說)是將域對象定義爲:堅持CommonsMultipartFile數據庫
@Entity
class UploadFile {
...
public CommonsMultipartFile getFileData()
{
return fileData;
}
}
但是由於沒有這樣的數據庫映射類型,所以這不起作用。在網上搜索,我發現,人們似乎適應兩種方法之一:
- 定義字段爲
java.sql.blob;
- 定義字段作爲
byte[]
在@Controller
類,傳入HttpServletRequest
變轉換爲MultipartHttpServletRequest
以訪問MultipartFile
並將其轉換回byte[]
流。然而,在這個方案中,我有「隨機」的結果令我感到困惑:我時不時地遇到「bean屬性不可讀」的錯誤,在byte []字段上返回類型的getter方法可能不匹配。我加倍和三重檢查了我的Bean定義,並且找不到任何錯誤。
我想我的問題是兩個摺疊:(1)任何想法,爲什麼在這種情況下會發生這個錯誤? (2)更重要的是,這種處理上傳文件的「推薦」方式是什麼?
感謝
奧利弗
感謝您的回覆。一個簡單的問題:假設我在JSP中使用''來顯示上傳表單,並使用'modelAttribute'將表單對象綁定到'UpLoadFile','path'字段被設置爲'fileData'。所以它應該是'@RequestParam('fileData')'?這會導致類型不匹配問題? –
Oliver
2011-03-08 12:24:36
我剛查過,確實導致類型不匹配問題。 – Oliver 2011-03-08 17:26:41
如果你使用一個帶有文件上傳的模型屬性,那麼你可以(應該,我認爲)將'MultipartFile'放在你的表單(模型)對象中,而不是將它用作方法參數。所以你的控制器方法是'exampleFileUpload(@ModelAttribute('fileData')UpLoadFile model)',你的'UpLoadFile'表單對象將包含'MultipartFile文件'屬性,並且你可以通過表單對象來訪問文件,也就是'model 。.getFile()的getBytes();'。 – gutch 2011-03-08 22:36:22