ssm本地上传文件

news2024/11/8 0:47:56

SSM实现图片本地上传并保存到本地磁盘中

功能描述

实现房屋租赁网站中添加房屋信息的功能。其中add.jsp页面是一个表单提交信息——添加房屋

  • 首先输入房屋的相关信息,并上传房屋的图片。上传成功后会将图片的名字添加到数据库中
  • 成功后跳转到success.jsp,从数据库读取房屋的图片路径,并显示

add.jsp

<%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%>
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>公寓管理系统 - 房屋信息添加</title>
	<link rel="stylesheet" href="../../css/main.css">
	<link rel="stylesheet" href="../../lib/font-awesome/css/font-awesome.css">
</head>
<body>
<div class="box">
	<h3>添加房屋信息</h3>
	<form action="${pageContext.request.contextPath}/house/add" method="post" enctype="multipart/form-data">
	<table class="form-table">
		<tr>
			<td>地区</td>
			<td colspan="3" class="control">
				<input type="text" name="address" placeholder="填写地区">
			</td>
		</tr>
		<tr>
			<td>楼层</td>
			<td colspan="3" class="control">
				<input type="text" name="floor" placeholder="楼层">
			</td>
		</tr>
		<tr>
			<td>房间号</td>
			<td colspan="3" class="control">
				<input type="text" name="roomNum" placeholder="房间号">
			</td>
		</tr>
		<tr>
			<td>面积(平米)</td>
			<td colspan="3" class="control">
				<input type="text" name="area" placeholder="面积">
			</td>
		</tr>
		<tr>
			<td>朝向</td>
			<td colspan="3" class="control">
				<input type="text" name="dir" placeholder="朝向">
			</td>
		</tr>
		<tr>
			<td>装修类型</td>
			<td colspan="3" class="control">
				<select name="deco">
					<option value="1">毛坯</option>
					<option value="2">精装</option>
				</select>
			</td>
		</tr>
		<tr>
			<td>是否双气</td>
			<td colspan="3" class="control">
				<select name="air">
					<option value="1">是</option>
					<option value="2">否</option>
				</select>
			</td>
		</tr>
		<tr>
			<td>价格(元/月)</td>
			<td colspan="3" class="control">
				<input type="text" name="price" placeholder="价格">
			</td>
		</tr>
		<tr>
			<td>出租状态</td>
			<td colspan="3" class="control">
				<select name="rentStatus">
					<option value="1">已出租</option>
					<option value="2">未出租</option>
					<option value="3">停止出租</option>
				</select>
			</td>
		</tr>
		<tr>
			<td>房屋图片</td>
			<td colspan="3" class="control">
				<input type="file" name="houseImage" placeholder="选择图片">
			</td>
		</tr>
	</table>
	<div class="buttons">
		<input class="btn btn-primary va-bottom" type="submit" value="保存">&nbsp;&nbsp;
		<a class="btn btn-default" href="javascript:history.go(-1)">返回</a>
	</div>
	</form>
</div>
</body>
</html>

注意

  1. enctype="multipart/form-data":指表单数据有多部份构成,既有文本数据,又有文件等二进制数据的意思。只有multipart/form-data才能完整的传递文件数据
  2. 输入框中的name="houseImage"要与后台的MultipartFile类型的属性名要一致,且不能和实体类house中表示图片的属性名相同

首先要注入依赖

 <!--图片上传-->
    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <version>2.4</version>
    </dependency>
    <dependency>
      <groupId>commons-fileupload</groupId>
      <artifactId>commons-fileupload</artifactId>
      <version>1.3.3</version>
    </dependency>

在SpringMVC中配置:

    <!--文件上传-->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="maxUploadSize" value="104857600"/>
        <property name="defaultEncoding" value="utf-8"/>
        <property name="maxInMemorySize" value="40960"/>
    </bean>

HouseController

    @RequestMapping("/add")
    public String add(House house, MultipartFile houseImage, HttpServletRequest request) throws IOException {
        house.setAddTime(LocalDateTime.now());
        house.setUpdateTime(LocalDateTime.now());
        if (houseImage.getSize() != 0) {
            String path = "D:\\Soft\\IntelliJ IDEA 2023.1.1\\Workspace\\ssmTest\\upload";
            String imageName = UplodUtil.upload(houseImage, path);
            house.setImage(imageName);
        }
        System.out.println(house);
        request.getSession().setAttribute("house", house);
        return "success";
    }

path = “D:\Soft\IntelliJ IDEA 2023.1.1\Workspace\ssmTest\upload” 是要保存图片的地址。就是上传的图片都存在这个文件夹中

数据库:

img

还需要一个工具类UploadUtil

