抖音资讯

douyinzx

java上传图片怎么实现(java导入图片的方法)

iseeyu2年前 (2024-05-05)抖音资讯110

前言:

  我们在设计自己的网站的时候,一定会遇到上传图片的功能,比如:用户头像,商品图片。

  这篇文章将带着大家设计一个可以使用的图片上传功能,请大家一步一步来,让我们在码路上越走越远。

前端:

组件引入

前端我们使用element-ui的组件。我这里以html加js的方式

1:引入vue.js,axios.js,element-ui。

<script src="../static/js/util/vue.min.js"></script>

<script src="https://cdn.staticfile.org/axios/0.18.0/axios.min.js"></script>

<!-- 引入样式 -->

<link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">

<!-- 引入组件库 -->

<script src="https://unpkg.com/element-ui/lib/index.js"></script>

基础文件上传

2:element-ui中有多个例子,我们使用其中一个:

<el-upload

class="avatar-uploader"

action="/Manage/upBusinessImage"

:show-file-list="false"

:on-success="handleAvatarSuccess"

:before-upload="beforeAvatarUpload">

<img v-if="imageUrl" :src="imageUrl" class="avatar">

<i v-else class="el-icon-plus avatar-uploader-icon"></i>

</el-upload>

<style>

.avatar-uploader .el-upload {

border: 1px dashed #d9d9d9;

border-radius: 6px;

cursor: pointer;

position: relative;

overflow: hidden;

}

.avatar-uploader .el-upload:hover {

border-color: #409EFF;

}

.avatar-uploader-icon {

font-size: 28px;

color: #8c939d;

width: 178px;

height: 178px;

line-height: 178px;

text-align: center;

}

.avatar {

width: 178px;

height: 178px;

display: block;

}

</style>

<script>

export default {

data() {

return {

imageUrl: ''

java上传图片怎么实现(java导入图片的方法)

};

},

methods: {

handleAvatarSuccess(res, file) {

this.imageUrl = URL.createObjectURL(file.raw);

},

beforeAvatarUpload(file) {

const isJPG = file.type === 'image/jpeg';

const isLt2M = file.size / 1024 / 1024 < 2;

if (!isJPG) {

this.$message.error('上传头像图片只能是 JPG 格式!');

}

if (!isLt2M) {

this.$message.error('上传头像图片大小不能超过 2MB!');

}

return isJPG && isLt2M;

}

}

}

</script>

上面是element-ui中的一个例子。我将会对其中的各个参数进行讲解。

其中的样式,我们不进行讲解,直接复制就可以。

el-upload中的参数:

action:后面是接口url,图片文件将会发送到该接口中。

:show-file-list:是否显示上传的图片列表

:on-success:上传成功后要执行的操作,“:”代表与js代码进行了绑定。

:before-upload:上传之前要执行的操作,比如检验是否是图片文件,图片的大小是否符合要求等。

  在它的一个函数中使用了URL.createObjectURL(file.raw);方法,这个地方要注意:elementUI中,自带的方法中的file,并不是指图片本身,而是他的一个dom。如果要是拿他的图片,就要用file.raw。

自定义上传方法

  通过上面的方式就可以将图片文件发送给后端,但是,这个只是基础的功能,往往我们的业务不会如此简单,比如:我们可能将商品id,等信息一同发送后端,以保证后端确定图片的作用。此时上面的方式就满足不了我们的需求了。

  为此我们需要设计自己的上传方法。于是改造过程:

1:action后面的路径改为空:action=""

2:添加属性:http-request,后面跟自定义的方法名,例如::http-request=“uploader”

3:在js中书写自定义方法“uploader”

async uploader(params){

let file = params.file;

let clothesId;

let styleId;

let imgUrl;

clothesId = this.goodsModify.goodsId;

styleId = this.goodsModify.styleId;

imgUrl = this.goodsModify.goodsImg

formData = new FormData();

formData.append('file', file);

formData.append('clothesId',clothesId);

formData.append('styleId',styleId);

formData.append('imgUrl',imgUrl);

let data = await axios.post("/Manage/upBusinessImage",formData)

},

  说明一下如果要传递的是多个参数,则必须把多个参数整理成formData的形式进行发送。而到后端则需要用@RequestParam注解标识进行接收。

后端:

需要引入的jar包:

<dependency>

<groupId>commons-io</groupId>

<artifactId>commons-io</artifactId>

<version>2.11.0</version>

</dependency>

基础文件上传

Controller层:

@RequestMapping(value = "/Manage/upBusinessImage",method = RequestMethod.POST)

public CommonResultVo uploadBusinessImage(@RequestParam(value = "file", required = false) MultipartFile file) {

return fileService.uploadImage(file,"D:/img/HeadImages/");

}

  因为只传递了文件,所以只需要一个MultipartFile类型的file接收就可以了。

server层:

//上传操作

private CommonResultVo uploadImage(MultipartFile file,String folder){

if (file == null) {

return CommonResultVoUtil.error("请选择要上传的图片");

}

if (file.getSize() > 1024 * 1024 * 10) {

return CommonResultVoUtil.error("文件大小不能大于10M");

}

//获取文件后缀

String suffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".") + 1, file.getOriginalFilename().length());

