@RestController public class FileUploadController { @RequestMapping(value = "fileUpload",method = RequestMethod.POST) public String fileUpload(@RequestParam("file") MultipartFile file) throws IOException, MyException { if(file!=null){ System.out.println("multipartFile = " + file.getName()+"|"+file.getSize()); } String configFile = this.getClass().getResource("/tracker.conf").getFile(); ClientGlobal.init(configFile); TrackerClient trackerClient=new TrackerClient(); TrackerServer trackerServer=trackerClient.getConnection(); StorageClient storageClient=new StorageClient(trackerServer,null); String filename= file.getOriginalFilename(); String extName = StringUtils.substringAfterLast(filename, "."); String[] upload_file = storageClient.upload_file(file.getBytes(), extName, null); String fileUrl=""; for (int i = 0; i < upload_file.length; i++) { String path = upload_file[i]; fileUrl+="/"+path; } return "http://file.service.com"+fileUrl; }
需要在resource目录下建立tracker.conf文件
tracker_server=192.168.220.129:22122 # 连接超时时间,针对socket套接字函数connect,默认为30秒 connect_timeout=30000 # 网络通讯超时时间,默认是60秒 network_timeout=60000
<!DOCTYPE html> <html lang="UTF-8"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="description" content=""> <meta name="author" content=""> <link rel="stylesheet" href="bootstrap/css/bootstrap.min.css"> <link rel="stylesheet" href="css/font-awesome.min.css"> <link rel="stylesheet" href="css/main.css"> <link rel="stylesheet" href="css/doc.min.css"> <link rel="stylesheet" href="webuploader/webuploader.css"> <style> .tree li { list-style-type: none; cursor:pointer; } </style> </head> <body> <nav class="navbar navbar-inverse navbar-fixed-top" role="navigation"> <div class="container-fluid"> <div class="navbar-header"> <div><a class="navbar-brand" style="font-size:32px;" href="user.html">教师平台 - 添加讲师</a></div> </div> <div id="navbar" class="navbar-collapse collapse"> <ul class="nav navbar-nav navbar-right"> <li style="padding-top:8px;"> <div class="btn-group"> <button type="button" class="btn btn-default btn-success dropdown-toggle" data-toggle="dropdown"> <i class="glyphicon glyphicon-user"></i> 管理员 <span class="caret"></span> </button> <ul class="dropdown-menu" role="menu"> <li><a href="#"><i class="glyphicon glyphicon-cog"></i> 个人设置</a></li> <li><a href="#"><i class="glyphicon glyphicon-comment"></i> 消息</a></li> <li class="divider"></li> <li><a href="login.html"><i class="glyphicon glyphicon-off"></i> 退出系统</a></li> </ul> </div> </li> <li style="margin-left:10px;padding-top:8px;"> <button type="button" class="btn btn-default btn-danger"> <span class="glyphicon glyphicon-question-sign"></span> 帮助 </button> </li> </ul> <form class="navbar-form navbar-right"> <input type="text" class="form-control" placeholder="Search..."> </form> </div> </div> </nav> <div class="container-fluid"> <div class="row"> <div class="col-sm-3 col-md-2 sidebar"> <div class="tree"> <ul style="padding-left:0px;" class="list-group"> <li class="list-group-item tree-closed" > <a href="main.html"><i class="glyphicon glyphicon-dashboard"></i> 控制面板</a> </li> <li class="list-group-item"> <span><i class="glyphicon glyphicon-ok"></i> 教师管理 <span class="badge" style="float:right">3</span></span> <ul style="margin-top:10px;"> <li style="height:30px;"> <a href="http://www.teacher.com/add.html" style="color:red;"><i class="glyphicon glyphicon-check"></i> 添加讲师</a> </li> <li style="height:30px;"> <a href="http://www.teacher.com/index.html"><i class="glyphicon glyphicon-check"></i>教师列表</a> </li> </ul> </li> </ul> </div> </div> <div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main"> <ol class="breadcrumb"> <li><a href="#">首页</a></li> <li><a href="#">数据列表</a></li> <li class="active">新增</li> </ol> <div class="panel panel-default"> <div class="panel-heading">表单数据<div style="float:right;cursor:pointer;" data-toggle="modal" data-target="#myModal"><i class="glyphicon glyphicon-question-sign"></i></div></div> <div class="panel-body"> <form role="form" id="teacherForm" method="post" action="http://www.teacher.com/addTeacher.do"> <div class="form-group"> <label for="name">讲师名称</label> <input type="text" class="form-control" id="name" name="name" placeholder="请输入讲师名称"> </div> <div class="form-group"> <label for="education">讲师资历</label> <input type="text" class="form-control" id="education" name="education" placeholder="请输入讲师资历"> </div> <div class="form-group"> <label for="subjectId">讲师专业</label> <input type="text" class="form-control" id="subjectId" name="subjectId" placeholder="请输入讲师专业-数字专业学号ID"> </div> <div class="form-group"> <label for="isStar">讲师等级</label> <select id="isStar" name="isStar" class="btn btn-default dropdown-toggle" style="color:#ff0000;" style="height:500px;" style="width:110px;"> <option value="1">高级讲师</option> <option value="2">首席讲师</option> </select> </div> <div class="form-group"> <label for="career">讲师简介</label> <input height="500px" type="text" class="form-control" id="career" name="career" placeholder="请输入讲师简介"> </div> <div class="form-group"> <label for="sort">讲师排序</label> <input height="500px" type="text" class="form-control" id="sort" name="career" placeholder="请输入教师排序-数字类型"> </div> <div class="form-group"> <label for="picPath">上传的图片</label> <input id="picPath" type="hidden" name="picPath"> <div id="fileList" class="uploader-list"></div> <button type="button" id="checked">选择图片</button> <button type="button" id="ImgUploadBtn">上传图片</button> </div> <button type="button" id="saveBtn" class="btn btn-success"><i class="glyphicon glyphicon-plus"></i> 新增</button> <button type="button" id="resetBtn" class="btn btn-danger"><i class="glyphicon glyphicon-refresh"></i> 重置</button> </form> <!--<div id="uploadImgs"> <a href="#" id="ImgAdd" class="modal-title" iconCls="icon-add" plain="true">添加图片</a> <a href="#" id="ImgUploadBtn" class="modal-title" iconCls="icon-save" plain="true" >图片上传</a><br> <a href="#" class="modal-title" iconCls="icon-remove" plain="true">删除</a> </div>--> </div> </div> </div> </div> </div> <div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span><span class="sr-only">Close</span></button> <h4 class="modal-title" id="myModalLabel">帮助</h4> </div> <div class="modal-body"> <div class="bs-callout bs-callout-info"> <h4>测试标题1</h4> <p>测试内容1,测试内容1,测试内容1,测试内容1,测试内容1,测试内容1</p> </div> <div class="bs-callout bs-callout-info"> <h4>测试标题2</h4> <p>测试内容2,测试内容2,测试内容2,测试内容2,测试内容2,测试内容2</p> </div> </div> <!-- <div class="modal-footer"> <button type="button" class="btn btn-default" data-dismiss="modal">Close</button> <button type="button" class="btn btn-primary">Save changes</button> </div> --> </div> </div> </div> <script src="jquery/jquery-2.1.1.min.js"></script> <script src="bootstrap/js/bootstrap.min.js"></script> <script src="script/docs.min.js"></script> <script src="webuploader/webuploader.js"></script> <script src="jquery/layer/layer.js"></script> <script src="jquery/jquery.pagination.js"></script> <script src="jquery/jquery-form.min.js"></script> <script type="text/javascript"> $(function () { $(".list-group-item").click(function(){ if ( $(this).find("ul") ) { $(this).toggleClass("tree-closed"); if ( $(this).hasClass("tree-closed") ) { $("ul", this).hide("fast"); } else { $("ul", this).show("fast"); } } }); initUploader(); }); function initUploader() { //首先创建Web Uploader实例 var uploader = WebUploader.create({ auto: false, // 选完文件后,是否自动上传 swf: 'js/Uploader.swf', // swf文件路径 server: 'fileUpload', // 文件接收服务端 pick: '#checked', // 选择文件的按钮。可选 duplicate: true,// 重复上传图片,true为可重复false为不可重复 // 只允许选择图片文件。 accept: { title: 'Images', extensions: 'gif,jpg,jpeg,bmp,png', mimeTypes: 'image/*' } }); //接着监听fileQueued事件,即当有文件添加进来的时候,通过uploader.makeThumb来创建图片预览图。 uploader.on('fileQueued', function (file) { var $list = $("#fileList"), $li = $( '<div id="' + file.id + '" class="file-item thumbnail">' + '<img>' + '<div class="info">' + file.name + '</div>' + '</div>' ), $img = $li.find('img'); // $list为容器jQuery实例 $list.append($li); // 创建缩略图 uploader.makeThumb(file, function (error, src) { if (error) { $img.replaceWith('<span>不能预览</span>'); return; } $img.attr('src', src); }, 100, 100); //100x100为缩略图尺寸 }); // 文件上传过程中创建进度条实时显示。 uploader.on('uploadProgress', function (file, percentage) { var $li = $('#' + file.id), $percent = $li.find('.progress span'); // 避免重复创建 if (!$percent.length) { $percent = $('<p class="progress"><span></span></p>') .appendTo($li) .find('span'); } $percent.css('width', percentage * 100 + '%'); }); // 文件上传成功,给item添加成功class, 用样式标记上传成功。 /*uploader.on( 'uploadSuccess', function( file, res ) { console.log(res.filePath);//这里可以得到上传后的文件路径 $( '#'+file.id ).addClass('upload-state-done'); });*/ console.log("初始化文件上传控件的响应--uploadSuccess"); uploader.on('uploadSuccess', function (file, response) { console.log("上传完成:" + file.id + "||" + response._raw); var fileId = file.id; var url = response._raw; $("#picPath").val(url); }); // 文件上传失败,显示上传出错。 uploader.on('uploadError', function (file) { var $li = $('#' + file.id), $error = $li.find('div.error'); // 避免重复创建 if (!$error.length) { $error = $('<div class="error"></div>').appendTo($li); } $error.text('上传失败'); }); // 完成上传完了,成功或者失败,先删除进度条。 uploader.on('uploadComplete', function (file) { $('#' + file.id).find('.progress').remove(); }); $('#ImgUploadBtn').click(function () { console.log("开始上传"); if (uploader.getFiles().length <= 0) { layer.msg("上传图片失败", {time: 1000, icon: 5, shift: 6}); return; } uploader.upload(); layer.msg("上传图片成功", {time:1000, icon:6, shift:6}); }); } $(function(){ $("#saveBtn").click(function(){ var loadingIndex=-1; var options = { url:"http://www.teacher.com/addTeacher.do", beforeSubmit : function(){ loadingIndex = layer.msg('数据正在保存中', {icon: 6}); return true ; //必须返回true,否则,请求终止. }, success : function(result){ layer.close(loadingIndex); if(result.success){ layer.msg("教师数据保存成功", {time:1000, icon:6}); window.location.href="http://www.teacher.com/index.html"; }else{ layer.msg("教师数据保存失败", {time:1000, icon:5, shift:6}); } } }; $("#teacherForm").ajaxSubmit(options); //异步提交 return ; }); }); $("#resetBtn").click(function(){ $("#uteacherForm")[0].reset(); }); </script> </body> </html>
@RequestMapping("add.html") public String toAdd() { return "add"; } @RequestMapping(value = "addTeacher.do", method = RequestMethod.POST) @ResponseBody public AjaxResult saveTeacher(EduTeacher eduTeacher) { AjaxResult result = new AjaxResult(); try { teacherService.saveTeacher(eduTeacher); result.setSuccess(true); } catch (Exception e) { e.printStackTrace(); result.setSuccess(false); } return result; }