首页 文章 精选 留言 我的

精选列表

搜索[开放平台],共10000篇文章
优秀的个人博客,低调大师

使用java开发阿里云OSS开放云存储服务

购买了阿里云后,我们发现一般ECS的存储空间都比较小,当然我们可以动态的扩展一些存储空间。但是作为开发者,我们在日常使用中需要一些更大的灵活性,因此就需要我们自己对OSS存储有一些自己的扩展。今天就为大家分享一下如何使用java来对接阿里云的OSS存储服务。 OSS产品概述 阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存储服务。您可以通过调用 API,在任何应用、任何时间、任何地点上传和下载数据,也可以通过 Web 控制台对数据进行简单的管理。OSS 适合存放任意类型的文件,适合各种网站、开发企业及开发者使用。 开通阿里云OSS服务 首先要登录阿里云官网,然后选择产品——>存储于CDN——>对象存储 OSS。如下图: 然后我们可以根据自己的情况进行开通。开通完成后,我们就可以进入OSS控制台了。 OSS 控制台 OSS控制台布局包括bucket列表,bucket所在地域,创建时间和对于bucket操作。bucket这个概念用比较通俗的说法,就是用户创建的顶层目录,所有用户上传的文件都必须存在bucket下面,而且bucket在OSS系统中是不能重名的。如果已经有一个用户创建了bucket名称叫abc,那么很遗憾,您就不能创建一个名称叫abc的bucket了,每个用户可以创建10个bucket。注意红圈标注的ACCESSKEY管理按钮,点击后可以进行ACCESSKEY管理界面。 进入后点击显示,可以看到秘钥,AccesskeyId&AccessKeySecret 的使用方法请见OSS API文档点击具体bucket,进入bucket 管理功能,包括bucket属性设置、object管理等。 创建Bucket 如果你还没有创建bucket,点击新建bucket。 进入新建Bucket页面,并填写Bucket信息 填写Bucket名称,选择所属地域,设置读写权限。 在填写完bucket信息后点击提交,创建bucket。 上传文件 点击红圈标注的上传文件,会弹出文件框列表,选择需要上传的文件进行上传。 分享文件 点击对应文件的获取地址,会弹出一个object 地址信息,其中地址链接可以是在公网访问到的。别人点击这个链接就可以下载到这个文件了,但是亲这可是要注意会产生流量费用的。 注意:如你的OSS Bucket未绑定域名,则你访问文件链接后默认为下载该文件,而不能直接浏览该文件。 java开发OSS存储服务 开通OSS服务器后,会有endpoint,跟地址;accessKeyId,类似用户名;accessKeySecret,类似密码;buketName:第一层文件夹的名字,一个用户可以创建十个bucketName,类似于我们的C,D,E,F盘符;accessUrl,很明显用户可以通过浏览器访问的地址。例如我们上传一个html文件,我们就可以通过"accessUrl/bucketName/目录/文件名.html,来进行访问。我在这里负责一个是页面静态化的功能,将动态的JSP页面生成静态的html页面,然后上传的OSS服务器,返回地址,让用户直接访问静态页面,这样就大大加快访问的速度。 OSS信息实体类,OSSConfigure.Java: import java.io.IOException; import java.util.Properties; public class OSSConfigure { private String endpoint; private String accessKeyId; private String accessKeySecret; private String bucketName; private String accessUrl; public OSSConfigure() { } /** * 通过配置文件.properties文件获取,这几项内容。 * @param storageConfName * @throws IOException */ public OSSConfigure(String storageConfName) throws IOException { Properties prop = new Properties(); prop.load(this.getClass().getClassLoader() .getResourceAsStream("conf/" + storageConfName)); endpoint = prop.getProperty("endpoint").trim(); accessKeyId = prop.getProperty("accessKeyId").trim(); accessKeySecret = prop.getProperty("accessKeySecret").trim(); bucketName = prop.getProperty("bucketName").trim(); accessUrl = prop.getProperty("accessUrl").trim(); } public OSSConfigure(String endpoint, String accessKeyId, String accessKeySecret, String bucketName, String accessUrl) { this.endpoint = endpoint; this.accessKeyId = accessKeyId; this.accessKeySecret = accessKeySecret; this.bucketName = bucketName; this.accessUrl = accessUrl; } public String getEndpoint() { return endpoint; } public void setEndpoint(String endpoint) { this.endpoint = endpoint; } public String getAccessKeyId() { return accessKeyId; } public void setAccessKeyId(String accessKeyId) { this.accessKeyId = accessKeyId; } public String getAccessKeySecret() { return accessKeySecret; } public void setAccessKeySecret(String accessKeySecret) { this.accessKeySecret = accessKeySecret; } public String getBucketName() { return bucketName; } public void setBucketName(String bucketName) { this.bucketName = bucketName; } public String getAccessUrl() { return accessUrl; } public void setAccessUrl(String accessUrl) { this.accessUrl = accessUrl; } }然后再创建一个工具类,这里需要提出的OSS服务器,上所有的都是对象,没有文件夹的概念,上传文件,直接写好路劲,他会自动创建。这里有一个入口OSSClient,很多方法都是通过它来实现的。 import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.InputStream; import org.springframework.web.multipart.MultipartFile; import com.aliyun.oss.OSSClient; import com.aliyun.oss.model.ObjectListing; import com.aliyun.oss.model.ObjectMetadata; /** * 对OSS服务器进行上传删除等的处理 * */ public class OSSManageUtil { /** * 上传OSS服务器文件 * @Title: uploadFile * @Description: * @param @param ossConfigure * @param @param file * @param @param remotePath * @param @return * @param @throws Exception 设定文件 * @return String 返回类型 * @throws */ public static String uploadFile(OSSConfigure ossConfigure,File file,String remotePath) throws Exception{ InputStream fileContent=null; fileContent=new FileInputStream(file); OSSClient ossClient=new OSSClient(ossConfigure.getEndpoint(), ossConfigure.getAccessKeyId(), ossConfigure.getAccessKeySecret()); String remoteFilePath = remotePath.substring(0, remotePath.length()).replaceAll("\\\\","/")+"/"; //创建上传Object的Metadata ObjectMetadata objectMetadata=new ObjectMetadata(); objectMetadata.setContentLength(fileContent.available()); objectMetadata.setCacheControl("no-cache"); objectMetadata.setHeader("Pragma", "no-cache"); objectMetadata.setContentType(contentType(file.getName().substring(file.getName().lastIndexOf(".")))); objectMetadata.setContentDisposition("inline;filename=" + file.getName()); //上传文件 ossClient.putObject(ossConfigure.getBucketName(), remoteFilePath + file.getName(), fileContent, objectMetadata); System.out.println(ossConfigure.getAccessUrl()+"/" +remoteFilePath + file.getName()); return ossConfigure.getAccessUrl()+"/" +remoteFilePath + file.getName(); } /** * 根据key删除OSS服务器上的文件 * @Title: deleteFile * @Description: * @param @param ossConfigure * @param @param filePath 设定文件 * @return void 返回类型 * @throws */ public static void deleteFile(OSSConfigure ossConfigure,String filePath){ OSSClient ossClient = new OSSClient(ossConfigure.getEndpoint(),ossConfigure.getAccessKeyId(), ossConfigure.getAccessKeySecret()); ossClient.deleteObject(ossConfigure.getBucketName(), filePath); } /** * Description: 判断OSS服务文件上传时文件的contentType * @Version1.0 * @param FilenameExtension 文件后缀 * @return String */ public static String contentType(String FilenameExtension){ if(FilenameExtension.equals("BMP")||FilenameExtension.equals("bmp")){return "image/bmp";} if(FilenameExtension.equals("GIF")||FilenameExtension.equals("gif")){return "image/gif";} if(FilenameExtension.equals("JPEG")||FilenameExtension.equals("jpeg")|| FilenameExtension.equals("JPG")||FilenameExtension.equals("jpg")|| FilenameExtension.equals("PNG")||FilenameExtension.equals("png")){return "image/jpeg";} if(FilenameExtension.equals("HTML")||FilenameExtension.equals("html")){return "text/html";} if(FilenameExtension.equals("TXT")||FilenameExtension.equals("txt")){return "text/plain";} if(FilenameExtension.equals("VSD")||FilenameExtension.equals("vsd")){return "application/vnd.visio";} if(FilenameExtension.equals("PPTX")||FilenameExtension.equals("pptx")|| FilenameExtension.equals("PPT")||FilenameExtension.equals("ppt")){return "application/vnd.ms-powerpoint";} if(FilenameExtension.equals("DOCX")||FilenameExtension.equals("docx")|| FilenameExtension.equals("DOC")||FilenameExtension.equals("doc")){return "application/msword";} if(FilenameExtension.equals("XML")||FilenameExtension.equals("xml")){return "text/xml";} return "text/html"; } }好了,到这里OSS的简单开发就已经完成了。由于时间关系,我这里就写到这里,万事开头难,你对OSS有了简单的认识后。官网剩下的一堆api对你来说都是小菜。下面我在说一下在使用过程中遇到的问题和解决方案。 使用OSS存储服务遇到的问题和解决方案 ECS服务器被清洗当服务器流量达到用户云盾设置的清洗阈值时,会自动进入流量清洗。 请注意,由于安全策略无法做到100%识别请求是否恶意,所以服务器被清洗后可能会有低概率的误杀存在,但绝大部分情况下正常请求不会受到影响,如果怀疑有误杀可提交工单由售后支持协助判断。 不同帐号下ECS服务器内网不通默认情况下,不同帐号下的服务器内网是不通的。如果用户同时有多个帐号,并且多个帐号下都有服务器,那么这些服务器内网是不通的。如果需要不同帐号下内网互通,需要提交工单联系售后,阿里云售后工程师会协助打通内网。 请注意,需要内网打通的不同的帐号需要全部提交工单,说明哪些IP和哪些IP进行内网互通,或者帐号下所有服务器内网互通。并且在每一个工单中,都把已经提交的内网互通的工单号列出来(自身的工单号除外),以便阿里云售后工程师进行安全验证。 OSS内存泄漏 如果你遇到OSS内存泄漏问题,首先检查检查你的代码,肯定是某些该关闭IO流没有关闭。如果不能及时解决,可以提交工单,联系客服。 oss的callback返回的数据格式非JSON格式 可能是应用服务器处理过程中抛了异常,导致没有按照预期返回给OSS,而是返回了一些栈信息等,就可能会导致非JSON格式的数据产生。 OSS 返回的状态不为200400或者其他的status比如404/403等是指应用服务器返回给oss的http是400或者404/403等,正常情况下应用服务器必须返回200给OSS。502是由于应用服务器根本就没有起web服务,没有监听OSS发过来的回调请求。

