用JavaScript实现图片上传并预览

深藏阁楼爱情的钟 2021-08-30 00:04 871阅读 0赞

一、前端界面是通过jqgrid展示的

jqgrid是典型的B/C架构(浏览器/服务器模式),服务器端只需提供数据管理,浏览器只需负责数据显示。

jqGrid是用ajax实现对请求和响应的处理,支持局部实时刷新。

二、jqgrid特性

1、通过配置url地址数据显示格式

2、支持行编辑,列搜索过滤

3、支持分页

4、添加表单支持文件上传

5、链式调用

三、代码实例

1、jqgrid页面展示

  1. $(document).ready(function () {
  2. $("#gridTable").jqGrid({
  3. colNames:['标号','班次', '第一班', '第二班', '第三班', '第四班','操作'],
  4. colModel:[{
  5. name:'mark',
  6. index:'mark',
  7. width: 100,
  8. },{
  9. name:'division',
  10. index:'division',
  11. width: 100,
  12. },{
  13. name:'first_class',
  14. index:'first_class',
  15. width: 100,
  16. }, {
  17. name:'second_class',
  18. index:'second_class',
  19. width: 100,
  20. },{
  21. name:'third_class',
  22. index:'third_class',
  23. width: 100,
  24. }, {
  25. name: 'fouth_class',
  26. index: 'fouth_class',
  27. width: 100,
  28. }, {
  29. name: 'operate',
  30. index: 'operate',
  31. width: 200,
  32. search: false,
  33. formatter : function(cellvalue,options,rowObject){
  34. var id = rowObject.mark
  35. var str = '<button class="btn-info" data-for="pictureModal">'+
  36. '图片'+
  37. '</button>';
  38. return str;
  39. },
  40. }
  41. ],
  42. sortname : "mark",
  43. sortorder : "desc",
  44. viewrecords : true,
  45. width: 747,
  46. height: 355,
  47. rowNum: 10,
  48. datatype: 'text',
  49. pager: "#gridPager",
  50. onSelectRow:function(rowid){
  51. grid_selectRow = $("#gridTable").jqGrid("getRowData",rowid);
  52. $("#modal_picture").pictureLoading({});
  53. },
  54. ondblClickRow: function(rowid) {
  55. grid_selectRow = $("#gridTable").jqGrid("getRowData",rowid);
  56. $("#edit").trigger("click");
  57. },
  58. });
  59. jf_initJqgrid();
  60. jf_click();
  61. function jf_initJqgrid(){
  62. $.ajax({
  63. url:"DivisiondefineServlet",
  64. async:true, //是否为异步请求
  65. cache:false, //是否缓存结果
  66. type:"GET",
  67. dataType:"json",
  68. success : function(data){
  69. $("#gridTable").jqGrid("clearGridData");
  70. for(var i=0;i<=data.length;i++){
  71. $("#gridTable").jqGrid('addRowData',i+1,data[i]);
  72. }
  73. }
  74. })
  75. }
  76. $('[id^=jqgh_gridTable_]').css("height","20px");
  77. function jf_click() {
  78. $("#add").click(function () {
  79. $("#modal-divisionAdd").divisionAdd({});
  80. })
  81. $("#edit").click(function () {
  82. $("#modal-divisionEdit").divisionEdit({});
  83. })
  84. $("#delete").click(function () {
  85. jf_delete();
  86. jf_initJqgrid();
  87. })
  88. }
  89. function jf_delete() {
  90. $.ajax({
  91. url:"DivisiondefineServlet?action=delete",
  92. async:true, //是否为异步请求
  93. cache:false, //是否缓存结果
  94. type:"POST",
  95. dataType:"text",
  96. data :{
  97. "mark1" : grid_selectRow.mark,
  98. },
  99. })
  100. }
  101. });

