Spring Boot实现图片上传功能
程序员文章站
2023-12-22 16:15:58
本文实例为大家分享了spring boot图片上传的具体代码,供大家参考,具体内容如下
package com.clou.inteface.domain.web....
本文实例为大家分享了spring boot图片上传的具体代码,供大家参考,具体内容如下
package com.clou.inteface.domain.web.user; import java.io.file; import java.io.ioexception; import java.util.hashmap; import java.util.map; import org.apache.commons.lang3.stringutils; import org.springframework.beans.factory.annotation.autowired; import org.springframework.beans.factory.annotation.value; import org.springframework.http.mediatype; import org.springframework.web.bind.annotation.postmapping; import org.springframework.web.bind.annotation.requestparam; import org.springframework.web.bind.annotation.restcontroller; import org.springframework.web.multipart.multipartfile; /** * 文件上传 * @author fly * */ @restcontroller public class fileupload { /** * 用户管理 -> 业务层 */ @autowired private suserservice suserservice; /** * 文件上传根目录(在spring的application.yml的配置文件中配置):<br> * web: * upload-path: (jar包所在目录)/resources/static/ */ @value("${web.upload-path}") private string webuploadpath; /** * resultvo是一个对象,包含: * private int errorcode; * private string errormsg; * private integer total; * private object data; */ /** * 基于用户标识的头像上传 * @param file 图片 * @param userid 用户标识 * @return */ @postmapping(value = "/fileupload", consumes = mediatype.multipart_form_data_value, produces = mediatype.application_json_value) public resultvo fileupload(@requestparam("file") multipartfile file, @requestparam("userid") integer userid) { resultvo resultvo = new resultvo(); if (!file.isempty()) { if (file.getcontenttype().contains("image")) { try { string temp = "images" + file.separator + "upload" + file.separator; // 获取图片的文件名 string filename = file.getoriginalfilename(); // 获取图片的扩展名 string extensionname = stringutils.substringafter(filename, "."); // 新的图片文件名 = 获取时间戳+"."图片扩展名 string newfilename = string.valueof(system.currenttimemillis()) + "." + extensionname; // 数据库保存的目录 string datddirectory = temp.concat(string.valueof(userid)).concat(file.separator); // 文件路径 string filepath = webuploadpath.concat(datddirectory); file dest = new file(filepath, newfilename); if (!dest.getparentfile().exists()) { dest.getparentfile().mkdirs(); } // 判断是否有旧头像,如果有就先删除旧头像,再上传 suser userinfo = suserservice.finduserinfo(userid.tostring()); if (stringutils.isnotblank(userinfo.getuserhead())) { string oldfilepath = webuploadpath.concat(userinfo.getuserhead()); file oldfile = new file(oldfilepath); if (oldfile.exists()) { oldfile.delete(); } } // 上传到指定目录 file.transferto(dest); // 将图片流转换进行base64加码 //base64encoder encoder = new base64encoder(); //string data = encoder.encode(file.getbytes()); // 将反斜杠转换为正斜杠 string data = datddirectory.replaceall("\\\\", "/") + newfilename; map<string, object> resultmap = new hashmap<>(); resultmap.put("file", data); resultvo.setdata(resultmap); resultvo.seterror(1, "上传成功!"); } catch (ioexception e) { resultvo.seterror(0, "上传失败!"); } } else { resultvo.seterror(0, "上传的文件不是图片类型,请重新上传!"); } return resultvo; } else { resultvo.seterror(0, "上传失败,请选择要上传的图片!"); return resultvo; } } }
以上代码需配置suserservice,一个业务层接口;
一个resultvo对象,属性已给出;
一个基于spring boot的 .yml配置文件的配置。
访问图片的时候,需要配置.yml文件
spring:
#配置http访问服务器图片的路径
resources:
static-locations: classpath:/meta-inf/resources/,classpath:/resources/,classpath:/static/,classpath:/public/,file:${web.upload-path}
然后基于服务的ip与端口,http//ip:port/resources/static/图片路径(图片名)
更多精彩内容,请点击 《spring上传下载专题》进行深入学习和研究。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
推荐阅读