代码之家  ›  专栏  ›  技术社区  ›  sinuhepop

在http请求之间保留文件

  •  4
  • sinuhepop  · 技术社区  · 14 年前

    <form action="upload" enctype="multipart/form-data">
        <input type="text" name="name"/>
        <input type="file" name="file"/>
        <input type="submit"/>
    </form>
    

    仔细想想,我找到了几个可能的解决方案:

    • 以ajax请求的形式提交表单,只有在验证正确的情况下才转到下一页。问题是,我必须实现一些东西,将每个验证错误放在适当的位置,而不是使用MVC的特性(在我的例子中是springmvc表单标记)。

    • 提交表格。如果有错误,发送一个javascript中带有“history.back()”的页面。我的文件将再次出现,但我没有简单的方法来显示验证消息。

    我认为这两种方法都非常笨拙。但是每次出现验证错误时选择文件也不是一个好的解决方案。

    谢谢。

    我用的是springmvc3

    3 回复  |  直到 14 年前
        1
  •  4
  •   BalusC    14 年前

    确实,文件字段将丢失,因为没有方法 预填充 这个 input type="file"

    <form name="upload" action="upload" method="post" enctype="multipart/form-data">
        <input type="file" value="c:/passwords.txt"><input type="submit">
    </form>
    <script>document.upload.submit()</script>
    

    你唯一的办法就是在 以使具有原始表单的页面保持打开状态。换句话说:Ajax。例如,有几个JavaScript库可用于此任务 jQuery Form plugin

    $('#formId').ajaxForm();
    

    (是的,它也可以用于文件上传,然后这个插件透明地转到“iframe模式”)

    但是由于您使用的是springmvc,它不支持开箱即用的轴向请求,因此您必须创建一个自定义的 ViewResolver 在服务器端,让它无缝地与一个轴向的东西。你可以找到 here

        2
  •  2
  •   Pekka    14 年前

    使用AJAX是行不通的,因为它不能处理文件上传。

    form 进入(不可见的?)IFRAME:

    <form target="iframe_name_here" ........
    
    <iframe id="iframe_name_here"></iframe>
    

    认为 如果上传出错,它甚至可以将选定的文件保存在适当的位置。

        3
  •  0
  •   Marcus Adams    14 年前