表单 – 如何使用play2中的其他输入获取上传文件?

在html中,带有多部分数据的表单:

<form action="@routes.Files.upload" method="post" enctype="multipart/form-data">
    <input type="hidden" name="groupId" value="1" />
    <input type="hidden" name="tagId" value="2" />
    <input type="file" name="file"/>
    <input type="submit" value="upload it"/>
</form>

如何写动作文件上传?

我知道如何获取上传的文件:

request.body.file("file") map {
    filepart => filepart.ref.moveTo(newFile);
}

以及如何提交投入:

Form(tuple("groupId" -> text, "tagId" -> text)).bindFromRequest.fold(
    errors => ...,
    params => ....
)

但如何将它们结合在一起?

我找不到一个合适的文件类型可以在Form(tuple(…))中使用,也不能在request.body中获取输入值。

这个答案是针对Java,但是你应该能够很容易地适应Scala。

您需要做的是为文件中的所有字段定义一个模型,除了该文件。然后正常使用file-upload API来检索文件。

例如,这就是我所做的:

表单(在upload.scala.html中):

@form(action = routes.UploadResourceController.doUpload(), 'enctype -> "multipart/form-data") {

    @inputText(uploadForm("lang"))
    @inputText(uploadForm("country"))
    @inputFile(uploadForm("resourceFile"))

    <p>
        <input type="submit">
    </p>
}

模型(models / UploadResource.java):

public class UploadResource {
    @Required
    public String lang;

    @Required
    public String country;

    /* notice a field for the file is missing */
}

Controller(controllers / UploadResourceController.java):

public static Result doUpload() {
    Form<UploadResource> filledForm = uploadForm.bindFromRequest();

    if (filledForm.hasErrors()) {
        return badRequest(views.html.upload.render(filledForm));
    } else {
        UploadResource resource = filledForm.get();
        MultipartFormData body = request().body().asMultipartFormData();
        FilePart resourceFile = body.getFile("resourceFile");

        /* Check resourceFile for null, then extract the File object and process it */
     }
}

我希望这有帮助。

http://stackoverflow.com/questions/9452375/how-to-get-the-upload-file-with-other-inputs-in-play2

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:表单 – 如何使用play2中的其他输入获取上传文件?