下面我将讲述一下我在使用layUI框架中文件上传所遇到的问题:

前端jsp页面:

<div class="layui-form-item">
  <label class="layui-form-label">照片</label>
  <div class="layui-input-block">
    <!-- 上传按钮 -->
    <button type="button" class="layui-btn" id="uploadPic"><i class="layui-icon"></i>选择图片</button>
    <br><br>
    <button type="button" class="layui-btn layui-btn-warm" id="uploadPicBtn">开始上传</button>
    <!-- 隐藏的input,一个隐藏的input(用于保存文件url) -->
    <input type="hidden" id="img_url" name="img" value=""/>
    <!-- 预览区域 -->
    <div class="layui-upload-list">
      <img class="layui-upload-img" width="100px" height="80px" id="preShow"/>
      <p id="demoText"></p>
    </div>
  </div>
</div>
<div class="layui-form-item">
  <label class="layui-form-label">视频</label>
    <div class="layui-input-block">
    <!-- 上传按钮 -->
<!-- <input type="file" name="file2" lay-type="video" class="layui-upload-file"> -->
<button type="button" class="layui-btn" id="uploadVideo"><i class="layui-icon"></i>上传视频</button>
<button type="button" class="layui-btn layui-btn-warm" id="uploadVideoBtn">开始上传</button>
<!-- 隐藏的input,一个隐藏的input(用于保存文件url) -->
<input type="hidden" id="video_url" name="video" value=""/>
  </div>
</div> <script src="${basePath}/x-admin/lib/layui/layui.js" charset="utf-8"></script>
<script type="text/javascript" src="${basePath}/public/js/jquery-3.3.1.min.js"></script>
/* 前端文件上传到java后端控制器 */ 
 <script>
  layui.use('upload', function(){
var upload = layui.upload , $ = layui.jquery;
//上传图片
var uploadInst = upload.render({
elem: '#uploadPic' //绑定元素
,url: '${basePath}/ar/uploadFile' //上传接口 [[@{/upload/img}]]
,auto: false
,bindAction: '#uploadPicBtn'
,before: function(obj){
//预读本地文件示例,不支持ie8
obj.preview(function(index, file, result){
$('#preShow').attr('src', result); //图片链接(base64)
});
}
,done: function(res){
//如果上传失败
if(res.code > ){
alert("上传失败"+res.data.src);
return layer.msg('上传失败');
}
//上传成功
alert("上传成功"+res.data.src);
document.getElementById("img_url").value = res.data.src;
return layer.msg('上传成功');
}
,error: function(){
/*date_default_timezone_set("Asia/Shanghai");
//演示失败状态,并实现重传
var dd=res.responseText.replace(/<\/?.+?>/g,"");
var text=dd.replace(/ /g,"");//去掉所有空格
o.msg("请求上传接口出现异常"+text),
console.log(text);
m(e) */ var demoText = $('#demoText');
demoText.html('<span style="color: #FF5722;">上传失败</span> <a class="layui-btn layui-btn-mini demo-reload">重试</a>');
demoText.find('.demo-reload').on('click', function(){
uploadInst.upload();
});
}
}); //上传视频
var uploadInst =upload.render({
elem: '#uploadVideo'
,url: '${basePath }/ar/uploadFile'
,accept: 'video' //视频
,done: function(res){
console.log(res)
//如果上传失败
if(res.code > ){
alert("上传失败"+res.data.src);
return layer.msg('上传失败');
}
//上传成功
alert("上传成功"+res.data.src);
/* document.getElementById("img_url").value = res.data.src; */
return layer.msg('上传成功');
}
      });
} );

java后台控制端:

@Controller
@RequestMapping(value="/ar")
@MultipartConfig
public class AnalyseRepariController {
@Autowired
private AnalyseRepariService arService;
//图片上传控制器
@RequestMapping(value = "/uploadFile" , method = RequestMethod.POST)
@ResponseBody
public JSONObject uploadPicture(@RequestParam("file")MultipartFile file,HttpServletRequest servletRequest)
throws IOException {
//如果文件内容不为空,则写入上传路径
JSONObject res = new JSONObject();
JSONObject resUrl = new JSONObject();           //或者获取到项目部署的绝对路径
     //String path = servletRequest.getSession().getServletContext().getRealPath("");
     //path = path.replaceAll("xxx", ""); //xxx为项目名称
     //path = path.substring(0, path.length() - 1);
     //path = path + "/webImage/";//为图片文件夹下的图片存放文件夹目录 //上传文件路径
String path = servletRequest.getServletContext().getRealPath("/uploadFile");
System.out.println("文件名称"+file.getOriginalFilename());
//上传文件名
String name = file.getOriginalFilename();//上传文件的真实名称
String suffixName = name.substring(name.lastIndexOf("."));//获取后缀名
String hash = Integer.toHexString(new Random().nextInt());//自定义随机数(字母+数字)作为文件名
String fileName = hash + suffixName;
File filepath = new File(path, fileName);
System.out.println("随机数文件名称"+filepath.getName());
//判断路径是否存在,没有就创建一个
if (!filepath.getParentFile().exists()) {
filepath.getParentFile().mkdirs();
}
//将上传文件保存到一个目标文档中
File tempFile = new File(path + File.separator + fileName);
file.transferTo(tempFile); resUrl.put("src", tempFile.getPath());
res.put("code", 0);
res.put("msg", "");
res.put("data", resUrl);
//str = "{\"code\": 0,\"msg\": \"上传成功\",\"data\": {\"src\":\""+path+fileName + "\"}}";
System.out.println("res里面的值:");
System.out.println(res.toString());
return res;
}
}

