Moo*_*ooh 4 java file-upload web-applications playframework
我试图允许用户上传多个图像,但当我用一些文件验证表单时,我得到此错误 图像字段上的值不正确 ...这是我的代码:
在视图中:
#{form @save(id)}
#{ifErrors}
<p class="error">
Please correct these errors.
</p>
#{/ifErrors}
<p>
<label>Titre</label>
<input type="text" name="title" value="${flash.title}" id="title" />
<span class="error">#{error 'title' /}
</p>
<p>
<label>Description</label>
<textarea name="detail" value="${flash.detail}" id="detail" /></textarea>
<span class="error">#{error 'detail' /}
</p>
<p>
<label>Photos</label>
<input type="file" draggable="true" name="files" id="files" multiple="multiple"/>
<strong>(Max. 5 photos)</strong> <span class="error">#{error 'files' /}
</p>
<p>
<input type="submit" value="Publier l'annonce" />
</p>
#{/form}
Run Code Online (Sandbox Code Playgroud)
java函数:
public static void save(long id, @Required String title, @Required String detail, File[] files) throws IOException{
if (id == 0){
validation.keep();
params.flash();
flash.error("Vous devez préalablement selectionner une catégorie...");
Application.setclassified();
}
// Action when form errors found
else if (validation.hasErrors() ) {
validation.keep();
params.flash();
flash.error("Veuillez corriger les erreurs...");
form(id);
}
//save uploaded images
for (File file : files) {
FileInputStream is = new FileInputStream(file);
String original = "/data/" + file.getName();
IOUtils.copy(is, new FileOutputStream(Play.getFile(original)));
}
}
Run Code Online (Sandbox Code Playgroud)
你正在使用HTML5字段与DnD文件上传不是吗?我不知道JS提供了什么样的功能,但通常当你删除文件时它会自动上传它.我建议你可能想模仿YouTube上传功能.例如:
上传文件后,返回带有生成的文件ID的json,这样当您保存记录时,您可以将其与刚刚上传的文件相关联.
当我摆弄它通常的JavaScript将打开一个新的POST请求,即要求你必须得到它request.body这是一个InputStream,使用的InputStream与IOUtils来保存文件,保存一次返回一个JSON对象具有的文件名或路径文件.
事实是,我不认为它永远不会通过,File files[]因为javascript打开一个新的POST请求,所以它总是会返回不正确的值,因为当你向服务器端提交数据时,它永远不会被填充.
您可以尝试这样做:创建两个路由,一个上传文件,一个保存文件的元数据,一个方法执行所有文件处理,另一个抓取json返回并关联它然后保存: )
我还在这里发布了一些类似问题的示例代码: PlayFramework:Ajax + Drag n'Drop + File Upload + File对象在控制器中?
干杯,对不起,如果我听起来有点多余,有点累,但我希望这可以帮助你:)