java实现前端+后端上传图片并回显(ssm or springboot)

效果:第一步的图片回显,点击保存才是上传

在这里插入图片描述

1、需要两个jar包

保证你ssm环境可以运行的jar包之外还需要加入如下的两个jar包,commons-fileupload-1.3.jar、commons-io-1.2.jar

<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
		<dependency>
		    <groupId>commons-fileupload</groupId>
		    <artifactId>commons-fileupload</artifactId>
		    <version>1.3</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
		<dependency>
		    <groupId>commons-io</groupId>
		    <artifactId>commons-io</artifactId>
		    <version>1.2</version>
		</dependency>

2、在配置文件applicationContext.xml加上以下配置

<!-- 定义文件解释器(文件上传) -->    
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">      
    <!-- 设置默认编码 -->    
    <property name="defaultEncoding" value="utf-8"></property>    
    <!-- 上传图片最大大小1M-->     
    <property name="maxUploadSize" value="1048576"></property>      
</bean> 

springboot的话,你只需要定义一个bean即可

@Configuration
public class MyConfig{
@Bean
public CommonsMultipartResolver multipartResolver(){
CommonsMultipartResolver commonsMultipartResolver = new CommonsMultipartResolver();
commonsMultipartResolver.setDefaultEncoding(“utf-8”);
commonsMultipartResolver.setMaxUploadSize(1048576);
return commonsMultipartResolver;
}
}

3、首先看前端代码:

src里面的内容是我的用户的头像的url

<div>
            <p>(点击头像开始选择新头像)</p><br>
            <p >
                <img class="user-header" style="width: 100px;height: 100px;object-fit: cover;" src="${imgUser.data.userProfilePhoto}">
            </p>
            <br>
            <form id="test">
            <input type="file" name=file onchange="imgChange(event)" id="file" style="display: none"/>
            </form>        
            <button data-role="none" onclick="testUpload();" class="btn btn-info">保存头像</button>  
        </div>

4、这里的两个js方法可以实现将你要上传的图片先回显

function imgChange(e) {
        console.info(e.target.files[0]);//图片文件
        console.log(e.target.value);//这个也是文件的路径和上面的dom.value是一样的
        var reader = new FileReader();
        reader.onload = (function (file) {
            return function (e) {
                $('.user-header').attr('src',this.result);
            };
        })(e.target.files[0]);
        reader.readAsDataURL(e.target.files[0]);
    }
    
    $('.user-header').click(function () {
        $("#file").click();
    });

5、这个js方法实现将图片信息发送到后台:

我因为要更新用户的头像,所以将用户id一起传过去

    function testUpload(){
 	var form = new FormData();
 	form.append('id',${imgUser.data.userId});
	form.append('file',$("#file")[0].files[0]);
 	$.ajax({
 	url:"/u/img",
 	data:form,
 	type:"POST",
 	processData:false,  
    contentType:false,  
    success : function(result){  
        if(result.status==200){
        	alert("成功") 
        }else{
        	alert(result.msg);
        } 
    }, 
 	});
 }

6、后台代码

@PostMapping("/u/img")
	@ResponseBody
	 public E3Result test(MultipartFile file,HttpServletRequest request,long id) throws IOException{  
        String path = request.getSession().getServletContext().getRealPath("/images");  
        System.out.println("路径:"+path);  
  
        String fileName = file.getOriginalFilename();  
        System.out.println("文件名称"+fileName);  
          
        File dir = new File(path, fileName);  
        System.out.println("判断目录是否存在:"+dir.exists());  
        if(!dir.exists()){  
            dir.mkdirs();  
        }  
//      MultipartFile自带的解析方法  
        file.transferTo(dir);  
        
        //这里我在拼接出我图片要显示的url
        String imageurl = "http://localhost:8089/images/"+fileName;
        //将数据库中信息更新
        BUsers bUser = new BUsers();
        bUser.setUserId(id);
        bUser.setUserProfilePhoto(imageurl);
        E3Result result = getUserInfoService.updateUser(bUser);
        //返回结果
        return result;
    }  

7、测试完成

图片在你的tomcat 的webapps下的images目录里面

  • 17
    点赞
  • 102
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
后端代码实现: 1.引入相关依赖 ```xml <!-- 文件上传 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.4</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.6</version> </dependency> ``` 2.配置文件上传相关信息 ```yaml # 文件上传限制 spring.servlet.multipart.max-file-size=10MB spring.servlet.multipart.max-request-size=10MB spring.servlet.multipart.enabled=true ``` 3.编写文件上传接口 ```java @RestController @RequestMapping("/api/file") public class FileController { @PostMapping("/upload") public String upload(@RequestParam("file") MultipartFile file) throws IOException { if (file.isEmpty()) { return "文件为空"; } String fileName = file.getOriginalFilename(); String filePath = "D:\\temp\\"; File dest = new File(filePath + fileName); file.transferTo(dest); return "上传成功"; } } ``` 前端代码实现: 1.安装 axios 和 element-ui ```bash npm install axios element-ui --save ``` 2.编写文件上传组件 ```vue <template> <div> <el-upload class="upload-demo" action="/api/file/upload" :auto-upload="false" :on-change="handleChange" > <el-button slot="trigger" type="primary">选取文件</el-button> <el-button v-if="imageUrl" type="success" @click="handleUpload">上传到服务器</el-button> <div class="el-upload__tip" slot="tip">只能上传jpg/png文件,且不超过10MB</div> </el-upload> <img v-if="imageUrl" :src="imageUrl" style="max-width: 100%;"> </div> </template> <script> import axios from 'axios'; import { Message } from 'element-ui'; export default { data() { return { imageUrl: '', file: null, }; }, methods: { handleChange(file) { this.file = file.raw; this.imageUrl = URL.createObjectURL(this.file); }, handleUpload() { const formData = new FormData(); formData.append('file', this.file); axios.post('/api/file/upload', formData, { headers: { 'Content-Type': 'multipart/form-data', }, }).then(() => { Message.success('上传成功'); }).catch(() => { Message.error('上传失败'); }); }, }, }; </script> ``` 至此,图片上传回显代码实现就完成了。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值