项目总结知识点记录-文件上传下载(三)

 

(1)文件上传

 

 代码:

 @RequestMapping(value = "doUpload", method = RequestMethod.POST)
    public String doUpload(@ModelAttribute BookHelper bookHelper, Model model, HttpSession session) throws IllegalStateException, IOException, ParseException {
        logger.info("you are uploading a book! ");
        logger.info("This book is " + bookHelper.getTitle() + "!");
        String fileName = bookHelper.getBookFile().getOriginalFilename();
        String bookCover = bookHelper.getBookCover().getOriginalFilename();
        MultipartFile bookFile = bookHelper.getBookFile();
        MultipartFile coverFile = bookHelper.getBookCover();
        if (bookFile.isEmpty()) {
            logger.info("Uploading failed! The book you are uploading is empty!");
            return "upload_failed";
        } else if (coverFile.isEmpty()) {
            logger.info("Uploading failed! The book cover you are uploading is empty!");
            return "upload_failed";
        } else {
            String typeId = "" + bookHelper.getLargeType() + bookHelper.getSmallType();
            int type_id = Integer.parseInt(typeId);
            String format = fileName.substring(fileName.lastIndexOf('.') + 1);
            List<String> typeNames;
            typeNames = bookService.getTypeNames(type_id);
            String filePath_pre = (String) PropertyConfigurer.getProperty("book_path");
            String filePath = filePath_pre + typeNames.get(0) +
                    "/" + typeNames.get(1) + "/" +
                    bookHelper.getTitle() + "." + format;
            File localBookFile = new File(filePath);
            if (localBookFile.exists()) {
                logger.info("Uploading failed! The book is existed!");
                return "upload_failed2";
            }
            bookFile.transferTo(localBookFile);
            String coverPath_pre = (String) PropertyConfigurer.getProperty("book_cover_path");
            String coverPath = coverPath_pre + typeNames.get(0) +
                    "/" + typeNames.get(1) + "/" +
                    bookHelper.getTitle() + ".jpg";
            File localCoverFile = new File(coverPath);
            coverFile.transferTo(localCoverFile);
            logger.info("The book has uploaded to local path successfully!");
            Book book = new Book();
            book.setBook_title(bookHelper.getTitle());
            book.setBook_author(bookHelper.getAuthor());
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM");
            Date date = dateFormat.parse(bookHelper.getPubYear());
            book.setBook_pubYear(date);
            book.setBook_summary(bookHelper.getSummary());
            book.setType_id(type_id);
            book.setBook_format(format);
            book.setDownload_times(0);
            book.setBook_file(filePath);
            book.setBook_cover(coverPath);
            dateFormat = new SimpleDateFormat("yyMMdd", Locale.CHINESE);
            String pubDate = dateFormat.format(date);
            String upDate = dateFormat.format(new Date());
            int random = new Random().nextInt(900) + 100;
            String idStr = "" + typeId + pubDate + upDate + random;
            long bookID = Long.parseLong(idStr);
            logger.info("The book id you uploaded is " + bookID);
            book.setId(bookID);
            bookService.uploadBook(book);
            UserHelper userHelper = (UserHelper) session.getAttribute("userHelper");
            bookService.updateRecords(userHelper.getId(), bookID);
            userService.updateUserContribution(2, userHelper.getId());
            model.addAttribute("bookID", bookID);
            logger.info("you are coming to the uploading successful page!");
            return "upload_success";
        }
    }
public List<String> getTypeNames(int id) {
        BookType bookType;
        bookType = bookTypeDao.queryById(id);
        List<String> typeNames = new ArrayList<String>();
        typeNames.add(bookType.getLarge_type_name());
        typeNames.add(bookType.getSmall_type_name());
        return typeNames;
    }

 

前端代码:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
    <meta><meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <link type="text/css" rel="stylesheet"
          href="${pageContext.request.contextPath }/resources/css/bootstrap.min.css" />
    <link type="text/css" rel="stylesheet"
          href="${pageContext.request.contextPath }/resources/css/bootstrap-datetimepicker.min.css" />
    <link type="text/css" rel="stylesheet"
          href="${pageContext.request.contextPath }/resources/css/upload.css" />
    <title>敛书网 - 文件上传</title>
