spring boot框架 最详细的上传图片,并地址保存到数据库中 适合新手

上传图片的业务

我在做毕业项目时涉及到了上传图片的业务,之前没有做过这方面的案例。所以走了很多的弯路,我现在希代码发出来希望这对刚接触代码的萌新们帮助!!!
转发说明出处
java

 @RequestMapping("/imgStr")
    public void ImgStr( MultipartFile file, Auser auser)throws IOException {
    	//我们简单验证一下file文件是否为空
        if (file.equals("")){return;}  
        Date date = new Date();
        //获取当前系统时间年月这里获取到月如果要精确到日修改("yyyy-MM-dd")
        String dateForm = new SimpleDateFormat("yyyy-MM").format(date);
         //地址合并 path.getFileimg 是存放在实体类的路径 不会写得同学可以直接写 "D:\\img" 这文件要手动创建
        String casePath = path.getFileimg()+dateForm;
        //获取图片后缀
        String imgFormat = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
        //这里我们加入了验证图片类型 这需要自己手动写 声明点这只是非常简单的验证
        //删除不影响程序运行
        /***************************************************/
        ImgRegulation regulation = new ImgRegulation(); 
        try{ boolean ifimg = regulation.VERIFY(imgFormat);
            if (false==ifimg){ return; }
        }catch (Exception e){ return; }
        /****************************************************/
        //判断文件是否存在
        /*************************************************/
        File f = new File(casePath);
        try {if (!f.exists()){f.mkdirs();}
        }catch (Exception e){ return; }
        /*************************************************/
        //给图片重新随机生成名字
        String name= UUID.randomUUID().toString()+imgFormat;
        //保存图片
        file.transferTo(new File(casePath+"\\"+name));
        //拼接要保存在数据中的图片地址
        //path.getUREIMG() 同样也是存放在实体类的字段 可以直接写 http://localhost:8080/ 
        //dateForm 这是动态的文件夹所以要和地址一起存入数据库中
        //auser 为@RequestMapping("/auser")
        String urlImg = path.getUREIMG()+"auser/show?fileUrl="+dateForm+"/"+name;
        //放入对应的字段中
        auser.setUserimg(urlImg);
        //上传数据库
        service.updateimg(auser);
    }

验证图片后缀

注意:这种验证图片安全性并不高,只能适用于练手。
java

public class ImgRegulation {

   public boolean VERIFY(String imgverify){
   		//可以随意添加图片类型 无需改代码
       String[] imgformat = {".jpg",".png",".jpeg",".pjg",".pjeg",".jfif"};
        for(String img:imgformat){
            if(img.equals(imgverify)){
                return true;
            }
        }
       return false;
   }
}

存放在实例类的地址与字段

这里省略了GET与SET.说明这样做法并没有提升代码的安全性只是为了装B!!!
java

public class Fileaddress {
  	private String fileimg = "D:\\Code\\IDEA\\itgpshool\\gpit\\src\\main\\resources\\img\\";
    private String UREIMG = "http://localhost:8080/";
}

有两种上传方式

一、使用Ajax方法提交

javascript

