springboot+layui上传图片保存到服务器

最近给学校做了一个捐赠平台的项目,里面用到了上传图片保存到服务器的需求,在这里记录一下

项目使用了springboot + layui

html

<div class="layui-form-item magt3">
					<label class="layui-form-label" style="float: left">项目图片</label>
					<div class="layui-upload">
						<button type="button" class="layui-btn" id="test1">上传图片</button>
						<div class="layui-upload-list">
							<img class="layui-upload-img" id="demo1">
							<p id="demoText"></p>
						</div>
					</div>
				</div>

js

 //普通图片上传
    var uploadInst = upload.render({
        elem: '#test1'
        , url: '/project/projectPictureUpload'
        ,method:'post'
        ,accept:'images'
        ,acceptMime:'image/*'
        ,field:'projectImg'
        ,choose: function (obj) {
            //预读本地文件示例,不支持ie8
            // obj.preview(function (index, file, result) {
            //     //图片预览
            //     $('#demo1').attr('src', result); //图片链接(base64)
            // });
        }
        ,done: function (res) {
            //如果上传失败
            if (res.code == 250) {
                return layer.msg('上传项目图片失败',{icon: 5});
            }
            //上传成功,获得图片地址
            $('#demo1').attr('src', res.data);
        }
        ,error: function () {
            //演示失败状态,并实现重传
            var demoText = $('#demoText');
            demoText.html('<span style="color: #FF5722;">上传失败</span> <a class="layui-btn layui-btn-xs demo-reload">重试</a>');
            demoText.find('.demo-reload').on('click', function () {
                uploadInst.upload();
            });
        }
    });

由于项目是异步提交图片,当确认图片后就会立即上传,服务器会返回图片地址,需要将图片地址和
项目其他信息一起保存在数据库,使用以下js可以获得到图片的地址

$('#demo1')[0].src                    //图片地址

controller

@PostMapping("/projectPictureUpload")
    @ResponseBody
    public Result projectPictureUpload(@RequestParam(value = "projectImg",required = true)MultipartFile file){
        //将图片上传到服务器
        if(file.isEmpty()){
            return Result.error(ResultCodeConstants.UPLOAD_FAIL,"项目图片不能为空");
        }
        //原始文件名
        String originalFilename = file.getOriginalFilename();
        //文件后缀
        String suffix = originalFilename.substring(originalFilename.lastIndexOf(".") + 1);
        //图片名称为uuid+图片后缀防止冲突
        String fileName = UUID.randomUUID().toString()+"."+suffix;
        String os = System.getProperty("os.name");
        //文件保存路径
        String filePath="";
        if(os.toLowerCase().startsWith("win")){
            //windows下的路径
            filePath ="d:/pictureUpload/project/";
        }else {
            //linux下的路径
            filePath="/root/pictureUpload/project/";
        }
        try {
            //写入图片
            Boolean writePictureflag = FileUtils.uploadFile(file.getBytes(),filePath,fileName);
            if(writePictureflag == false){
                //上传图片失败
                return Result.error(ResultCodeConstants.UPLOAD_FAIL,"上传项目图片失败");
            }
            //上传成功后,将可以访问的完整路径返回
            String fullImgpath = "/pictureUpload/project/"+fileName;
            return Result.ok(fullImgpath,"上传图片成功");
        } catch (Exception e) {
            e.printStackTrace();
            //上传图片失败
            return Result.error(ResultCodeConstants.UPLOAD_FAIL,"上传项目图片失败");
        }
    }

工具类

package com.iot.donation.util;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * @Author 张满
 * @Description  文件操作相关工具类
 * @Date 2019/7/31 15:46
 * @vsersion 1.0.0
 **/
public class FileUtils {


    /**
     * @Author 张满
     * @Description 文件上传
     * @Date 2019/7/31  15:48
     * @Param [file, filePath, fileName]
     * @return void
     **/
    public static Boolean uploadFile(byte[] file, String filePath, String fileName) throws Exception {
        FileOutputStream out = null;
        try {
            File targetFile = new File(filePath);
            //如果目录不存在,创建目录
            if(!targetFile.exists()){
                targetFile.mkdirs();
            }
            out = new FileOutputStream(filePath+fileName);
            out.write(file);
            out.flush();
            //写入成功
            return true;
        } catch (IOException e) {
            e.printStackTrace();
            //写入失败
            return false;
        } finally {
            out.close();
        }
    }

}

springboot配置静态资源访问

package com.iot.donation.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;

@Configuration
public class MyWebMvcConfig extends WebMvcConfigurationSupport {

    /**
     * 解决springboot2.0静态资源无法直接访问问题
     * @param registry
     */
    @Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {


        registry.addResourceHandler("/**").addResourceLocations("classpath:/static/");

        String os = System.getProperty("os.name");
        System.out.println(os);
        if(os.toLowerCase().startsWith("win")){
            //--------------------------------------windows下保存路径-------------------------------------------------------------
            //项目图片访问路径
            registry.addResourceHandler("/pictureUpload/project/**").addResourceLocations("file:D:/pictureUpload/project/");
        }else{
            //--------------------------------------linux下保存路径---------------------------------------------------------------------------------
            //项目图片访问路径
            registry.addResourceHandler("/pictureUpload/project/**").addResourceLocations("file:/root/pictureUpload/project/");
        }
        super.addResourceHandlers(registry);
    }




}

效果图

后台效果

在这里插入图片描述

首页效果

在这里插入图片描述

由于后台没有给图片大小,长宽高的限制,所以首页图片显示时只取了一部分,留着以后改进一下

  • 2
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值