【问题标题】:Multiple images upload ( Play Framework )多张图片上传(Play Framework)
【发布时间】:2011-02-20 20:51:56
【问题描述】:

我正在尝试允许用户上传多张图片,但是当我使用一些文件验证表单时,我在图片字段中收到此错误Incorrect value... 这是我的代码:

在视图中:

 #{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}

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))); 

        }  
 }    

【问题讨论】:

  • 您使用的是什么版本的游戏?我认为在早期版本的 Play 中上传多个文件存在一些问题。
  • 这是准确的代码吗?我看不出有什么不对。您没有验证 files 参数(至少在您共享的代码中)所以我看不出这个验证错误来自哪里。
  • 现在您可以通过验证测试看到缺失的部分

标签: java web-applications file-upload playframework


【解决方案1】:

你是在使用 HTML5 字段和 DnD 文件上传是吗?我不知道 JS 提供了什么样的功能,但通常当你删除文件时它会自动上传它。我建议您可能想模仿 YouTube 上传功能。例如:

上传文件后,返回一个带有文件生成 ID 的 json,以便在保存记录时将其与刚刚上传的文件相关联。

当我玩它时,通常 javascript 会打开一个新的 POST 请求,该请求您必须从 request.body 获取它,这是一个 InputStream,使用带有 IOUtils 的 InputStream 来保存文件,一旦保存返回一个带有文件名或文件路径的 JSON 对象。

问题是,我认为它永远不会通过File files[],因为 javascript 会打开一个新的 POST 请求,所以它总是会返回不正确的值,因为当您将数据提交到服务器端时它永远不会被填充。

你可以试试这个:创建两条路由,一条上传文件,一条保存文件的元数据,一种方法是你完成所有文件处理,另一种方法是获取 json 返回并关联它然后保存:)

我还在此处针对类似问题发布了一些示例代码: PlayFramework: Ajax + Drag n' Drop + File Upload + File object in controller?

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

【讨论】:

    【解决方案2】:

    文件上传需要强制为“multipart/form-data”,以便在播放框架中处理文件。否则,文件数组将为空。

    像这样调整你的表单:

     #{form @save(id), enctype:'multipart/form-data'}
    

    【讨论】:

      猜你喜欢
      • 2019-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多