function butupdateimg(userid){
 if (!$("#img-input").val()){return false; }
 let formData = new FormData($("#postForm")[0]);
 formData.append("userid",userid);
   $.ajax({
          url:"http://localhost:8080/auser/imgStr",
         data:formData,
         type:"post",
         cache: false,
         processData: false,
         contentType: false,
         success:function(data) {
             toastr.success("上传成功!")            
         },
         error:function (errorThrown) {
             toastr.error("上传失败!")
         }
     })

html

<form id=postForm>
   <input type="file" class="thumbBox" name="file" id="file" accept="image/jpeg,image/png" />
    <input type="text"  name="userid" />
   <input type="button" onclick="butupdateimg()" value="提交"/>
</form>

二、直接用<form>标签上传

html

 <form action="/auser/imgStr" method="post" enctype="multipart/form-data">
   <input type="file" class="thumbBox" name="file" id="file" accept="image/jpeg,image/png" />
    <input type="text"  name="userid" />
   <input type="submit" value="提交"/>
</form>
<think>好的,用户想要了解适合新手上手学习的Spring Boot项目,而且基本不要配置后台数据库。首先,我需要理解他们的需求。可能他们刚开始学Spring Boot,对数据库配置还不太熟悉,或者想先专注于框架本身,而不是数据库操作。 接下来,我应该考虑哪些类型的项目不需要数据库。常见的可能有工具类应用,比如天气查询、翻译工具,或者简单的REST API服务,比如Todo列表,但Todo通常需要数据库,不过可以用内存集合代替。还有像文件上传下载、简单的计算器等。 然后,需要确保这些项目结构清晰,适合新手好分步骤说明,比如创建项目、添加依赖、编写Controller、运行测试。同时,要避免复杂的配置,所以可能需要使用Spring Boot的自动配置特性,比如内嵌Tomcat,不需要额外配置。 可能还要推荐几个具体的项目例子,比如REST API示例,使用内存存储;调用外部API的服务,比如天气或翻译,这样不需要自己维护数据;或者定时任务、配置文件读取等。 另外,需要提醒用户注意的点,比如虽然不用数据库,但Spring Boot的基础知识还是需要的,比如MVC模式、依赖注入。可能还要提到如何测试,使用Postman或者curl来测试API端点。 后,确保回答结构清晰,分点说明,每个项目有简介和步骤,给出示例代码。同时,检查是否需要使用中文的术语,比如“控制器”而不是“Controller”,保持一致性。还要验证LaTeX格式是否正确,虽然在这个问题中可能用不到太多数学公式,但如果有代码块,要正确标注。</think>以下是为Spring Boot新手设计的免数据库项目方案及实现步骤,采用低依赖配置+纯内存数据存储方案: 一、推荐项目类型 1. REST API计数器 ```java @RestController public class CounterController { private AtomicInteger count = new AtomicInteger(0); @GetMapping("/count") public int getCount() { return count.get(); } @PostMapping("/count") public int increment() { return count.incrementAndGet(); } } ``` 2. 在线文本处理器(基础版) ```java @RestController @RequestMapping("/text") public class TextProcessor { @PostMapping("/reverse") public String reverseText(@RequestBody String input) { return new StringBuilder(input).reverse().toString(); } @PostMapping("/stats") public Map<String, Integer> textStats(@RequestBody String input) { Map<String, Integer> stats = new HashMap<>(); stats.put("length", input.length()); stats.put("wordCount", input.split("\\s+").length); return stats; } } ``` 二、项目构建步骤(IntelliJ IDEA版) 1. 创建项目 - 使用Spring Initializr(https://start.spring.io/) - 仅需选择:Spring Web 2. 目录结构 ``` src/ ├── main/ │ ├── java/ │ │ └── com.example.demo/ │ │ ├── controller/ # 控制器目录 │ │ └── DemoApplication.java # 启动类 │ └── resources/ │ └── application.properties ``` 3. 运行测试 ```bash # 使用Maven mvn spring-boot:run # 或直接运行启动类的main方法 ``` 三、扩展训练项目 1. 时间服务API - /now 返回当前时间 - /timestamp 返回时间戳 - /format?pattern=yyyy-MM 返回自定义格式时间 2. 简易权限验证 ```java @RestController public class AuthDemo { private Map<String, String> users = Map.of( "admin", "admin123", "user", "user123" ); @PostMapping("/login") public String login(@RequestParam String username, @RequestParam String password) { return users.getOrDefault(username, "").equals(password) ? "登录成功" : "认证失败"; } } ``` 四、注意事项 1. 数据存储方案选择 - 临时数据:ConcurrentHashMap(线程安全集合) - 计数器:AtomicInteger/Long - 缓存:Caffeine(需添加依赖) 2. 开发建议 - 使用Postman进行接口测试 - 开启开发者工具(DevTools) - 学习使用@RestControllerAdvice处理异常 - 尝试Swagger UI集成API文档 这些项目能帮助新手快速掌握以下核心技能: - RESTful API开发 - HTTP方法运用(GET/POST等) - 请求参数处理 - 基础异常处理 - 接口测试方法 - Spring Boot自动配置机制 后续提升建议:当掌握基础后,可逐步添加H2内存数据库,实现数据持久化功能。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值