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

微信上传的附件同步到阿里云(小记)

同步的方法:publicstaticfinalStringPHOTO_FOLDER_PATHD:homewxphoto;privatestaticStringREQUEST_MED

同步的方法:
public static final String PHOTO_FOLDER_PATH = "D:/home/wxphoto/";
private static String REQUEST_MEDIA_URL =
"http://file.api.weixin.qq.com/cgi-bin/media/get?access_token=%s&media_id=%s";
AttachmentPojo attachmentPojo = new AttachmentPojo();
//同步微信和阿里云
String accessToken = HttpClientUtils.getStaticString(
domainConfig.getAuthDomain() + "/wechat/getAccessToken.html");
JSONObject rstJson = JSONObject.fromObject(accessToken);
if (rstJson != null) {
accessToken = rstJson.getString("respResult");
String strImgUrl = String.format(REQUEST_MEDIA_URL, accessToken, serverId);
String filePath = PHOTO_FOLDER_PATH + System.currentTimeMillis() + ".jpg";
dwnWxPhotoBeforeSave(attachmentPojo, serverId, strImgUrl, filePath);
}

/**
* 微信图片添加前就同步阿里云
*
* @param vo
* @param serverId
* @param imgUrl
* @param filePath
*/
private void dwnWxPhotoBeforeSave(AttachmentPojo vo, String serverId, String imgUrl, String filePath) {
byte[] data = HttpClientUtils.getBytes(imgUrl);
if (data != null) {
FileOutputStream fos = null;
try {
fos = new FileOutputStream(filePath);
fos.write(data);
} catch (Exception e) {
LOGGER.error("下载微信图片{serverId:" + serverId + "}失败", e);
} finally {
if (fos != null) {
try {
fos.close();
} catch (IOException e) {
LOGGER.error("关闭文件流失败", e);
}
}
}
}
// 图片上传至oss服务器
  //此处可参考上一篇博文取配置的路径
File file = new File(filePath);
String uploadName = FileUtils.uploadFile(data, pathConfig.getFilepath(), file.getName());
  //修改本地数据库操作
this.modifyAttachVo(vo, file, uploadName, serverId);
}

//上传到阿里服务器

//此处可参考上一篇博文取配置的路径

public static String uploadFile(byte[] data, String filepath, String fileName) {
try {
String path = getAliPath(filepath, fileName);
AliUploadUtils.uploadToAliOss(path, data);
path = AliUploadUtils.aliOssPath + "/" + path;
return path;
} catch (RuntimeException e1) {
throw e1;
} catch (Exception e) {
throw new RuntimeException("文件上传 系统异常");
}
}

/**
* 上传文件到阿里云
* 此处可参考上一篇博文取配置的路径
* @param byte 文件流
* @param path 上传路径
* @return
*/
public static Boolean uploadToAliOss(String path, byte[] data) {
try {
// endpoint以杭州为例,其它region请按实际情况填写
String endpoint = AliUploadUtils.endpoint;
// 云账号AccessKey有所有API访问权限,建议遵循阿里云安全最佳实践,创建并使用RAM子账号进行API访问或日常运维,请登录
// https://ram.console.aliyun.com 创建
String accessKeyId = AliUploadUtils.accessKeyId;
String accessKeySecret = AliUploadUtils.accessKeySecret;
// 创建OSSClient实例
OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
// 上传文件
ossClient.putObject(AliUploadUtils.bucketName, path, new ByteArrayInputStream(data));
// 关闭client
ossClient.shutdown();
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}

推荐阅读
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
  • Python实现变声器功能(萝莉音御姐音)的方法及步骤
    本文介绍了使用Python实现变声器功能(萝莉音御姐音)的方法及步骤。首先登录百度AL开发平台,选择语音合成,创建应用并填写应用信息,获取Appid、API Key和Secret Key。然后安装pythonsdk,可以通过pip install baidu-aip或python setup.py install进行安装。最后,书写代码实现变声器功能,使用AipSpeech库进行语音合成,可以设置音量等参数。 ... [详细]
  • 20211101CleverTap参与度和分析工具功能平台学习/实践
    1.应用场景主要用于学习CleverTap的使用,该平台主要用于客户保留与参与平台.为客户提供价值.这里接触到的原因,是目前公司用到该平台的服务~2.学习操作 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • 本文探讨了C语言中指针的应用与价值,指针在C语言中具有灵活性和可变性,通过指针可以操作系统内存和控制外部I/O端口。文章介绍了指针变量和指针的指向变量的含义和用法,以及判断变量数据类型和指向变量或成员变量的类型的方法。还讨论了指针访问数组元素和下标法数组元素的等价关系,以及指针作为函数参数可以改变主调函数变量的值的特点。此外,文章还提到了指针在动态存储分配、链表创建和相关操作中的应用,以及类成员指针与外部变量的区分方法。通过本文的阐述,读者可以更好地理解和应用C语言中的指针。 ... [详细]
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社区 版权所有