优秀的个人博客,低调大师

MaxCompute 2.0 生态开放之路及最新发展

文章转自yizhuo MaxCompute(原ODPS)是阿里云自主研发的分布式大数据处理系统。长久以来,这套阿里自研的系统为阿里内部服务,有自己的类型系统,配套工具以及 SDK 和编程接口。但是随着公共领域对 MaxCompute 的需求越来越强烈,我们也在尽自己所能,使 MaxCompute 能够兼容现有生态,提高使用体验以及最重要的,保护用户投资。 用户接口层的基本简介 首先整体介绍一下 MaxCompute 的用户接口层。 MaxCompute 从研发的第一天起就被设计统一由 Restful API 提供服务。在 Restful API 之上,我们各种语言的 SDK。由 SDK 编写形成的各种工具、驱动等等构成了 MaxCompute 的用户接口层,即外围生态。 协议兼容:JDBC 和 Hive Proxy JDBC 是 MaxCo

优秀的个人博客,低调大师

高频支持,即时解疑:华为应用市场电话沟通服务开放

近日,华为应用市场面向开发者推出“电话沟通服务”,旨在通过官方客服团队支持为开发者搭建起即时响应的沟通桥梁,帮助开发者更清晰地理解应用审核政策,提升应用上架效率。开发者可以通过“应用推广引擎-联系我们”进行服务预约。 这项服务为开发者建立了高效的专属咨询通道,开发者登记电话号码后,客服团队通常将在30分钟内完成回拨,可针对发布前预审咨询、审核进度查询、应用驳回处理等具体问题提供解答,帮助开发者快速定位问题、明确审核规则、优化上架方案。 电话沟通服务的核心优势在于“快速响应”与“高频支持”的双重保障。无需长时间等待预约,开发者即可获得官方指导,大幅缩短问题解决周期。同时,为保障复杂问题的完整闭环,同一开发者每小时可提交5次申请,确保问题能够得到充分沟通与解决。 除了电话沟通服务外,开发者还可通过互动中心渠道进行问题反馈,客服团队将在1个工作日内给予回复。 未来,华为应用市场将为开发者提供更多高效、贴心的服务体验。让开发者在应用开发与上架的过程中获得更及时、更精准的支持,助力开发者创新之路更加顺畅。

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册