与
${param.key}
类似,有没有一种方法可以在不使用Java的情况下使用EL解释多部分/表单数据加密表单?
如果不可能,是否有解决方法可以在不使用多部分/表单数据加密的情况下将文件输入包含在表单中?
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);
}
}
如果需要上传,可以通过AJAX 来完成。
如果您使用注释@MultipartConfig,您可能需要添加文件大小,例如:
@MultipartConfig(maxFileSize=16177215)