</head>
<body>
<%@include file="common/loginHead.jsp"%>

<%@include file="common/userHead.jsp"%>

<div id="upload" class="container">
    <br>
    <div class="row">
        <div class="col-md-12 ">
            <div class="panel panel-info">
                <div class="panel-heading">
                    <span class="h5 text-success">上传文件</span>
                </div>
                <div class="panel-body">
                    <div id="myAlert" class="alert alert-warning hide">
                        <a href="#" class="close" data-dismiss="alert">&times;</a>
                        <span id="form-tips" class="text-danger col-md-offset-1"></span>
                    </div>
                    <form id="uploadForm" class="form-horizontal" action="doUpload"
                          enctype="multipart/form-data" method="POST" onsubmit="return checkUploadForm();">
                        <div class="form-group">
                            <label for="title" class="control-label col-md-1 text-danger">标题</label>
                            <div class="col-md-3">
                                <input id="title" name="title" class="form-control" type="text"
                                       placeholder="请填写书籍名称">
                            </div>
                            <label for="author" class="control-label col-md-1 text-warning">作者</label>
                            <div class="col-md-3">
                                <input id="author" name="author" class="form-control" type="text"
                                       placeholder="请填写作者姓名,杂志填无">
                            </div>
                        </div>

                        <div class="form-group">
                            <label for="pubYear" class="control-label col-md-1">年月</label>
                            <div class="col-md-3">
                                <input id="pubYear" name="pubYear" class="form-control datetimepicker"
                                       placeholder="&nbsp;&nbsp;请选择出版年月">
                            </div>
                            <label class="control-label col-md-1">类别</label>
                            <div class="col-md-2">
                                <select id="largeType" name="largeType" class="form-control">
                                    <option value="1">经典文学</option>
                                    <option value="2">通俗小说</option>
                                    <option value="3">计算机类</option>
                                    <option value="4">杂志期刊</option>
                                </select>
                            </div>
                            <div class="col-md-2">
                                <select id="smallType" name="smallType" class="form-control"></select>
                            </div>
                        </div>

                        <div class="form-group">
                            <label for="summary" class="control-label col-md-1 text-info">简介</label>
                            <div class="col-md-6">
                                <textarea id="summary" name="summary" class="form-control" rows="2"></textarea>
                            </div>
                        </div>
                        <div class="form-group">
                            <label for="fileUpload" class="control-label col-md-1 text-success">文件</label>
                            <div class="input-group col-md-5">
                                <input id="fileInfo" class="form-control" readonly type="text"
                                    placeholder="支持txt,epub,mobi和pdf格式">
                                <span class="input-group-addon btn btn-success btn-file">
                                        Browse <input id="fileUpload" name="bookFile" type="file">
                                </span>
                            </div>
                        </div>
                        <div class="form-group">
                            <label for="imageUpload" class="control-label col-md-1 text-success">封面</label>
                            <div class="input-group col-md-5">
                                <input id="imageInfo" class="form-control" readonly type="text"
                                    placeholder="支持jpg和png图片格式">
                                <span class="input-group-addon btn btn-success btn-file">
                                    Browse <input id="imageUpload" name="bookCover" type="file">
                                </span>
                            </div>
                        </div>
                        <br>
                        <div class="form-group">
                            <div class="col-lg-4 col-md-offset-3">
                                <button id="submitBtn" class="btn btn-primary" type="submit" onclick="">提交</button>
                                <button class="btn btn-info col-md-offset-2" type="reset">重置</button>
                            </div>
                        </div>
                    </form>
                </div>

            </div>
        </div>
    </div>

</div>

<hr>

<footer>
    <p class="text-center">&copy; 2023</p>
</footer>

