热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

(毕设)SSM+redis+shiro_(五)

完成了多表联查和数据插入(后面准备多表联合的更新)今天准备完成集成文件上传模块主要是实现图片上传(用户头像的上传)开始整合流程添加依赖(阿里的和七牛的一起添加了)

完成了多表联查和数据插入(后面准备 多表联合的更新)

今天准备完成集成文件上传模块

主要是实现图片上传(用户头像的上传)

开始整合流程

添加依赖(阿里的和七牛的一起添加了)

com.aliyun.oss

aliyun-sdk-oss

2.8.3

com.qiniu

qiniu-java-sdk

7.2.11

compile

com.squareup.okhttp3

okhttp

3.3.1

compile

com.google.code.gson

gson

2.6.2

compile

com.qiniu

happy-dns-java

0.1.4

compile

(编写SQL语句)

update u_user

set

head_picture = #{head_picture,jdbcType=VARCHAR}

where id = #{id,jdbcType=BIGINT}

本次使用七牛云图片存储(后面再加一个阿里云的OSS)

接下来就是核心API接口

public class QIniuUpload {

//设置好账号的ACCESS_KEY和SECRET_KEY

String ACCESS_KEY = "XXXXXX";

String SECRET_KEY = " XXXXXX ";

//要上传的空间

String bucketname = " XXXXXX ";

//上传到七牛后保存的文件名

//String key = "head_fv_.png";

//上传文件的路径

// String FilePath = "D:\\Code_Audit_360\\Windows壁纸\\星空.jpg";

private String CDN_DOMAIN_NAME =" XXXXXX ";

//上传根目录

private String IMG_UPLOAD_PATH = "";


//第二种方式: 自动识别要上传的空间(bucket)的存储区域是华东、华北、华南。

private Zone z = Zone.autoZone();

private Configuration c = new Configuration(z);


//创建上传对象

private UploadManager uploadManager = new UploadManager(c);


public String uploadImg2QiNiu(MultipartFile file) throws IOException {

//SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHH:mm:ss.SSS");

String name_file = CharacterUtils.getRandomString2(8);//随机数

String key = IMG_UPLOAD_PATH +name_file+"fv_.png";

try {

Auth auth = Auth.create(ACCESS_KEY, SECRET_KEY);

String upToken = auth.uploadToken(bucketname);

Response response = uploadManager.put(file.getInputStream(), key, upToken,null, null);

//解析上传成功的结果

DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);

return CDN_DOMAIN_NAME + putRet.key;

} catch (QiniuException e) {

Response r = e.response;

// 请求失败时打印的异常的信息

//System.out.println(r.toString());

try {

// 响应的文本信息

System.out.println(r.bodyString());

} catch (QiniuException qe) {

e.printStackTrace();

}

return "上传图片异常!";

}

}

}

control层

//文件上传

@RequestMapping(value = "upload",method=RequestMethod.POST)

@ResponseBody

public Map upload(HttpServletRequest request, MultipartFile file)throws Exception {

resultMap.put("status", 400);

if (checkSuffix(file.getOriginalFilename())) {

QIniuUpload qIniuUpload = new QIniuUpload();

String head = qIniuUpload.uploadImg2QiNiu(file);

System.out.println(head);

UUser user = new UUser(head,TokenManager.getToken().getId());

userService.upload(user);

System.out.println("gooood");

resultMap.put("message", "头像上传成功!");

resultMap.put("status", 200);

return resultMap;

}else{

resultMap.put("message", "头像上传失败,请检查图片!");

resultMap.put("status", 400);

return resultMap;

}

}

前端的UI


v2-5bb66afcf7166bc827ca9cb96b257c5b_b.jpg


开始准备测试


v2-06645faa7f587f214c70fdf30456b672_b.jpg


开始编写抛出异常()


v2-d749ba79cdb83e373474b46e263690f5_b.jpg


主要是出现问题是SQL查询read-only


v2-513e8e09015ddc108c1f68aeb0bb3621_b.jpg


Cause: java.sql.SQLException: Connection is read-only. Queries leading to data modification are not

blog.csdn.net/u01141052()

query*的配置成了read-only

最后测试成功(文件上传成功)


v2-e053fa8647a1d28d99c56d077b10fdc4_b.jpg


查看云端

查看上传的图片


v2-3dc51e194fa83b67c1cfe2fd08ba0676_b.jpg


数据库里面储存成功


v2-0964481524199b95460018815d18bce1_b.jpg


前面是整合七牛云的


---------------------------------------------------------------------------------------------------------------------------


接下来是整合(阿里云的OSS API)

开始的步骤是一样的

依赖前面已经弄过了

直接查看官方的API的文档,复写自己需要的方法

//阿里流上传