public class UplodUtil {
        public static String upload(MultipartFile file, String basePath) {
            String uuid = UUID.randomUUID().toString();
            String orgFileName = file.getOriginalFilename();
            String ext = "." + FilenameUtils.getExtension(orgFileName);
            String fileName = uuid + ext;
            try {
                File targetFile = new File(basePath, fileName);
                FileUtils.writeByteArrayToFile(targetFile, file.getBytes());
                return fileName;

            } catch (IOException e) {
                e.printStackTrace();
            }
            return "";
        }

}

配置虚拟目录

方法一:

直接在Tomcat中的server.xml中的host标签中添加:

<Context path="/upload" docBase="D:\\Soft\\IntelliJ IDEA 2023.1.1\\Workspace\\ssmTest\\upload" crossContext="true" reloadable="true" debug="0"/>

path:是虚拟路径

docBase:是保存图片的绝对地址

方法二:

img

img

选择你要保存图片的文件夹

img

img

success.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<img src="/upload/${house.image}">
</body>
</html>

img

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

华为OD机试 Java 实现【简单密码】【牛客练习题 HJ21】,附详细解题思路

一、题目描述 现在有一种密码变换算法。 九键手机键盘上的数字与字母的对应&#xff1a; 1--1&#xff0c; abc--2, def--3, ghi--4, jkl--5, mno--6, pqrs--7, tuv--8 wxyz--9, 0--0&#xff0c;把密码中出现的小写字母都变成九键键盘对应的数字&#xff0c;如&#xff1a;a …

【PaperReading】科学可重复的基因组富集: CERNO 与其他八种算法的比较

Gene set enrichment for reproducible science: comparison of CERNO and eight other algorithms 可重复性科学的基因组富集: CERNO 与其他八种算法的比较1. 引言2. 材料和方法2.1 CERNO算法2.2 进一步用于评估的算法2.3 数据集2.4 算法评估指标3. 结果3.1 CERNO算法的不同排…

【前端 - HTML】第 2 课 - HTML 标签

欢迎来到博主 Apeiron 的博客&#xff0c;祝您旅程愉快 &#xff01; 时止则止&#xff0c;时行则行。动静不失其时&#xff0c;其道光明。 目录 1、缘起 2、标题标签 3、段落标签 4、文本格式化标签 5、图像标签 5.1、基本作用 5.2、属性 6、超链接标签 7、音频标…

STM32 FSMC机制

引 言 STM32是ST(意法半导体)公司推出的基于ARM内核Cortex&#xff0d;M3的32位微控制器系列。Cortex&#xff0d;M3内核是为低功耗和价格敏感的应用而专门设计的&#xff0c;具有突出的能效比和处理速度。通过采用Thumb&#xff0d;2高密度指令集&#xff0c;Cortex&#xff0…

五种I/O模型

一、I/O基本概念 I/O即数据的读取&#xff08;接收&#xff09;或写入&#xff08;发送&#xff09;操作 通常用户进程中的一个完整I/O分为两个阶段 (1)用户进程空间<-->内核空间 (2)内核空间<-->设备空间&#xff08;磁盘、网卡等&#xff09; I/O分为内存I/O、…

个人博客网站实现微信扫码登录(新)

前言 在不久之前&#xff08;两年前&#xff09;我写了一篇同名的博客《个人博客网站实现微信扫码登录&#xff08;附源码&#xff09;》&#xff0c;当时只是做一个记录而已。但是没想到会收到很多“猿友”的私聊&#xff0c;“代码跑不起来”、“实现原理”、“测试网址访问不…

[网鼎杯 2018]Fakebook1

拿到题目后是一个博客的界面&#xff0c;这里可以登录和注册 点入登录界面&#xff0c;猜测可能是sql注入 试了很多次&#xff0c;都不是&#xff0c;也没有回显报错&#xff0c;所以把目光放到了注册上面 注册的其他行数据&#xff0c;差不多都可以乱填&#xff0c;只有一个bl…

王道考研计算机网络第二章知识点汇总

2.1.1物理层基本概念 电气特性和功能特性易混淆&#xff0c;注意区分。电气特性一般指的是某个范围&#xff0c;功能特性一般指的是电平所代表的含义。 2.1.2数据通信基础知识 同步传输是指发送方和接收方节奏是统一的&#xff0c;数据之间是没有间隔的是一个一个的区块。在键…

轻松掌握Python自动化工具,解锁PyAutoGUI的强大功能

前言 PyAutoGUI是一个用于图像识别和鼠标/键盘控制的Python库。它提供了一组函数和方法&#xff0c;用于自动化屏幕上的鼠标移动、点击、拖拽和键盘输入&#xff0c;以及执行图像识别和处理。本文旨在帮助读者入门 PyAutoGUI&#xff0c;理解其基础概念和掌握最佳实践&#xff…

