欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Spring Boot实现图片上传功能

程序员文章站 2024-02-20 16:27:40
本文实例为大家分享了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上传下载专题》进行深入学习和研究。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。