ExtJs上传中文文件名乱码,观察请求。

ExtJs6上传乱码从后台无法解决,因为文件名请求里面就已经乱码了,后台无法解码。

除非请求参数正确没有乱码,后台因为编码设置不一样,可以通过后台处理乱码

这里的思路使用ExtJs的Form隐藏域。

前端使用Base64加密,后台用Base64解密。

这里加密的时间很巧妙,发送请求前文件名并未乱码,把这个取出来用Base64加密(乱码的加密成Base64是徒劳的)

放入空的form里面,带给后台

/**
* @author cjy
* @Date 2018/6/5 9:47.
*/
Ext.define('Admin.view.eduQuestion.ExcelImportForm', {
extend: 'Ext.window.Window',
xtype: 'excelImportForm', title: '导入表格', requires: [
'Admin.view.eduQuestion.ExcelImportFormController',
'Ext.form.Panel',
'Ext.form.field.ComboBox',
'Ext.form.field.Text',
'Ext.form.field.TextArea',
'Ext.layout.container.Fit'
], layout: 'fit', modal: true,
height: 200,
width: 370, controller: 'excelImportForm', items: [{
flex: 1,
xtype: 'form',
reference: 'form',
modelValidation: true,
defaults: {
labelAlign: 'left',
margin: 10,
msgTarget: 'side'
},
items: [{
xtype: 'textfield',
hidden:true,
name:'fileName',
id:'fileName'
},{
xtype: 'filefield',
name: 'excelPath',
id:'excelPath',
fieldLabel: '表格',
labelWidth: 50,
msgTarget: 'side',
anchor: '100%',
accept: 'xls/xlsx',
buttonText: '选择Excel表格...',
validator: function (value) {
if(value==''){
return true;
}
var arr = value.split('.');
if (arr[arr.length - 1] == 'xls' || arr[arr.length - 1] == 'xlsx') {
return true;
} else {
return '必须选择xls或者xlsc格式的Excel!';
}
}
}]
}],
buttons: [{
text: '确定',
handler: 'editExcel'
}, {
text: '取消',
handler: 'closeWindow'
}]
});

在Controller.js里面对form进行操作,关键代码已标红

/**
* @author cjy
* @Date 2018/6/5 9:47.
*/
Ext.define('Admin.view.eduQuestion.ExcelImportFormController', {
extend: 'Admin.view.BaseViewController', alias: 'controller.excelImportForm', /**Excel上传
* @param {Ext.button.Button} component
* @param {Event} e
*/
editExcel: function () {
var me = this,
window = me.getView(),
form = window.down('form');
if (!form.isValid()) {
return false;
} var ff = Ext.getCmp('excelPath')
var ffv = ff.getValue('filename')
var index = ffv.lastIndexOf('\\')
var ffv = Ext.util.Base64.encode(ffv.substring(index+1,ffv.length))
Ext.getCmp('fileName').setValue(ffv);
if (window.action === 'uploadExcel') {
successMsg = '上传成功';
submitUrl=Common.Config.requestPath('EduQuestion', 'importExcelForEduQuestion');
} else {
Ext.Msg.alert('温馨提示', '表单操作错误,请联系管理员');
return;
}
form.submit({
//method : 'get',默认是post,指定没用
url: submitUrl,
waitMsg: '正在上传Excel并导入,请稍等...',
success: function(fp, o) {
Common.util.Util.toast(successMsg);
me.getView().close();
},
failure: function(form, action) {
Common.util.Util.toast(successMsg);
me.getView().close();
}
});
}, /**关闭 userWindow
* @param {Ext.button.Button} component
* @param {Event} e
*/
closeWindow: function () {
this.getView().close();
} });

后台接收,本来只用MultipartFile就可以接收到文件名和文件内容,现在需要两个参数,一个接收文件名,另一个接收文件内容

@RequestMapping(value = "/importExcelForEduQuestion")
@ResponseBody
//@RequiresPermissions("eduQuestionBank:importExcelForEduQuestion")
public Map<String,Object> importExcelForEduQuestion(@RequestParam("excelPath") MultipartFile file,@RequestParam("fileName") String fileName) throws IOException {
//如果文件不为空,写入上传路径
if(!file.isEmpty()) {
//上传文件路径
//上传文件名
BASE64Decoder decoder = new BASE64Decoder();
String filename = new String(decoder.decodeBuffer(fileName),"UTF-8");
FileToolUtil.ifCreateNewFile(UPLOADED_FILE_PATH,filename);
//将上传文件保存到一个目标文件当中
try {
file.transferTo(new File(UPLOADED_FILE_PATH + File.separator + filename));
} catch (IOException e) {
e.printStackTrace();
return ResultUtil.createFailResult("上传失败");
}
return ResultUtil.createSuccessResult();
} else {
return ResultUtil.createFailResult("上传文件为空");
}
}

补充文件FoolUtil里的方法

public static File createNewFile(String pathFileName) throws IOException {
File outFile = new File(pathFileName);
File parentFile = outFile.getParentFile();
if (!parentFile.exists()){
parentFile.mkdirs();//不存在则创建父目录
}
if(!outFile.exists()) {
outFile.createNewFile();
}
return outFile;
}

