问题现象:
在Servlet 上用 Apache 的commons-fileupload组件上传文件时,文件可以正确传输,
但Form中的普通文本字段保存到数据库中却显示为乱码(排除了数据库编码的问题)。
原因:
用jsp上传文件时,浏览器采用了另一种编码方式,即 "multipart/form-data", 与普通form不同。
这时表单中的普通文本字段可能没有按encoding进行编码(个人猜测)。
解决方法:
在servlet 中取得普通文本字段的值时指定Encoding:
// 取得Form中的所有字段
List<FileItem> list = (List<FileItem>) upload.parseRequest(request);
for (FileItem fieldItem : list) {
if(fieldItem.isFormField()){
// 普通文本字段
String fieldName = fieldItem.getFieldName();
String fieldValue = fieldItem.getString("UTF-8")
}
else {
// 文件字段
fieldItem.write(new File("filePath", "fileName"));
}
}