报“请求上传接口异常”问题,一般的解决方法:

1、后台返回到前台的json数据一直报数据接口异常

第一,检查自己返回的json数据格式是否正常,该接口返回的相应信息(response)必须是一个标准的 JSON 格式,如:返回的数据格式是否是

{
"code":
,"msg": ""
,"data": {
"src": "http://cdn.layui.com/123.jpg"
}
}

返回的数据格式是这样的,但是还是报数据接口异常的话
第二,msg的值一定要写"",不然会一直报错,自己设定的code值一定要写0,其他的值都是错误的。
2、json数据包是否配置好,我就是这样才导致一直报错

在 SpringController.java中需要如下代码:并在构建路径中引入 这两个jar包,才能支持json格式的生成。

jackson-core-asl-1.9.11.jar

jackson-mapper-asl-1.9.11.jar
先下载这两个jar包,并加到项目的WebContent\WEB-INF\lib目录下,然后在编辑器目录中右击选择Web App Libraries中的Configure Build Path...引入项目中放入的两个jar包。

在springmvc.xml中需要配置如下信息:

    <!-- 注解映射器 -->
<!-- 一定要配置这个,否则layui框架中文件上传会报请求上传接口异常,JACKSON包,让Spring MVC支持JSON视图的解析以及返回JSON数据进行呈现 -->
<!--引入json支持,josn转换器配置 -->
<bean
class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<!-- json转换器 -->
<property name="messageConverters">
<list>
<bean
class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
</bean>
</list>
</property>
</bean>

然后再浏览器中访问就可以得到json格式的数据了。

其实,经过测试发现,有的 spring版本不在springmvc.xml中进行josn转换器配置也可以转换成json格式,springmvc有自动转换功能,可惜我的没有。

controller代码: 我用的是@ResponseBody注解实现的

@Controller
@RequestMapping(value="/ar")
@MultipartConfig
public class AnalyseRepariController {
@Autowired
private AnalyseRepariService arService;
//图片上传控制器
@RequestMapping(value = "/uploadFile" , method = RequestMethod.POST)
@ResponseBody
public JSONObject uploadPicture(@RequestParam("file")MultipartFile file,HttpServletRequest servletRequest)
throws IOException {
//如果文件内容不为空,则写入上传路径
JSONObject res = new JSONObject();
JSONObject resUrl = new JSONObject();           //或者获取到项目部署的绝对路径
     //String path = servletRequest.getSession().getServletContext().getRealPath("");
     //path = path.replaceAll("xxx", ""); //xxx为项目名称
     //path = path.substring(0, path.length() - 1);
     //path = path + "/webImage/";//为图片文件夹下的图片存放文件夹目录 //上传文件路径
String path = servletRequest.getServletContext().getRealPath("/uploadFile");
System.out.println("文件名称"+file.getOriginalFilename());
//上传文件名
String name = file.getOriginalFilename();//上传文件的真实名称
String suffixName = name.substring(name.lastIndexOf("."));//获取后缀名
String hash = Integer.toHexString(new Random().nextInt());//自定义随机数(字母+数字)作为文件名
String fileName = hash + suffixName;
File filepath = new File(path, fileName);
System.out.println("随机数文件名称"+filepath.getName());
//判断路径是否存在,没有就创建一个
if (!filepath.getParentFile().exists()) {
filepath.getParentFile().mkdirs();
}
//将上传文件保存到一个目标文档中
File tempFile = new File(path + File.separator + fileName);
file.transferTo(tempFile); resUrl.put("src", tempFile.getPath());
res.put("code", 0);
res.put("msg", "");
res.put("data", resUrl);
//str = "{\"code\": 0,\"msg\": \"上传成功\",\"data\": {\"src\":\""+path+fileName + "\"}}";
System.out.println("res里面的值:");
System.out.println(res.toString());
return res;
}
}

效果图:

注:未经许可,不得转载。