if (!"jpg,jpeg,gif,png".toUpperCase().contains(suffix.toUpperCase())) {

return CommonResultVoUtil.error("请选择jpg,jpeg,gif,png格式的图片");

}

String savePath = folder;

File savePathFile = new File(savePath);

if (!savePathFile.exists()) {

//若不存在该目录,则创建目录

savePathFile.mkdir();

}

//通过UUID生成唯一文件名

String filename = UUID.randomUUID().toString().replaceAll("-","") + "." + suffix;

try {

//将文件保存指定目录

//file.transferTo(new File(savePath + filename));

//File file1 = new File(file.getOriginalFilename());

FileUtils.copyInputStreamToFile(file.getInputStream(),new File(savePath + filename));

} catch (Exception e) {

e.printStackTrace();

return CommonResultVoUtil.error("保存文件异常");

}

//返回文件名称

return CommonResultVoUtil.successWithData(filename,1);

}

  代码里的CommonResultVoUtil是我自定义的结果工具类,大家可以根据自己的需求自己构建,也可直接返回字符串成功或者失败。

自定义的多参数接口

与上面的区别只是多使用了几个参数:

@RequestMapping(value = "/Manage/upBusinessImage",method = RequestMethod.POST)

public CommonResultVo uploadBusinessImage(@RequestParam(value = "file", required = false) MultipartFile file,

@RequestParam(value = "clothesId", required = false) String clothesId,

@RequestParam(value = "styleId", required = false) String styleId,

@RequestParam(value = "imgUrl", required = false) String imgUrl) {

return fileService.uploadBusinessImage(file,clothesId,styleId,imgUrl);

}

 

拿到这些参数后可以根据某些参数去定位数据库中的某条记录,然后将图片位置保存入数据库中,以便后续访问。

扫描二维码推送至手机访问。

版权声明:本文由西安泽虎代运营发布,如需转载请注明出处。

转载请注明出处https://www.0291.com.cn/post/44014.html

相关文章

出价建议功能操作手册 | 快手广告投放代理商

出价建议功能操作手册 | 快手广告投放代理商

一、背景 目前广告主和快手广告代理商在广告组层级出价时主要凭借优化师的投放经验和行业经验进行出价,广告主和代理商希望投放平台提供一定的出价建议以供参考。  二、产品亮点 快手广告投放平台根据广告组的设置的出价目标等条件,综合考虑历史投放情况、产品名称、二级行业等因素,经过...

一起来聊聊百度品牌起跑线是怎么回事

一起来聊聊百度品牌起跑线是怎么回事

百度品牌起跑线  - 产品介绍单页 品牌起跑线是针对中小企业主,可同时在搜索、知道、新闻页面,通过品牌/产品词触发的品牌综合体现区。客户可通过“自定义问题+品牌/产品词”完成广告定制,并获得多频道下,经过问题触发,更为精准、强势的品牌曝光。...

简要介绍之百度首页信息流广告

简要介绍之百度首页信息流广告

提起百度广告平台相信大家都不陌生,亦有许多企业主看中了这块有着海量用户的“宝地”,想要进行百度广告投放、百度广告推广。可是,在百度广告平台也是有着许多不同类型的广告样式的,它们各有侧重。今天,小编就带大家来看看百度首页信息流广告的一些相关内容。 在互联网时代,新闻阅读已经成为网民的主要需求,为...

快手竞价信息流广告的基础逻辑以及投放流程介绍!

快手竞价信息流广告的基础逻辑以及投放流程介绍!

通过前面的文章介绍,相信大家对于快手平台已经有了简单的了解,作为头部的资讯媒体,快手的受众圈层丰富,而且频道丰富,包含视频以及文字等多种,为用户获取资讯提供了便利途径,说到快手不得不提是关于快手广告投放的内容,那么现在巨宣网络为您简单介绍。 一、快手竞价信息流广告的基础逻辑 其实...

百度认证具体要怎么做?认证有什么功能?

百度认证具体要怎么做?认证有什么功能?

摘要: 百度认证代表着一个企业存在的权威性,这对于企业的发展有着积极的推进作用。企业在百度认证前需要准备一些资料,如提供营业执照,法人身份等资格认证。 百度认证有什么用?具体要怎么做?百度认证是由百度公司发起建立的一个传播搜索引擎营销知识,以及互联网商业推广产品动态的平台,它既符...

全国百度广告代理商有哪些?为什么百度推广开户要找代理商?

全国百度广告代理商有哪些?为什么百度推广开户要找代理商?

随著市场的不断扩大,各平台的崛起也会伴随着各种代理的快速发展,这让广告主们既高兴又忧愁。由于,对于缺乏网络推广经验的广告主来说,可能根本不知道百度广告代理有哪些,哪一个代理的服务和效果更好,这里给大家推荐一下巨宣网络,巨宣网络是国内百度广告专业的服务商,多年的广告运营经验,公司团队规模达到上百人!百...

现在,非常期待与您的又一次邂逅

我们努力让每一部企业宣传片和抖音短视频成为商业大片