2、模块页面

  1. ;(function($){
  2. $.fn.pictureLoading = function(options){
  3. var el = this;
  4. var opts = {
  5. }
  6. var param = $.extend(opts,options);
  7. var or = new Order(el, param);
  8. }
  9. var Order = function(el,param){
  10. this.el=el;
  11. this.param=param;
  12. this.orderContent();
  13. this.bindEvent();
  14. this.orderSetValue();
  15. }
  16. Order.prototype = {
  17. orderContent : function(){
  18. //创建模态窗体
  19. this.el.addClass("modal").attr("tabindex","-1").attr("data-backdrop","static");
  20. html= '<div class="modal-dialog">'+
  21. '<div class="modal-content" style="width: 450px">'+
  22. '<div class="modal-header" style="border-bottom:0px;">'+
  23. '<div class="row col-sm-12">'+
  24. '<div class="col-sm-8" align="left">'+
  25. '<span></span>'+
  26. '</div>'+
  27. '<div class="col-sm-4" align="right">'+
  28. '<button class="close" data-dismiss="modal" aria-hidden="true" value="HTML">'+
  29. '<span class="blue">×</span>'+
  30. '</button>'+
  31. '</div>'+
  32. '</div>'+
  33. '</div>'+
  34. '<div class="modal-body" style="height:350px;top: -30px">'+
  35. '<form id="form" action="PictureServlet" method="post">'+
  36. '<span>标号</span><input id="mark" name="mark" disabled/>'+
  37. '<span id="FPicName">'+
  38. '<input id="IronMan" type="file" size="45" name="IronMan" class="avatar input" οnchange="loadfile(); "style="display:none";/>'+
  39. '<img id="viewImg" class="viewImg" src="picture/html.jpg" style="height: 300px;width: 400px;" ="loadPic();" >'+
  40. '</span>'+
  41. '</form>'+
  42. '</div>'+
  43. '<div class="modal-footer">'+
  44. '<div align="right">'+
  45. '<div class="btn-group">'+
  46. '<button id="btnSubCancel" class="btn btn-default btn-sm" data-dismiss="modal">'+
  47. '<span>退出</span>'+
  48. '</button>'+
  49. '</div>'+
  50. '</div>'+
  51. '</div>'+
  52. '</div>'+
  53. '</div>';
  54. this.el.html("");
  55. this.el.append(html);
  56. this.el.modal("show");
  57. },
  58. orderSetValue : function(){
  59. $("#mark").val(grid_selectRow.mark);
  60. $.ajax({
  61. url:"PictureServlet",
  62. async:true, //是否为异步请求
  63. cache:false, //是否缓存结果
  64. type:"GET",
  65. dataType:"json",
  66. data :{
  67. "mark" : $("#mark").val()
  68. },
  69. success : function(data){
  70. $('#viewImg').attr('src', "../../../picture/" + data);
  71. },
  72. error:function () {
  73. alert("error");
  74. }
  75. })
  76. },
  77. //自定义JS点击事件
  78. bindEvent : function(){
  79. },
  80. }
  81. })(jQuery)

3、ajax实现异步请求

  1. function loadfile(){
  2. var picName = $("#IronMan").val().replace("C:\fakepath\","");
  3. $.ajax({
  4. url:"PictureServlet",
  5. async:true, //是否为异步请求
  6. cache:false, //是否缓存结果
  7. type:"POST",
  8. dataType:"json",
  9. data :{
  10. "mark" : $("#mark").val(),
  11. "picName":picName,
  12. },
  13. })
  14. $('#viewImg').attr('src', "../../../picture/" + picName);
  15. }

4、servlet存储并在本地存储图片文件

  1. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
  2. System.out.println("servlet");
  3. response.setContentType("text/html");
  4. request.setCharacterEncoding("utf-8");
  5. response.setCharacterEncoding("utf-8");
  6. int mark = Integer.parseInt(request.getParameter("mark"));
  7. String picName = request.getParameter("picName");
  8. service.insertPic(mark,picName);
  9. String directory = "E:/GDKJ/others/imooc_pic";
  10. File file = new File(directory,picName);
  11. if(file.exists()) {
  12. System.out.println(file.getAbsolutePath());
  13. System.out.println(file.getName());
  14. System.out.println(file.length());
  15. } else {
  16. file.getParentFile().mkdirs();
  17. try {
  18. file.createNewFile();
  19. } catch (IOException e) {
  20. System.out.println("创建新文件时出现了错误。。。");
  21. e.printStackTrace();
  22. }
  23. }
  24. }

注:service和dao中代码省略不计(可参考我的博客ajax异步加载jqgrid之动态创建)

四、效果展示

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2d1b3J1aV9qYXZh_size_16_color_FFFFFF_t_70

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2d1b3J1aV9qYXZh_size_16_color_FFFFFF_t_70 1

发表评论

表情:
评论列表 (有 0 条评论,871人围观)

还没有评论,来说两句吧...

相关阅读