public String Aliupload(InputStream inputStream) {

String endpoint = " XXXXXX ";

String endpoint1 = " XXXXXX ";

// 云账号AccessKey有所有API访问权限,建议遵循阿里云安全最佳实践,创建并使用RAM子账号进行API访问或日常运维,请登录 ram.console.aliyun.com 创建。

String accessKeyId = " XXXXXX ";

String accessKeySecret = " XXXXXX ";

String bucketname=" XXXXXX ";

String IMG_UPLOAD_PATH = "";

String name_file = CharacterUtils.getRandomString2(8);//随机数

String key = IMG_UPLOAD_PATH +name_file+"fv_.png";


try {

OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);

/*InputStream inputStream = new FileInputStream(filePath);*/

ossClient.putObject(bucketname, key, inputStream/*new File(filePath)*/);

inputStream.close();

ossClient.shutdown();

} catch (OSSException oe) {

System.out.println("Caught an upLoad OSSException," + "the error code is " + oe.getErrorCode() + "," + "reason is " + oe.getMessage());

}catch (IOException e) {

System.out.println("File upload problem,throw a IOException");

}

return endpoint1+key;

}

还有流的转换

public class MultFileToIoFile {

private final static Logger LOGGER = LoggerFactory.getLogger(MultFileToIoFile.class);

public static InputStream multipartToInputStream(MultipartFile multipartFile){

CommonsMultipartFile cf = (CommonsMultipartFile) multipartFile;

DiskFileItem diskFileItem = (DiskFileItem) cf.getFileItem();

try{

InputStream inputStream = diskFileItem.getInputStream();

return inputStream;

}catch (IOException e){

e.printStackTrace();

LOGGER.info("文件流传输失败");

}

return null;

}

}

接下来就是control

//文件上传

@RequestMapping(value = "upload",method=RequestMethod.POST)

@ResponseBody

public Map upload(HttpServletRequest request, MultipartFile file)throws Exception {

resultMap.put("status", 400);

if (checkSuffix(file.getOriginalFilename())) {

/*QIniuUpload qIniuUpload = new QIniuUpload();

String head = qIniuUpload.uploadImg2QiNiu(file);

System.out.println(head);*/

AliUpload aliUpload =new AliUpload();

String head = aliUpload.updateFile(file);

System.out.println(head+"1111111111111111111111111111111111111111111");

UUser user = new UUser(head,TokenManager.getToken().getId());

userService.upload(user);

System.out.println("gooood");

resultMap.put("message", "头像上传成功!");

resultMap.put("status", 200);

return resultMap;

}else{

resultMap.put("message", "头像上传失败,请检查图片!");

resultMap.put("status", 400);

return resultMap;

}

}

但是中间出现一个问题

java.lang.NoClassDefFoundError: org/apache/http/ssl/TrustStrategy


v2-fa17fd8be104510c7919764e0fe452aa_b.jpg


org.apache.httpcomponents

httpclient-cache

4.4.1

org.apache.httpcomponents

httpmime

4.4.1

主要是一类httpclient的版本冲突

解决方法:

方法一:删除其他版本的httpclient,如下截图,httpclient版本除了阿里云sdk依赖的没有其他版本。

方法二:添加阿里云sdk排除httpclient依赖:


我把全部的改成httpclient-4.4.1(接下来就可以运行了)


v2-2b030f5168bfb91149d03a8efb8885e6_b.jpg


上传文件

查看阿里云的图片情况


v2-6106a9a9b864f88bb08b21ba4e066cad_b.jpg


数据里面存储的数据信息


v2-133c4498a68f33151a44dea7847eaf04_b.jpg



今天在项目中整合:图片上传功能,把阿里云和七牛云的功能全部整合到项目中去了,自己也再次熟悉了文件上传和API接口,不同的厂商对应的不同的API的接口的API使用不同


今天遇到的困难:第一个就是七牛的开始文件上传的read-only还有阿里云的httpclient的依赖冲突,最后都完美的解决了


明天的计划:继续完成其他的shiro设计还有更新数据表的实现


推荐阅读
  • 本文详细介绍了GetModuleFileName函数的用法,该函数可以用于获取当前模块所在的路径,方便进行文件操作和读取配置信息。文章通过示例代码和详细的解释,帮助读者理解和使用该函数。同时,还提供了相关的API函数声明和说明。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 本文介绍了关于apache、phpmyadmin、mysql、php、emacs、path等知识点,以及如何搭建php环境。文章提供了详细的安装步骤和所需软件列表,希望能帮助读者解决与LAMP相关的技术问题。 ... [详细]
  • 如何搭建Java开发环境并开发WinCE项目
    本文介绍了如何搭建Java开发环境并开发WinCE项目,包括搭建开发环境的步骤和获取SDK的几种方式。同时还解答了一些关于WinCE开发的常见问题。通过阅读本文,您将了解如何使用Java进行嵌入式开发,并能够顺利开发WinCE应用程序。 ... [详细]
  • intellij idea的安装与使用(保姆级教程)
    intellijidea的安装与使用(保姆级教程)IntelliJ在业界被公认为最好的java开发工具,尤其在智能代码助手、代码自动提示、重构、JavaEE支持、各类版本工具(gi ... [详细]
author-avatar
这辈子没有你
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有