如何仅使用 EL 解析多部分表单数据

问题描述 投票:0回答:2

${param.key}
类似,有没有一种方法可以在不使用Java的情况下使用EL解释多部分/表单数据加密表单?

如果不可能,是否有解决方法可以在不使用多部分/表单数据加密的情况下将文件输入包含在表单中?

jsp el multipartform-data
2个回答
1
投票

multipart/form-data
用于上传文件。这可能很大,上传可能需要一段时间。为了不阻止其他传入请求,处理可以是异步的。

使用 Java:

@MultipartConfig:

对于接收 multipart/form-data 的 servlet,您必须在 servlet 前面添加

@MultipartConfig
注释,以便通过调用
request.getParameter("notFileFieldName");
获取纯文本参数的值。否则调用将返回 null。

但是对于文件及其内容,它并不能以这种方式工作。
文件名、内容类型、大小和内容可以从

 返回的 
Part
对象中检索
request.getPart("theFileFieldName");

对于 JSP,您可以在 web.xml 中添加以下代码片段:

<servlet>
    <servlet-name>UploadFile</servlet-name>
    <jsp-file>/path/form.jsp</jsp-file>
    <multipart-config></multipart-config>
</servlet>
<servlet-mapping>
    <servlet-name>UploadFile</servlet-name>
    <url-pattern>/path/form.jsp</url-pattern>
</servlet-mapping>

<multipart-config></multipart-config>
激活 JSP 的上述行为。
因此
${param.notFileFieldName}
将被评估为其值。
但不是
${param.theFileFieldName}

AsyncContext可用于处理上传

但是你不会有java解决方案。

使用 Javascript:FileReader()

如何在客户端读取文件的基本示例。 (无需上传) 来源:https://developer.mozilla.org/de/docs/Web/API/FileReader/readAsDataURL

HTML

<input type="file" onchange="previewFile()"><br>
<img src="" height="200" alt="Image preview...">

JavaScript:

function previewFile() {
  var preview = document.querySelector('img');
  var file    = document.querySelector('input[type=file]').files[0];
  var reader  = new FileReader();

  reader.addEventListener("load", function () {
    preview.src = reader.result;
  }, false);

  if (file) {
    reader.readAsDataURL(file);
  }
}

在jsfiddle上尝试一下

如果需要上传,可以通过AJAX 来完成。


0
投票

如果您使用注释@MultipartConfig,您可能需要添加文件大小,例如:

@MultipartConfig(maxFileSize=16177215)
© www.soinside.com 2019 - 2024. All rights reserved.