手把手教你实现—基于OpenCV的车流量统计和车速检测代码

本章将实现了一个简单的车辆速度估计和车流量统计的GUI应用&#xff0c;它使用了Haar级联检测器和相关跟踪器来检测和跟踪视频中的车辆&#xff0c;并通过图像处理和数学计算来估计车辆的速度。 1.首先&#xff0c;该代码需要cv2&#xff1a;用于图像处理和计算机视觉任务&…

软件测试(功能、接口、性能、自动化)详解

一、软件测试功能测试测试用例编写是软件测试的基本技能&#xff1b;也有很多人认为测试用例是软件测试的核心&#xff1b;软件测试中最重要的是设计和生成有效的测试用例&#xff1b;测试用例是测试工作的指导&#xff0c;是软件测试的必须遵守的准则。黑盒测试常见测试用例编…

比较18个3*6尺寸差值结构的迭代次数

已发现二值化差值结构有3种相互作用&#xff0c;纵向&#xff0c;横向和斜向。纵向相互作用只与行间距有关而与数值的数量无关&#xff0c;与迭代次数成反比&#xff1b;横向相互作用只与列的数值数量有关与列间距无关&#xff0c;与迭代次数成正比&#xff1b;斜向相互作用将导…

完全免费PNG素材库,免费可商用~

推荐的这几个PNG素材网一定要收藏~免费可商用~ 菜鸟图库 https://www.sucai999.com/searchlist/66008----all-0-1.html?vNTYxMjky 菜鸟图库是一个为新手设计师提供免费素材的网站&#xff0c;站内有非常多设计相关素材&#xff0c;比如平面模板、UI素材、电商素材、免抠素材…

C++中string类的常用函数

文章目录 默认成员函数常见构造函数(constructor) string类的容量操作size()empty()capacity()reserve()clear()resize() string类对象的访问及遍历操作重载 [ ]begin()end()begin() end() 遍历字符串rbegin()rend()rbegin() rend()反向遍历字符串C11范围for string类对象修改…

客户至上 服务至极 ——优维服务流程标准化体系

◎ 如何用服务打动客户&#xff1f; 在思考这个问题之前&#xff0c;首先我们要了解做好服务最难的是什么&#xff1f; 众所周知&#xff0c;由机器作业出来的东西是一致且规范的&#xff0c;而服务不一样。服务&#xff0c;是需要人来参与的&#xff0c;当由不同的人来完成某…

web问题定位:F12,如何找到对应接口

接口查看法&#xff0c;是我们最常用的定位前后端问题的方法。即&#xff1a;一般用来查看是后端返回给前端的数据有误&#xff0c;还是前端显示有误。 主流浏览器&#xff08;如Chrome&#xff0c;FireFox&#xff0c;等&#xff09;都有自带的接口查看工具&#xff0c;可以通…

微软wsl2 + ubantu + docker + 部署本地项目

windows 操作系统版本要达到要求 开启 wsl2 安装实用工具 Windows Terminal 和 Visual Studio Code 安装 Ubuntu 子系统 安装 Docker Desktop 并让 Docker Desktop 基于 wsl2 来运行 基础环境准备可以完全参照《搭建 Laravel Sail 开发环境 - Windows》来进行&#xff0c;我跟教…

2023年的深度学习入门指南(16) - JAX和TPU加速

2023年的深度学习入门指南(16) - JAX和TPU加速 上一节我们介绍了ChatGPT的核心算法之一的人类指示的强化学习的原理。我知道大家都没看懂&#xff0c;因为需要的知识储备有点多。不过没关系&#xff0c;大模型也不是一天能够训练出来的&#xff0c;也不可能一天就对齐。我们有…

葡萄酒质量预测

本文中所有代码及数据均存放于&#xff1a;https://github.com/MADMAX110/WineQualityPrediction 本文根据酸度、残糖和酒精浓度等特征训练和调整一个随机的葡萄酒质量森林模型。 一、设置环境&#xff0c;确认你的电脑安装了以下环境 Python 3NumPyPandasScikit-Learn (a.k.a…

Ubuntu 18.04 交叉编译Opencv-4.6.0

环境 操作系统&#xff1a;Ubuntu 18.04 OpenCv版本&#xff1a;4.6.0 交叉工具链&#xff1a;arm-linux-gnueabihf-gcc-5.3.1 下载OpenCV源代码 这里推荐大家到网上找OpenCV的Linux版本安装包&#xff08;.tar.gz结尾&#xff09;&#xff0c;不要github上clone&#xff08…