<script src="${pageContext.request.contextPath}/resources/js/jquery-3.1.1.min.js"></script>
<script src="${pageContext.request.contextPath}/resources/js/jquery.cookie.js"></script>
<script src="${pageContext.request.contextPath}/resources/js/bootstrap.min.js"></script>
<script src="${pageContext.request.contextPath}/resources/js/bootstrap-datetimepicker.min.js"></script>
<script src="${pageContext.request.contextPath}/resources/js/userLogin.js"></script>
<script src="${pageContext.request.contextPath}/resources/js/userRegister.js"></script>
<script src="${pageContext.request.contextPath}/resources/js/upload.js"></script>
<script>
    function checkUploadForm() {
        var title = $('#upload #title').val();
        var author = $('#upload #author').val();
        var pubYear = $('#upload #pubYear').val();
        var summary = $('#upload #summary').val();
        var fileInfo = $('#fileInfo').val();
        var imageInfo = $('#imageInfo').val();
        var $formTip = $('#myAlert #form-tips');
        var fileArr = ["txt","epub","mobi","pdf"];
        var imageArr = ["jpg","png"];
        var $alert = $('#myAlert');
        if (title.length == 0) {
            $formTip.html("标题不能为空!");
            $alert.removeClass('hide');
            $('#upload #title').focus();
            return false;
        } else if(author.length == 0) {
            $formTip.html("作者不能为空!");
            $alert.removeClass('hide');
            $('#upload #author').focus();
            return false;
        } else if (pubYear.length == 0) {
            $formTip.html("出版时间不能为空!");
            $alert.removeClass('hide');
            $('#upload #pubYear').focus();
            return false;
        } else if (summary.length == 0) {
            $formTip.html("简介不能为空!");
            $alert.removeClass('hide');
            $('#upload #summary').focus();
            return false;
        } else if (fileInfo.length == 0) {
            $formTip.html("请选择书籍文件!");
            $alert.removeClass('hide');
            return false;
        } else if ($.inArray(getFileFormat(fileInfo),fileArr) == -1) {
            console.log(getFileFormat(fileInfo));
            $formTip.html("不支持该书籍文件!");
            $alert.removeClass('hide');
            return false;
        } else if (imageInfo.length == 0) {
            $formTip.html("请选择书籍封面!");
            $alert.removeClass('hide');
            return false;
        } else if ($.inArray(getFileFormat(imageInfo),imageArr) == -1) {
            console.log(getFileFormat(fileInfo));
            $formTip.html("封面格式错误,请重新上传");
            $alert.removeClass('hide');
            return false;
        } else {
            $formTip.html("正在上传...");
            $alert.removeClass('hide');
            return true;
        }
    }

    function getFileFormat(fileName) {
        return fileFormat = fileName.substring(fileName.lastIndexOf('.') + 1);
    }


</script>
</body>
</html>

(2)文件下载

http://localhost:8888/ebooknet_war_exploded/book_download?bookID=12211101211103496&filePath=E:/lianshu/ebooks/%E7%BB%8F%E5%85%B8%E6%96%87%E5%AD%A6/%E5%8F%A4%E5%85%B8%E6%96%87%E5%AD%A6/%E5%AD%9F%E5%AD%90.txt

 

