图片上传到数据库,和图片页面回显

java存储用户图片和图片展示

1.图片上传

1.1前端利用zui上传图片组件来上传图片

<div id="uploaderExample" class="uploader">
	<div class="file-list col-xs-9" data-drag-placeholder="请拖拽文件到此处" style="display: inline-block;padding: 0px;"></div>
	<button type="button" class="btn btn-primary uploader-btn-browse" style="float: right;" onclick="uploadFile()">
		<i class="icon icon-cloud-upload"></i> 图片选择
	</button>
</div>

选择需要上传的图片或者拖拽上传
1.2在controller层利用MultipartFile来接收文件

	@PostMapping("/setUserMsg")
	public JsonData setUserMsg(HttpServletRequest request,@RequestParam(name= "file", required = false) MultipartFile file) throws Exception {
		return userService.setUserInfo(file);
	}

1.3在service层对图片进行处理

public JsonData setUserMsg(MultipartFile file){
	//判断file是否为空
	if(file != null){
		//创建一个pojo对象类型,存放用户图片信息
		UserInfo userInfo = new UserInfo();
		//根据需求确定是哪个用户的图片,设置用户信息
		userInfo.setUserId(xxx);
		......
		userInfo.setPicture(file.getBytes());//获取图片编码格式的字节数组
		return JsonData.buildSuccess(userMapper.insert(userInfo));
	}
}

1.4在mapper层创建一个接收对象类型的参数的接口方法

int insert(UserInfo userInfo);

1.5xml文件,此处图片格式是设置为了二进制大文件类型(blob)

<insert id="insert" parameterType="xxx.xxx.UserInfo">
    insert into UserInfo(USERID, XXX,Picture)
    values ( #{userid,jdbcType=VARCHAR}, #{XXX,jdbcType=DECIMAL},  #{qzxx,jdbcType=BLOB})
 </insert>

此时图片就成功保存到数据库了,记得给每个图片生成一个ID,因为每个用户可以上传多张图片

2.图片回显

2.1html页面

<div class="row-fluid">
   <ul class="ace-thumbnails">
   	<template v-for="qm in list">
   		<li style="margin-right: 20px;">
   			<div>
   				<img style="cursor: pointer;" height="50" v-bind:src="img_url + qm.ptid"/>						
   			</div>
   		</li>		
   	 </template>
   </ul>
</div>

2.2url方法

img_url: 'xxx/xxx/showPhoto/'

获取用户list,之后遍历用户id,因为同一用户可能上传过多张照片,最后通过用户id获取图片.

	@GetMapping("/getUserList")
	public JsonData getUserList(HttpServletRequest request) {
		//根据登录用户获取登录useid
		User user = userService.getLoginUser(request);
		return userService.getUserList(user.getUserid());
	}

service

public JsonData getUserList(String userId) {
	return JsonData.buildSuccess(userMapper.selectAllByUserId(userId));
}

mapper接口,这里需要返回一个list,每条记录为一个map或者一个user对象

List<UserInfo> selectAllByUserId(@Param(useId) String userId);//单个参数可以不写@param

xml文件

<select id="selectAllByUserId" resultMap="BaseResultMap">
  	select  USERID, XXX,PTID
    from USERINFO
    where USERID = #{userId,jdbcType=VARCHAR}
</select>

此处根据自己项目所需查询,也可只查询图片ID.
2.3通过图片ID来遍历展示图片(记得设置图片展示宽高)

	@GetMapping("/showDzqmPhoto/{ptid}")
	public void showDzqmPhoto(@PathVariable(name= "ptid") String ptid, HttpServletResponse response) {
		userService.showDzqmPhoto(ptid, response);
	}

此处需要用到响应HttpServletResponse

	public void showDzqmPhoto(String ptid, HttpServletResponse response) {
		//图片id不为空就获取图片
		if(ptid==null||"undefined".equals(ptid)||"".equals(ptid)) {
			return;
		}
		UserInfo dzqz = userMapper.selectByPrimaryKey(ptid);//通过图片id获取这个pojo对象
		//创建一个输出流
		OutputStream os = null;
		try {
			os = response.getOutputStream();
			os.write(dzqz.getPictrue());//上面setPictrue的图片的byte数组字段
			os.flush();
		} catch(Exception e) {
			logger.error(e.getMessage(),e);//打印异常信息
		} finally {
			if(os != null) {
				try {
					os.close();//关闭流
				} catch (IOException e) {
					logger.error(e.getMessage(),e);
//					e.printStackTrace();
				}
			}
		}
	}

此方法不需要返回,因为在流中就刷出去了,中间的mapper和xml文件就不写了,就是一个通过useid查询对象信息的sql.
此时页面上通过vue绑定的url地址处就会展示出所有符合条件的图片

<img style="cursor: pointer;" height="50" v-bind:src="img_url + qm.ptid"/>

完!!!

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Laravel中上传图片回显,你可以按照以下步骤进行操作: 1. 在表单中添加文件上传字段: ```html <form method="POST" action="/upload" enctype="multipart/form-data"> @csrf <input type="file" name="image"> <button type="submit">上传图片</button> </form> ``` 2. 在路由中定义上传图片的处理逻辑: ```php use Illuminate\Http\Request; Route::post('/upload', function (Request $request) { if ($request->hasFile('image')) { $path = $request->file('image')->store('public/images'); // 存储的路径为 "storage/images/filename" // 如果你想要访问图片,可以将路径存储到数据库,并使用 Storage::url() 获取完整路径 // 也可以直接拼接 URL,例如:$url = '/storage/images/' . $request->file('image')->hashName(); return redirect()->back()->with('success', '图片上传成功'); } return redirect()->back()->with('error', '请选择要上传的图片'); }); ``` 3. 在视图中回显上传的图片: ```html @if(session('success')) <div class="alert alert-success">{{ session('success') }}</div> @endif @if(session('error')) <div class="alert alert-danger">{{ session('error') }}</div> @endif @if(isset($url)) <img src="{{ $url }}" alt="Uploaded Image"> @endif ``` 上述代码中,`$url` 是存储图片路径的变量,可以在控制器中把它传递给视图。使用`$url`作为图片的`src`属性值,图片就会回显页面上。 请确保在进行文件上传时,已经配置好了Laravel的文件存储系统,并且有合适的权限以保存和访问上传的图片
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值