layUI框架中文件上传前后端交互及遇到的相关问题的更多相关文章

  1. 巧用 Jersey RESTful WebService框架解决文件上传乱码

    一.当我们使用jersey框架封装的restful进行文件上传时,会出现中文乱码,试用了过滤器设置编码都不管用.仔细想了很久解决办法,就用一个servelt来代替这个上传的restful接口实现上传的 ...

  2. node.js使用express框架进行文件上传

    关于node.js使用express框架进行文件上传,主要来自于最近对Settings-Sync插件做的研究.目前的研究算是取得的比较好的进展.Settings-Sync中通过快捷键上传文件,其实主要 ...

  3. 【技术博客】 关于laravel5.1中文件上传测试的若干尝试

    关于laravel5.1中文件上传测试的若干尝试 作者:ZGJ 版本:v1.0 PM注:本人这两天也正在尝试解决这一问题,如有进展将及时更新这一博客 在我们的软工第二阶段中,我开始着手进行后端控制器的 ...

  4. jersey框架实现文件上传

    jersey框架是一个开源的RESTful的框架,实现了实现了JAX-RS规范,进一步地简化 RESTful service 和 client 开发.当然而且是必须的,jersey对文件的上传和下载也 ...

  5. SpringMVC框架06——文件上传与下载

    1.文件上传 Spring MVC框架的文件上传是基于commons-fileupload组件的文件上传,只不过Spring MVC框架在原有文件上传组件上做了进一步封装,简化了文件上传的代码实现. ...

  6. 笨鸟先飞之Java(一)--使用struts2框架实现文件上传

    无论是.net还是Java,我们最常接触到的就是文件的上传和下载功能,在Java里要实现这两个经常使用功能会有非常多种解决方案,可是struts2的框架却能给我们一个比較简单的方式,以下就一起来看吧: ...

  7. element中文件上传

    vue+element 文件操作 作者:一粒尘土 时间:2019-3-17 注:以下操作针对 vue-cli 目录 使用 组件常用参数 组件常用方法 上传文件 上传文件格式限制 回显文件 下载文件 删 ...

  8. 【转】NodeJS教程--基于ExpressJS框架的文件上传

    本文是翻译的一篇文章,原文地址:Handle File Uploads in Express (Node.js). 在NodeJS发展早期上传文件是一个较难操作的功能,随后出现了formidable. ...

  9. jsp\struts1.2\struts2 中文件上传(转)

    jsp\struts1.2\struts2 中文件上传 a.在jsp中简单利用Commons-fileupload组件实现 b.在struts1.2中实现c.在sturts2中实现现在把Code与大家 ...

随机推荐

  1. Map集合中,关于取值和遍历的相关操作

    这是自己的关于map集合的相关操作的小研究,分享给大家. 主要代码内容包含以下: 1,map集合的遍历 2,根据key值获取value值 3,根据value值获取key值 4,返回最大value值对应 ...

  2. 【SQL】面面俱到 | 在SQL中使用CUBE和ROLLUP实现数据多维汇总

    偶然在网上看到一篇文章,讲到数据汇总,提到了CUBE,感觉有些晦涩,想试着自己表述一下.同时,个人也认为CUBE还是很有用的,对SQL或数据分析感兴趣的小伙伴不妨了解一下,或许有用呢! 先设定个需求, ...

  3. 初探机器学习之使用讯飞TTS服务实现在线语音合成

    最近在调研使用各个云平台提供的AI服务,有个语音合成的需求因此就使用了一下科大讯飞的TTS服务,也用.NET Core写了一个小示例,下面就是这个小示例及其相关背景知识的介绍. 一.什么是语音合成(T ...

  4. ES6语法的学习与实践

    ES6是JavaScript语言的新一代标准,是ECMAScript的第六个版本,加入了很多新的功能和语法,在很多框架,如在使用Vue,React等框架的项目中一般都采用ES6语法来编写的,下面对经常 ...

  5. Java进阶篇 设计模式之十四 ----- 总结篇

    前言 本篇是讲述之前学习设计模式的一个总结篇,其目的是为了对这些设计模式的进行一个提炼总结,能够通过查看看此篇就可以理解一些设计模式的核心思想. 设计模式简介 什么是设计模式 设计模式是一套被反复使用 ...

  6. Windows中使用Mysql-Proxy实现Mysql读写分离

    1.简介 读写分离:当业务量上来时,往往一台单机的mysql数据库不能满足性能需求,这时候就需要配置主从库读写分离来解决性能瓶颈.简单的来说,就是原先一台数据库既读又写,现在改成一台写和1台以上读. ...

  7. Netty源码—七、内存释放

    Netty本身在内存分配上支持堆内存和直接内存,我们一般选用直接内存,这也是默认的配置.所以要理解Netty内存的释放我们得先看下直接内存的释放. Java直接内存释放 我们先来看下直接内存是怎么使用 ...

  8. 使用Springboot + Gradle快速整合Mybatis-Plus

    使用Springboot + Gradle快速整合Mybatis-Plus 作者:Stanley 罗昊 [转载请注明出处和署名,谢谢!] MyBatis-Plus(简称 MP)是一个 MyBatis ...

  9. 看懂 ,学会 .NET 事件的正确姿势-简单版

    发现之前写了一篇关于事件的阐述写的过于抽象.现在想想先理解本质由简入难比较合适  之前的一篇博客地址:https://www.cnblogs.com/LiMin/p/7212217.html 参照网上 ...

  10. ASP.NET三层架构项目创建流程

    1.进入VS2010,新建项目—>Visual C#—>Web—>ASP.NET空Web应用程序,如图所示: 2.在解决方案处右击—>新建项目—>Windows—> ...