@RequestMapping(value = "/book_download")
    public void getBookDownload(long bookID, String filePath, HttpServletResponse response) {
        response.setContentType("text/html;charset=utf-8");
        String fileName = filePath.substring(filePath.lastIndexOf("/") + 1);
        BufferedInputStream bis = null;
        BufferedOutputStream bos = null;
        try {
            long fileLength = new File(filePath).length();
            response.setContentType("application/x-msdownload");
            response.setHeader("Content-disposition", "attachment; filename="
                    + new String(fileName.getBytes("utf-8"), "ISO8859-1"));
            response.setHeader("Content-Length", String.valueOf(fileLength));
            bis = new BufferedInputStream(new FileInputStream(filePath));
            bos = new BufferedOutputStream(response.getOutputStream());
            byte[] buff = new byte[2018];
            int bytesRead;
            while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
                bos.write(buff, 0, bytesRead);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (bis != null) {
                    bis.close();
                }
                if (bos != null) {
                    bos.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            bookService.addDownloadTimes(bookID);
            logger.info("you are downloading the book, the book file is " + fileName);
        }
    }

(3)修改头像

 

 

@RequestMapping(value = "/infoModify")
    public String infoModify(String name, String email, String avatarImg, HttpSession session) {
        logger.info("The user is modifying his information!");
        UserHelper userHelper = (UserHelper) session.getAttribute("userHelper");
        User user = new User();
        user.setId(userHelper.getId());
        user.setUserName(name);
        user.setEmail(email);
        int avatarId = userService.getAvatarId(avatarImg);//根据头像存储地址获取头像的编号
        user.setAvatarNum(avatarId);
        userService.updateUserInfo(user);
        User user1;
        user1 = userService.queryById(userHelper.getId());//获取新的用户信息
        UserHelper newUserHelper;
        newUserHelper = userService.getLoginUser(user1.getUserCode(), user1.getUserPassword());
        session.setAttribute("userHelper", newUserHelper);//重新存入Session
        return "redirect:/person";
    }

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/101313.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Git使用

本地操作 1. 初始化git仓库 git init 把当前目录变成git可以管理的仓库 git init2.登录-身份认证 区别登录和注册 git config --global user.name “xxx” git config --global user.email “xxxqq.com”/3.下载别人的git git clone https://gitee.com/meini/user-menage…

Gorm简单了解

GORM 指南 | GORM - The fantastic ORM library for Golang, aims to be developer friendly. 04_GORM查询操作_哔哩哔哩_bilibili 前置&#xff1a; db调用操作语句中间加debug&#xff08;&#xff09;可以显示对应的sql语句 1.Gorm模型定义&#xff08;理解重点&#xff…

色温曲线坐标轴的选取:G/R、G/B还是R/G、B/G ?

海思色温曲线坐标 Mstar色温曲线坐标 高通色温曲线坐标 联咏色温曲线坐标 查看各家白平衡调试界面&#xff0c;比如海思、Mstart、高通等调试资料&#xff0c;白平衡模块都是以R/G B/G作为坐标系的两个坐标轴&#xff0c;也有方案是以G/R G/B作为坐标系的两个坐标轴。 以G/R G…

不同写法的性能差异

“ 达到相同目的,可以有多种写法,每种写法有性能、可读性方面的区别,本文旨在探讨不同写法之间的性能差异 len(str) vs str "" 本部分参考自: [问个 Go 问题&#xff0c;字符串 len 0 和 字符串 "" &#xff0c;有啥区别&#xff1f;](https://segmentf…

002图的基本概念与表示方法

文章目录 一. 图的组成二. 本体图2.1 什么是本体图2.2 怎么设计本体图 三. 图的种类3.1 按连接是否有向分3.2 按本体图分3.3 按连接是否带权重分 四. 节点连接数&#xff08;节点的度&#xff09;4.1 无向图节点的度4.2 有向图节点的度 五. 图的表示方法5.1 邻接矩阵5.2 连接列…

Swift使用PythonKit调用Python

打开Xcode项目。然后选择“File→Add Packages”&#xff0c;然后输入软件包依赖链接&#xff1a; ​https://github.com/pvieito/PythonKit.git https://github.com/kewlbear/Python-iOS.git Python-iOS包允许在iOS应用程序中使用python模块。 用法&#xff1a; import Pyth…

在Mac 上安装flutter 遇到的问题

准备工作 1、升级Macos系统为最新系统 2、安装最新的Xcode 3、电脑上面需要安装brew https://brew.sh/ 4、安装chrome浏览器(开发web用) 下载Flutter、配置Flutter环境变量、配置Flutter镜像 下载Flutter SDK https://docs.flutter.dev/release/archive?tabmacos 根据自己…

Spring Cloud--从零开始搭建微服务基础环境【二】

&#x1f600;前言 本篇博文是关于Spring Cloud–从零开始搭建微服务基础环境【二】&#xff0c;希望你能够喜欢 &#x1f3e0;个人主页&#xff1a;晨犀主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是晨犀&#xff0c;希望我的文章可以帮助到大家&#xff0c;…

vue中使用window.open打开assets文件夹下的pdf文件

需求&#xff1a;系统有个操作手册&#xff0c;点击会在浏览器新开个窗口并打开pdf文件。这个pdf文件存储在本地assets文件夹中。 文件结构&#xff1a; 注&#xff1a;直接使用window.open(文件路径)不能打开&#xff0c;需要在vue.config.js中配置所需文件 引入图中红框中的…

YOLOV8模型使用-检测-物体追踪

这个最新的物体检测模型&#xff0c;很厉害的样子&#xff0c;还有物体追踪的功能。 有官方的Python代码&#xff0c;直接上手试试就好&#xff0c;至于理论&#xff0c;有想研究在看论文了╮(╯_╰)╭ 简单介绍 YOLOv8 中可用的模型 YOLOv8 模型的每个类别中有五个模型用于检…

从零开始,探索C语言中的字符串

字符串 1. 前言2. 预备知识2.1 字符2.2 字符数组 3. 什么是字符串4. \04.1 \0是什么4.2 \0的作用4.2.1 打印字符串4.2.2 求字符串长度 1. 前言 大家好&#xff0c;我是努力学习游泳的鱼。你已经学会了如何使用变量和常量&#xff0c;也知道了字符的概念。但是你可能还不了解由…

html5——前端笔记

html 一、html51.1、理解html结构1.2、h1 - h6 (标题标签)1.3、p (段落和换行标签)1.4、br 换行标签1.5、文本格式化1.6、div 和 span 标签1.7、img 图像标签1.8、a 超链接标签1.9、table表格标签1.9.1、表格标签1.9.2、表格结构标签1.9.3、合并单元格 1.10、列表1.10.1、ul无序…

大数据Flink实时计算技术

1、架构 2、应用场景 Flink 功能强大&#xff0c;支持开发和运行多种不同种类的应用程序。它的主要特性包括&#xff1a;批流一体化、精密的状态管理、事件时间支持以及精确一次的状态一致性保障等。在启用高可用选项的情况下&#xff0c;它不存在单点失效问题。事实证明&#…

【Python】从入门到上头— IO编程(8)

文章目录 一.IO编程是什么二.文件读写1.读取文件2.file-like Object二进制文件字符编码 3.写文件file对象的常用函数常见标识符 三.StringIO和BytesIO1.StringIO2.BytesIO 四.操作文件和目录五.序列化和反序列化1.pickle.dumps()2.pickle.loads()3.JSON 一.IO编程是什么 IO在计…

38、springboot为 spring mvc 提供的静态资源管理,覆盖和添加静态资源目录

springboot为 spring mvc 提供的静态资源管理 ★ Spring Boot为Spring MVC提供了默认的静态资源管理&#xff1a; ▲ 默认的四个静态资源目录&#xff1a; /META-INF/resources > /resources > /static > /public ▲ ResourceProperties.java类的源代码&#xff0…

SparkCore

第1章 RDD概述 1.1 什么是RDD RDD&#xff08;Resilient Distributed Dataset&#xff09;叫做弹性分布式数据集&#xff0c;是Spark中最基本的数据抽象。代码中是一个抽象类&#xff0c;它代表一个弹性的、不可变、可分区、里面的元素可并行计算的集合。 RDD类比工厂生产。 …

十一、MySQL(DQL)聚合函数

1、聚合函数 注意&#xff1a;在使用聚合函数时&#xff0c;所有的NULL是不参与运算的。 2、实际操作&#xff1a; &#xff08;1&#xff09;初始化表格 &#xff08;2&#xff09;统计该列数据的个数 基础语法&#xff1a; select count(字段名) from 表名; &#xff1b;统…

DevEco Studio 配置

首先,打开deveco studio 进入首页 …我知道你们想说什么,我也想说 汉化配置 没办法,老样子,先汉化吧,毕竟母语看起来舒服 首先,点击软件左下角的configure,在配置菜单里选择plugins 进入到插件页面, 输入chinese,找到汉化插件,(有一说一写到这我心里真是很不舒服) 然后点击o…

全球免费编程教育网站:Code.org

全球免费编程教育网站&#xff1a;Code.org 官网地址注册使用 你还在为小朋友的编程教育而发愁吗&#xff1f; 你还在为小朋友放假无聊而头疼吗&#xff1f; 他来了他来了&#xff0c;全球免费编程教育网站来了。 2013年成立的Code.org是一个非营利组织。 它致力于为年轻女子、…

WireShark流量抓包详解

目录 Wireshark软件安装Wireshark 开始抓包示例Wireshakr抓包界面介绍WireShark 主要界面 wireshark过滤器表达式的规则 Wireshark软件安装 软件下载路径&#xff1a;wireshark官网。按照系统版本选择下载&#xff0c;下载完成后&#xff0c;按照软件提示一路Next安装。 Wire…