多个图片上传(Play Framework)

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)

all*_*skd 8

你正在使用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对象在控制器中?

干杯,对不起,如果我听起来有点多余,有点累,但我希望这可以帮助你:)