上次的文件上传,考虑到要将图片资源和项目分离,这样对后期的项目重新部署才不会导致数据丢失。所以自己做了一个 图床 local图床 , 对于该图床,存储云用的是阿里的OSS,不允许游客上传。
这次特地与图床api接口对接,,所以特地写了一个工具类,用于对文件上传到图床的封装,并返回资源路径

在com.nunbey.lotus.utils下


类名
SaveImageToAliOSS
接口SaveImageToAliOSS

提供的方法:

构造方法:
 
public SaveImageToAliOSS(){
    //初始化三个个必须的参数
    this.httpClient = HttpClientBhuilder.create().build();
    this.httpPost = new HttpPost(url);
    this.builder = initBuilder();

}

该方法会去构建 发送Http请求的,三个对象;

CloseableHttpClient httpClient;    //发送get/post请求
   //因为上传的文件,所以使用MultipartEntityBuilder序列化参数
        //发送post请求必须的,对象,用于声明url,date

业务方法:

 
public String save(MultipartFile file)
   只需要传入file,其他 email 默认  ,pass 默认

 
public String save(MultipartFile file,String email,String pass)
   可以传入file,email,pass 三个参数,他会覆盖掉原有参数


其中 SaveImageToAliOSS 对象有很多私有成员变量:
    分为可赋值(既可以赋值,也可以获取) 和 不可赋值型(只能获取,不可以赋值)

可赋值:
    private String url = "http://tc.xiaoandcai.cn/clientupimg/";  //请求的url

    private String email = "默认邮箱账户";   //请求email参数的value
   private String emailName = "emali";            //请求email参数的key

   private String pass = "默认密码";               //请求pass参数的value
   private String passName = "pass";               //请求pass参数的key

   private MultipartFile file  = null;             //请求file的value
不可赋值:

私有方法:

/*
 * 获取初始化 MultipartEntityBuilder 对参数存储
 * @return
 */
private MultipartEntityBuilder initBuilder(){
    MultipartEntityBuilder builder = MultipartEntityBuilder.create();
    builder.setCharset(Charset.forName("utf-8"));
    builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);//加上此行代码解决返回中文乱码问题
    return builder;
}


//关闭资源 关闭   和 
private void close(){
    try {
        // 释放资源
        if (httpClient != null) {
            httpClient.close();
        }
        if (response != null) {
            response.close();
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

重设方法:
对于业务方法中的可赋值方法都可以重新赋值,实现重新赋值后,可以创建一个 SaveImageToAliOSS 就实现多个文件上传;


示例:
默认:
   控制器:controller
  
@PostMapping("/ActivityAdvanced/uploadImage")
@ResponseBody
public String uploadImage(Model model, MultipartFile file) throws IOException {
    SaveImageToAliOSS saveImageToAliOSS = new SaveImageToAliOSS();  //创建对象
    return saveImageToAliOSS.save(file);   //执行方法,并返回结果
}

前端页面:html
<form role="form" id="activity_from" action="/ActivityAdvanced/uploadImage" method="post" enctype="multipart/form-data">
    <input name="file" type="file">
    <input type="submit" value="提交">
 </form>


定制化:
    控制器:controller
@PostMapping("/ActivityAdvanced/uploadImage")
@ResponseBody
public String uploadImage(Model model, MultipartFile file) throws IOException {
    SaveImageToAliOSS saveImageToAliOSS = new SaveImageToAliOSS();    saveImageToAliOSS.setEmail("local_li@otlook.com")  //定制化参数
    return saveImageToAliOSS.save(file);
}

  



后记:
  1. 如果有什么建议,欢迎提出来