下面我将讲述一下我在使用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 > 0){ 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 > 0){ 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) @ResponseBodypublic JSONObject uploadPicture(@RequestParam("file")MultipartFile file,HttpServletRequest servletRequest) throws IOException { //如果文件内容不为空,则写入上传路径 //String str = "";JSONObject res = new JSONObject();JSONObject resUrl = new JSONObject();//上传文件路径 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": 0,"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转换器配置  --><beanclass="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"><!-- json转换器 --><property name="messageConverters"><list><beanclass="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">                </bean></list></property></bean>

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

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

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

//文件上传控制器
@RequestMapping(value = "/uploadFile" , method = RequestMethod.POST)
@ResponseBody
public JSONObject uploadPicture(@RequestParam("file")MultipartFile file,HttpServletRequest servletRequest) throws IOException { //如果文件内容不为空,则写入上传路径 //String str = "";JSONObject res = new JSONObject();JSONObject resUrl = new JSONObject();//上传文件路径 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;} 

效果图:

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

转载于:https://www.cnblogs.com/qiantao/p/10056459.html

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

  1. Ajax 文件上传(前后端完整代码,注意修改文件保存路径\访问路径)

    一.前端代码: ① html 代码: 注意:如需要选择多个文件,进行上传,Ⅰ.multiple="multiple" 不能省 Ⅱ.选择时是 Ctrl + 你所要选择的文件,不要分多 ...

  2. 微信小程序文件上传 前后端

    搭建小程序端 用vant组件 <van-uploader file-list="{{ fileList }}" bind:after-read="afterRead ...

  3. layui表单加文件 php_layui框架实现文件上传及TP3.2.3(thinkPHP)对上传文件进行后台处理操作示例...

    本文实例讲述了layui框架实现文件上传及TP3.2.3对上传文件进行后台处理操作.分享给大家供大家参考,具体如下: layui框架是1.0.9版本.. 首先html页面代码如下: js代码如下: l ...

  4. layui实现文件压缩上传_基于SSM框架、Layui的多文件上传、包括图片,压缩包,音频等文件(与数据库挂钩) - 爱秧博客...

    写在前面:当初为了实现一个多文件上传可是费了一番功夫,经过我日日夜夜的百度咨询,写了好几种方法,最终还是没能解决问题.我可以很负责任的告诉你,你去百度上不管你形容有多好,只要是涉及多文件,就会查到Mu ...

  5. Layui框架实现图片上传

    Layui框架实现图片上传 前言: 一直以来,图片上传总是件很麻烦的事.最近在学layui,发现layui真是极大简化了各种复杂的操作,避免了繁琐的开发. layui图片上传和传统的图片上传不同,它并 ...

  6. SpringMVC +layui 实现多文件上传,附加进度条

    首先在进行文件上传操作的时候,你得对layui 中文件上传的一些参数先了解一下,不要网上复制粘贴,起码你要对layui 文件上传的必备参数做一些大致掌握,也是自己学习. (1) 首先你得引入layui ...

  7. 文件上传——选择文件之后自动上传||文件上传的后端代码

    选择文件之后自动上传 //普通图片上传var uploadInst = upload.render({elem: '#test1', url: 'file/upload.action', accept ...

  8. jquery.form.js java_使用jQuery.form.js/springmvc框架实现文件上传功能

    使用的技术有jquery.form.js框架, 以及springmvc框架.主要实现异步文件上传的同时封装对象,以及一些注意事项. 功能本身是很简单的,但是涉及到一些传递参数类型的问题.例如:jque ...

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

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

最新文章

  1. WinJS实用开发技巧(4):Appbar中使用自定义图片
  2. 20071103网工考试
  3. React的列表渲染
  4. SQLite剖析之异步IO模式、共享缓存模式和解锁通知
  5. OSChina 周日乱弹 —— 七哥的北漂日记
  6. unzip直接覆盖解压
  7. python aiohttp百万并发
  8. 洛谷OJ P3368 【模板】树状数组 2
  9. 自定义mybatis的拦截器+Memcached+treeNMS
  10. 易语言解析html实例,易语言解析JSON教程
  11. 以观察者设计模式举例的房产信息系统
  12. 吹塑模具和注塑模具的区别
  13. Docker搭建内部知识库(Wiki)
  14. 宽带光纤接入网的概念和典型应用类型
  15. python中整数类型取值范围有没有限制_python 数据库取值范围内
  16. 模型小常识,C4D扫描的使用
  17. Android仿微信添加联系人列表,内附有截图和demo源码
  18. 2020东南大学网络空间安全保研夏令营(预推免)经验
  19. 数据模拟:利用Java模拟数据(姓名,邮箱,地址,电话等信息,时间,工资,1-10随机数)并存入mysql
  20. 【资源】谷歌logo的配色的RGB值

热门文章

  1. SpringCloud(若依微服务版)读取Nacos中的配置以及多个服务共享Nacos配置的使用
  2. 信息系统项目管理师-组织级、流程管理核心知识点思维脑图
  3. C#中使用键值对存取值并使用Linq通过key获取value
  4. SpringCloud -创建统一的依赖管理
  5. SqlServer2014怎样还原数据库
  6. C#中计时器Stopwatch的使用
  7. C#中将字符串内容换行写入到txt文件中
  8. Python实现将图片转字符画
  9. 数据库中的乐观锁与悲观锁详解
  10. [论文翻译]Pedestrian Alignment Network for Large-scale Person Re-Identification