完美解决ExtJs6上传中文文件名乱码,后端SpringMVC的更多相关文章

  1. PHP 中move_uploaded_file 上传中文文件名失败

    项目需要上传文件名保持不变,发现上传中文失败:错误如下: move_uploaded_file(public/upload/files//-/\开密二次开发.rar): failed to open ...

  2. 通过freemarker生成一个word,解决生成的word用wps打开有问题的问题,解决出word时中文文件名乱码问题,解决打开出word时打开的word出现问题的问题,出图片,解决动态列表

     通过freemarker制作word比较简单 步骤:制作word模板.制作方式是:将模板word保存成为xml----在xml的word模板中添加相应的标记----将xml的word文件的后缀名 ...

  3. Flask下如何处理Requests 上传中文文件名的问题

    一.问题的由来     最近有个项目,叫做文档服务资源中心,类似于七牛,为各个业务系统提供统一的文件资源服务,包括文件的存储.操作管理.下载.预览等.在做文件存储的时候,遇到了这个当指定上传的文件名为 ...

  4. php 解决上传中文文件名时出现乱码的问题

    有时候上传文件是中文的文件名会出现乱码, 可以在移动文件时使用icov('utf-8','gb2312',filename)转换 代码: <?php //header('Content-type ...

  5. 解决windows下nginx中文文件名乱码

    我的根目录文件夹放在d盘work文件夹下,一般这样配置 nginx\conf\nginx.conf location / { root D:/work; index index_bak.html; a ...

  6. 解决 linux 下面解压缩 中文文件名乱码问题的方法 unzip -O CP936

    Linux 解压缩 zip包中文目录出现乱码的问题. 出现问题如图示: unzip -O CP936 xxx.zip 用这种方式处理一下就好了.

  7. ASP.Net上传中文文件乱码

    只要在Head中添加即可解决:<meta http-equiv='Content-Type' content='text/html; charset=utf-8' />

  8. Servlet 起航 文件上传 中文文件名下载

    @WebServlet(name = "ticketServlet",urlPatterns = {"/tickets"},loadOnStartup = 1) ...

  9. php上传中文文件文件名乱码问题

    php上传文件是最最基础的一个技术点,但是深入进去也有不少问题需要解决,这不,上传中文文件后,文件名变成了乱码. 下面是问题代码,很简单: 1.问题代码 html部分: <html> &l ...

随机推荐

  1. docker+selenium Grid搭建自动化分布式测试环境

    自动化测试需要考虑到兼容性的时候,之前的做法是每个执行机上安装不同版本的浏览器,实际上这样做会很浪费硬件资源,现在有了docker容器化技术,让一切变得简单. 工具清单: 语言:python 2.7 ...

  2. Android 开发怎样做代码加密或混淆?

    欢迎访问网易云社区,了解更多网易技术产品运营经验. 在大公司怎么做android代码混淆的?发现他们的软件用apktool反编译居然没看到classes.dex文件和当前安卓APP加固到底该如何做到防 ...

  3. kvm虚拟机动态迁移

    相比KVM虚拟机静态迁移中需要拷贝虚拟机虚拟磁盘文件,kvm虚拟机动态迁移无需拷贝虚拟磁盘文件,但是需要迁移到的虚拟主机之间需要有相同的目录结构虚拟机磁盘文件,本文这部分内容通过nfs来实现,当然也可 ...

  4. P3950 部落冲突

    题目背景 在一个叫做Travian的世界里,生活着各个大大小小的部落.其中最为强大的是罗马.高卢和日耳曼.他们之间为了争夺资源和土地,进行了无数次的战斗.期间诞生了众多家喻户晓的英雄人物,也留下了许多 ...

  5. 二,PHP缓存机制详解

    一,PHP缓存机制详解 我们可以使用PHP自带的缓存机制来完成页面静态化,但是仅靠PHP自身的缓存机制并不能完美的解决页面静态化,往往需要和其他静态化技术(通常是伪静态技术)结合使用. output ...

  6. php从文本读入数据,处理结果再导入到文本

    1,php从文本逐行读入数据,保存到数据组.使用fopen读取文本内容,逐行读取文本是$majorId = trim(fgets($rfile, 4096));. $rfile = fopen(&qu ...

  7. python 导入模块与使用

    学习python之前一定要了解导入模块是怎么导入的,至少在看代码时不知道能很快的了解别人写的东西是哪里来. Python默认仅安装部分基础或核心模块,启动时也仅加载了基础模块,在需要是再显式的加载其他 ...

  8. 最短路 CF954D Fight Against Traffic

    CF954D Fight Against Traffic 题意描述: 给你一张无向图,一共有n个点(2 <= n <= 1000),由m条边连接起来(1 <= m <= 100 ...

  9. hive join的三种优化方式

    原网址:https://blog.csdn.net/liyaohhh/article/details/50697519 hive在实际的应用过程中,大部份分情况都会涉及到不同的表格的连接, 例如在进行 ...

  10. [转] iOS 在UILabel显示不同的字体和颜色

    在项目开发中,我们经常会遇到在这样一种情形:在一个UILabel 使用不同的颜色或不同的字体来体现字符串,在iOS 6 以后我们可以很轻松的实现这一点,官方的API 为我们提供了UILabel类的at ...