後,我有一個簡單的形式在newCharacter行動2文本和1個文件輸入播放:如何防止404對第一個請求圖片src上傳
@helper.form(action = routes.CharactersController.newCharacter(), 'enctype -> "multipart/form-data") {
@helper.inputText(field = characterForm("characterName"))
@helper.inputText(field = characterForm("characterRealName"))
@helper.inputFile(field = characterForm("characterImage"))
<p>
<input type="submit">
</p>
}
我的文件移動到文件夾資產。
Http.MultipartFormData body = request().body().asMultipartFormData();
Http.MultipartFormData.FilePart<File> picture = body.getFile("characterImage");
File file = picture.getFile();
file.renameTo(new File(LinkUtil.getCharacterUploadPath(), imageName + ".jpg"));
,然後進行重定向到/顯示頁面來顯示新輸入的字符
return redirect(routes.CharactersController.show(character.id, OrderType.MAIN.name()));
在新加載的頁面我只得到一個破碎的形象,看到404的控制檯,圖片。當我重新加載頁面時,圖像按預期呈現。
那麼哪個部分沒有準備好時,我重定向?是重新命名還是玩遊戲需要一些時間來尋找新的資產? 我如何確保在重定向之前一切都準備就緒?
編輯: 爲了提高我的問題
我用打2.5
LinkUtil.getCharacterUploadPath()解析爲 「公共/圖片/文字/」
我嵌入圖像在我的節目模板是這樣的:
<img src="@character.getImagePath">
然後解析爲「/assets/images/characters/imagename.jpg」
編輯2:進一步的調查:
當我檢查的東西,如file.exists()的新路徑newCharacter行動中的文件系統,我得到真正的。所以重命名/移動部分似乎完成了。 但是,如果我試圖通過環境獲取資源
environment.getResource("relativePathToFile");
它是空的。即使在一個while循環內,資源仍然爲空。這似乎表明該文件還沒有真正添加到類路徑中。不幸的是,無論我留在行動中多久,資源始終爲空。但是當我把線程休眠2000ms,然後在show動作中再次檢查資源時,它會得到正確解決。但只有等待2秒。
另一個測試是在圖像上使用onerror =「window.location.reload()」。在找到圖像之前會導致大約5-10次重新加載。
所以它只是一個時間問題,但是將線程置於任意數量的睡眠狀態顯然是錯誤的。 必須有一種方法來確保文件在類路徑中可用。
每一個提示/想法表示讚賞。