解决plupload-2.1.2,springmvc上传中文文件名乱码问题

方法1、在web.xml文件中加入配置:

<filter>
    <filter-name>CharacterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>utf-8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>CharacterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>


方法2、在springmvc配置文件中的上传文件配置

 <bean id="multipartResolver"  
  class="org.springframework.web.multipart.commons.CommonsMultipartResolver">  
    <property name="maxUploadSize" value="10485760"/>
    <property name="defaultEncoding" value="UTF-8"></property>
</bean>


加入<property name="defaultEncoding" value="UTF-8"></property>即可。

下面解读下为什么这样配置就可以解决乱码问题了,

看下CommonsMultipartResolver,CommonsFileUploadSupport类中关于编码的方法:

protected String determineEncoding(HttpServletRequest request) {
		String encoding = request.getCharacterEncoding();
		if (encoding == null) {
			encoding = getDefaultEncoding();
		}
		return encoding;
	}


 

protected String getDefaultEncoding() {
		String encoding = getFileUpload().getHeaderEncoding();
		if (encoding == null) {
			encoding = "ISO-8859-1";
		}
		return encoding;
	}
public void setDefaultEncoding(String defaultEncoding) {
  this.fileUpload.setHeaderEncoding(defaultEncoding);
 }
protected CommonsFileUploadSupport.MultipartParsingResult parseRequest(
			HttpServletRequest request) throws MultipartException {
		String encoding = determineEncoding(request);
		FileUpload fileUpload = prepareFileUpload(encoding);
		try {
			List fileItems = ((ServletFileUpload) fileUpload)
					.parseRequest(request);
			return parseFileItems(fileItems, encoding);
		} catch (FileUploadBase.SizeLimitExceededException ex) {
			throw new MaxUploadSizeExceededException(fileUpload.getSizeMax(),
					ex);
		} catch (FileUploadException ex) {
			throw new MultipartException(
					"Could not parse multipart servlet request", ex);
		}
	}


通过以上代码可以看到,如果通过
String encoding = request.getCharacterEncoding();获取的编码为null,并且配置文件中的defaultEncoding属性没有配置的话,程序就会使用

“ISO-8859-1”对上传的文件进行处理,所以会出现中文乱码的情况。

在看下CharacterEncodingFilter这个类对编码的处理:

protected void doFilterInternal(HttpServletRequest request,
			HttpServletResponse response, FilterChain filterChain)
			throws ServletException, IOException {
		if ((this.encoding != null)
				&& (((this.forceEncoding) || (request.getCharacterEncoding() == null)))) {
			request.setCharacterEncoding(this.encoding);
			if (this.forceEncoding) {
				response.setCharacterEncoding(this.encoding);
			}
		}
		filterChain.doFilter(request, response);
	}


可以看到这个类就是对request和response进行编码设置。。

建议:程序中统一使用一种编码格式,这样可以有效的解决乱码问题带来的困扰

FastAdmin是一个基于ThinkPHP5框架的后台管理系统模板,它集成了很多实用的功能模块,包括文件上传Plupload-preview是FastAdmin中用于预览上传文件的一个插件。当你在后台编辑页面上添加了文件上传字段,并启用Plupload-preview,用户可以选择文件后,图片或文件会在前端实时预览显示。 具体操作步骤如下: 1. 首先,在`form.blade.php`或相关的表单编辑页面中,引入Plupload的相关配置,并创建一个允许预览的上传控件。 ```html <form ...> <div class="layui-form-item"> <label class="layui-form-label">文件上传</label> <div class="layui-input-block"> <button id="plupload" title="点击选择文件"></button> <span class="plupload-preview"></span> </div> </div> </form> ``` 2. 引入Plupload的JavaScript库,并初始化上传组件: ```javascript <script> $(function(){ layui.use(['layer', 'plupload'], function(){ var layer = layui.layer; var plupload = layui.plupload; // 初始化上传配置 var uploader = new plupload.Uploader({ runtimes: 'html5,flash', browse_button: 'plupload', // 选择文件的按钮id url: '__ACTION__/upload', // 文件上传服务器接口 preview_id: 'plupload-preview', // 预览区域的id filter: { mime_types : [ {title : "Image files", extensions : "jpg,jpeg,gif,png"}, {title : "Zip files", extensions : "zip"} ] }, // 其他更多配置项... }); uploader.init(); }); }); </script> ``` 3. 后端需要处理文件上传请求,返回文件路径或者URL给前端,以便于预览显示。 当用户修改并保存文件后,预览功能会根据新上传的内容更新显示。如果你遇到问题,可以检查一下前端和后端的连接、权限设置以及文件格式兼容性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值