• 关于

    git服务器端增加用户

    的搜索结果

回答

Spring Cloud 学习笔记(一)——入门、特征、配置 0 放在前面 0.1 参考文档 http://cloud.spring.io/spring-cloud-static/Brixton.SR7/ https://springcloud.cc/ http://projects.spring.io/spring-cloud/ 0.2 maven配置 org.springframework.boot spring-boot-starter-parent 1.5.2.RELEASE org.springframework.cloud spring-cloud-dependencies Dalston.RELEASE pom import org.springframework.cloud spring-cloud-starter-config org.springframework.cloud spring-cloud-starter-eureka 0.3 简介 Spring Cloud为开发人员提供了快速构建分布式系统中的一些通用模式(例如配置管理,服务发现,断路器,智能路由,微代理,控制总线,一次性令牌,全局锁,领导选举,分布式 会话,群集状态)。 分布式系统的协调引出样板模式(boiler plate patterns),并且使用Spring Cloud开发人员可以快速地实现这些模式来启动服务和应用程序。 它们可以在任何分布式环境中正常工作,包括开发人员自己的笔记本电脑,裸机数据中心和受管平台,如Cloud Foundry。 Version: Brixton.SR7 1 特征 Spring Cloud专注于为经典用例和扩展机制提供良好的开箱即用 分布式/版本配置 服务注册与发现 路由选择 服务调用 负载均衡 熔断机制 全局锁 领导人选举和集群状态 分布式消息 2 原生云应用程序 原生云是应用程序开发的一种风格,鼓励在持续交付和价值驱动领域的最佳实践。 Spring Cloud的很多特性是基于Spring Boot的。更多的是由两个库实现:Spring Cloud Context and Spring Cloud Commons。 2.1 Spring Cloud Context: 应用上下文服务 Spring Boot关于使用Spring构建应用有硬性规定:通用的配置文件在固定的位置,通用管理终端,监控任务。建立在这个基础上,Spring Cloud增加了一些额外的特性。 2.1.1 引导应用程序上下文 Spring Cloud会创建一个“bootstrap”的上下文,这是主应用程序的父上下文。对应的配置文件拥有最高优先级,并且,默认不能被本地配置文件覆盖。对应的文件名bootstrap.yml或bootstrap.properties。 可通过设置spring.cloud.bootstrap.enabled=false来禁止bootstrap进程。 2.1.2 应用上下文层级结构 当用SpringApplication或SpringApplicationBuilder创建应用程序上下文时,bootstrap上下文将作为父上下文被添加进去,子上下文将继承父上下文的属性。 子上下文的配置信息可覆盖父上下文的配置信息。 2.1.3 修改Bootstrap配置文件位置 spring.cloud.bootstrap.name(默认是bootstrap),或者spring.cloud.bootstrap.location(默认是空) 2.1.4 覆盖远程配置文件的值 spring.cloud.config.allowOverride=true spring.cloud.config.overrideNone=true spring.cloud.config.overrideSystemProperties=false 2.1.5 定制Bootstrap配置 在/META-INF/spring.factories的key为org.springframework.cloud.bootstrap.BootstrapConfiguration,定义了Bootstrap启动的组件。 在主应用程序启动之前,一开始Bootstrap上下文创建在spring.factories文件中的组件,然后是@Beans类型的bean。 2.1.6 定制Bootstrap属性来源 关键点:spring.factories、PropertySourceLocator 2.1.7 环境改变 应用程序可通过EnvironmentChangedEvent监听应用程序并做出响应。 2.1.8 Refresh Scope Spring的bean被@RefreshScope将做特殊处理,可用于刷新bean的配置信息。 注意 需要添加依赖“org.springframework.boot.spring-boot-starter-actuator” 目前我只在@Controller测试成功 需要自己发送POST请求/refresh 修改配置文件即可 2.1.9 加密和解密 Spring Cloud可对配置文件的值进行加密。 如果有"Illegal key size"异常,那么需要安装JCE。 2.1.10 服务点 除了Spring Boot提供的服务点,Spring Cloud也提供了一些服务点用于管理,注意都是POST请求 /env:更新Environment、重新绑定@ConfigurationProperties跟日志级别 /refresh重新加载配置文件,刷新标记@RefreshScope的bean /restart重启应用,默认不可用 生命周期方法:/pause、/resume 2.2 Spring Cloud Commons:通用抽象 服务发现、负载均衡、熔断机制这种模式为Spring Cloud客户端提供了一个通用的抽象层。 2.2.1 RestTemplate作为负载均衡客户端 通过@Bean跟@LoadBalanced指定RestTemplate。注意URI需要使用虚拟域名(如服务名,不能用域名)。 如下: @Configuration public class MyConfiguration { @LoadBalanced @Bean RestTemplate restTemplate() { return new RestTemplate(); } } public class MyClass { @Autowired private RestTemplate restTemplate; public String doOtherStuff() { String results = restTemplate.getForObject(" http://stores/stores", String.class); return results; } } 2.2.2 多个RestTemplate对象 注意@Primary注解的使用。 @Configuration public class MyConfiguration { @LoadBalanced @Bean RestTemplate loadBalanced() { return new RestTemplate(); } @Primary @Bean RestTemplate restTemplate() { return new RestTemplate(); } } public class MyClass { @Autowired private RestTemplate restTemplate; @Autowired @LoadBalanced private RestTemplate loadBalanced; public String doOtherStuff() { return loadBalanced.getForObject(" http://stores/stores", String.class); } public String doStuff() { return restTemplate.getForObject(" http://example.com", String.class); } } 2.2.3 忽略网络接口 忽略确定名字的服务发现注册,支持正则表达式配置。 3 Spring Cloud Config Spring Cloud Config提供服务端和客户端在分布式系统中扩展配置。支持不同环境的配置(开发、测试、生产)。使用Git做默认配置后端,可支持配置环境打版本标签。 3.1 快速开始 可通过IDE运行或maven运行。 默认加载property资源的策略是克隆一个git仓库(at spring.cloud.config.server.git.uri')。 HTTP服务资源的构成: /{application}/{profile}[/{label}] /{application}-{profile}.yml /{label}/{application}-{profile}.yml /{application}-{profile}.properties /{label}/{application}-{profile}.properties application是SpringApplication的spring.config.name,(一般来说'application'是一个常规的Spring Boot应用),profile是一个active的profile(或者逗号分隔的属性列表),label是一个可选的git标签(默认为"master")。 3.1.1 客户端示例 创建以Spring Boot应用即可,添加依赖“org.springframework.cloud:spring-cloud-starter-config”。 配置application.properties,注意URL为配置服务端的地址 spring.cloud.config.uri: http://myconfigserver.com 3.2 Spring Cloud Config 服务端 针对系统外的配置项(如name-value对或相同功能的YAML内容),该服务器提供了基于资源的HTTP接口。使用@EnableConfigServer注解,该服务器可以很容易的被嵌入到Spring Boot 系统中。使用该注解之后该应用系统就是一个配置服务器。 @SpringBootApplication @EnableConfigServer public class ConfigApplicion { public static void main(String[] args) throws Exception { SpringApplication.run(ConfigApplicion.class, args); } } 3.2.1 资源库环境 {application} 对应客户端的"spring.application.name"属性 {profile} 对应客户端的 "spring.profiles.active"属性(逗号分隔的列表) {label} 对应服务端属性,这个属性能标示一组配置文件的版本 如果配置库是基于文件的,服务器将从application.yml和foo.yml中创建一个Environment对象。高优先级的配置优先转成Environment对象中的PropertySource。 3.2.1.1 Git后端 默认的EnvironmentRepository是用Git后端进行实现的,Git后端对于管理升级和物理环境是很方便的,对审计配置变更也很方便。也可以file:前缀从本地配置库中读取数据。 这个配置库的实现通过映射HTTP资源的{label}参数作为git label(提交id,分支名称或tag)。如果git分支或tag的名称包含一个斜杠 ("/"),此时HTTP URL中的label需要使用特殊字符串"(_)"来替代(为了避免与其他URL路径相互混淆)。如果使用了命令行客户端如 curl,请谨慎处理URL中的括号(例如:在shell下请使用引号''来转义它们)。 Git URI占位符 Spring Cloud Config Server支持git库URL中包含针对{application}和 {profile}的占位符(如果你需要,{label}也可包含占位符, 不过要牢记的是任何情况下label只指git的label)。所以,你可以很容易的支持“一个应用系统一个配置库”策略或“一个profile一个配置库”策略。 模式匹配和多资源库 spring: cloud: config: server: git: uri: https://github.com/spring-cloud-samples/config-repo repos: simple: https://github.com/simple/config-repo special: pattern: special*/dev*,special/dev* uri: https://github.com/special/config-repo local: pattern: local* uri: file:/home/configsvc/config-repo 如果 {application}/{profile}不能匹配任何表达式,那么将使用“spring.cloud.config.server.git.uri”对应的值。在上例子中,对于 "simple" 配置库, 匹配模式是simple/* (也就说,无论profile是什么,它只匹配application名称为“simple”的应用系统)。“local”库匹配所有application名称以“local”开头任何应用系统,不管profiles是什么(来实现覆盖因没有配置对profile的匹配规则,“/”后缀会被自动的增加到任何的匹配表达式中)。 Git搜索路径中的占位符 spring.cloud.config.server.git.searchPaths 3.2.1.2 版本控制后端文件系统使用 伴随着版本控制系统作为后端(git、svn),文件都会被check out或clone 到本地文件系统中。默认这些文件会被放置到以config-repo-为前缀的系统临时目录中。在Linux上,譬如应该是/tmp/config-repo- 目录。有些操作系统routinely clean out放到临时目录中,这会导致不可预知的问题出现。为了避免这个问题,通过设置spring.cloud.config.server.git.basedir或spring.cloud.config.server.svn.basedir参数值为非系统临时目录。 3.2.1.3 文件系统后端 使用本地加载配置文件。 需要配置:spring.cloud.config.server.native.searchLocations跟spring.profiles.active=native。 路径配置格式:classpath:/, classpath:/config,file:./, file:./config。 3.2.1.4 共享配置给所有应用 基于文件的资源库 在基于文件的资源库中(i.e. git, svn and native),这样的文件名application 命名的资源在所有的客户端都是共享的(如 application.properties, application.yml, application-*.properties,etc.)。 属性覆盖 “spring.cloud.config.server.overrides”添加一个Map类型的name-value对来实现覆盖。 例如 spring: cloud: config: server: overrides: foo: bar 会使所有的配置客户端应用程序读取foo=bar到他们自己配置参数中。 3.2.2 健康指示器 通过这个指示器能够检查已经配置的EnvironmentRepository是否正常运行。 通过设置spring.cloud.config.server.health.enabled=false参数来禁用健康指示器。 3.2.3 安全 你可以自由选择任何你觉得合理的方式来保护你的Config Server(从物理网络安全到OAuth2 令牌),同时使用Spring Security和Spring Boot 能使你做更多其他有用的事情。 为了使用默认的Spring Boot HTTP Basic 安全,只需要把Spring Security 增加到classpath中(如org.springframework.boot.spring-boot-starter-security)。默认的用户名是“user”,对应的会生成一个随机密码,这种情况在实际使用中并没有意义,一般建议配置一个密码(通过 security.user.password属性进行配置)并对这个密码进行加密。 3.2.4 加密与解密 如果远程属性包含加密内容(以{cipher}开头),这些值将在通过HTTP传递到客户端之前被解密。 使用略 3.2.5 密钥管理 配置服务可以使用对称(共享)密钥或者非对称密钥(RSA密钥对)。 使用略 3.2.6 创建一个测试密钥库 3.2.7 使用多密钥和循环密钥 3.2.8 加密属性服务 3.3 可替换格式服务 配置文件可加后缀".yml"、".yaml"、".properties" 3.4 文本解释服务 /{name}/{profile}/{label}/{path} 3.5 嵌入配置服务器 一般配置服务运行在单独的应用里面,只要使用注解@EnableConfigServer即可嵌入到其他应用。 3.6 推送通知和总线 添加依赖spring-cloud-config-monitor,激活Spring Cloud 总线,/monitor端点即可用。 当webhook激活,针对应用程序可能已经变化了的,配置服务端将发送一个RefreshRemoteApplicationEvent。 3.7 客户端配置 3.7.1 配置第一次引导 通过spring.cloud.config.uri属性配置Config Server地址 3.7.2 发现第一次引导 如果用的是Netflix,则用eureka.client.serviceUrl.defaultZone进行配置。 3.7.3 配置客户端快速失败 在一些例子里面,可能希望在没有连接配置服务端时直接启动失败。可通过spring.cloud.config.failFast=true进行配置。 3.7.4 配置客户端重试 添加依赖spring-retry、spring-boot-starter-aop,设置spring.cloud.config.failFast=true。默认的是6次重试,初始补偿间隔是1000ms,后续补偿为1.1指数乘数,可通过spring.cloud.config.retry.*配置进行修改。 3.7.5 定位远程配置资源 路径:/{name}/{profile}/{label} "name" = ${spring.application.name} "profile" = ${spring.profiles.active} (actually Environment.getActiveProfiles()) "label" = "master" label对于回滚到之前的版本很有用。 3.7.6 安全 通过spring.cloud.config.password、spring.cloud.config.username进行配置。 答案来源于网络

养狐狸的猫 2019-12-02 02:18:34 0 浏览量 回答数 0

回答

1.产品2.UI3.CSS4.JS5.后端(Java/php/python)6.DBA(mysql/oracle)7.运维(OP) 8.测试(QA)9.算法(分类/聚类/关系抽取/实体识别)10.搜索(Lucene/Solr/elasticSearch)11.大数据工程师(Hadoop)12.Android13.IOS14.运营 一.产品1 工作内容:了解用户需求,做竞品调研,画产品原型,写产品文档,讲解产品需求,测试产品Bug,收集用户反馈,苦练金刚罩以防止程序员拿刀砍。2 需要技能:PPT,Word, Axure,XP,MVP,行业知识,沟通。 二. UI1 工作内容:收到产品原型,给原型上色,偶尔会自作主张调整下原型的位置,出不同的风格给老板和客户选,然后听他们的意见给出一个自己极不喜欢的风格,最好给Android,IOS或者是CSS做好标注,还有的需要直接帮他们切好图,最后要练出来象素眼,看看这些不靠谱的程序员们有没有上错色或者是有偏差。2 需要技能:PS,Illustrator,Sketch,耐性,找素材。 三. CSS1 工作内容:产品设计好原型,UI做出来了效果图,剩下的就是CSS工程师用代码把静态文件写出来的。 2 需要技能:环境【IDE(WEBStorm,Sublime,EditPlus),源码管理(SVN/Git) ,WEB服务器(nginx)】基础【PS,域名,Html,Html5,CSS,CSS3】扩展【自适应,响应式,Bootstrap,Less,Flex】 四 .JS 1 工作内容:JS工程师其实分成两类,在之前讲CSS的时候已经提到过,一个是套页面的,一个是前后端分离的。对这两个概念还是分不太清的,可以回过头去看CSS的部分。 2 需要技能:环境【IDE(WEBStorm,Sublime,EditPlus),源码管理(SVN/Git) ,WEB服务器(nginx)】基础【Http,REST,跨域,语法,组件,F12,Json,Websocket】框架【JQuery,AngularJS,Bower,RequireJS,GruntJS,ReactJS,PhoneGap】业务【金融,教育,医疗,汽车,房产等等等等各种行业】 五 .后端(Java/python/go) 1 工作内容:大部分的后端工程师都停留在功能实现的层面上。这是现在国内二流或者是三流的公司的现状,甚至是在某些一流的公司。很多时候都是架构师出了架构设计,更多的外包公司根本就是有DBA来做设计,然后后端程序员从JS到CSS到Java全写,完全就是一个通道,所有的复杂逻辑全部交给DB来做,这也是几年前DBA很受重视的原因。 2 需要技能:环境【IDE(Idea/Eclipse,Maven,jenkins,Nexus,Jetty,Shell,Host),源码管理(SVN/Git) ,WEB服务器(nginx,tomcat,Resin)】基础【Http,REST,跨域,语法,Websocket,数据库,计算机网络,操作系统,算法,数据结构】框架【Spring,AOP,Quartz,Json TagLib,tiles,activeMQ,memcache,redis,mybatis,log4j,junit等等等等等】业务【金融,教育,医疗,汽车,房产等等等等各种行业】。 六 .DBA  1 工作内容:如果你做了一个DBA,基本上会遇到两种情况。一种是你的后端工程师懂架构,知道怎么合便使用DB,知道如何防止穿透DB,那么恭喜你,你只是需要当一个DB技术兜底的顾问就好,基本上没什么活可以做,做个监控,写个统计就好了。你可以花时间在MongoDB了,Hadoop了这些,随便玩玩儿。再按照我之前说的,做好数据备份。如果需求变动比较大,往往会牵涉到一些线上数据的更改,那么就在发布的时候安静的等着,等着他们出问题。。。。如果不出问题就可以回家睡觉了。 2 需要技能:环境【Linux,Mysql,Oracle,MongoDB,Hadoop】工具【各种DB的版本,工具,备份,日志等】。 七. 运维  1 工作内容:运维的工作大概分成几个部分,我对于修真院学习运维的少年们都这么说,大概是:A。基础环境的搭建和常用软件的安装和配置(兼网管的还有各种程控机),常用软件指的是SVN,Git,邮箱这种,更细节的内容请参考修真院对于运维职业的介绍。B。日常的发布和维护,如刚刚讲到的一样,测试环境和线上环境的发布和记录,原则上,对线上所有的变更都应该有记录。C。数据的备份和服务的监控&安全配置。各种数据,都要做好备份和回滚的手段,提前准备好各种紧急预案,服务的监制要做好。安全始终都是不怎么被重点考虑的问题,因为这个东西无底洞,你永远不知道做到什么程度算是比较安全了,所以大多数都是看着情况来。D。运维工具的编写。这一点在大的云服务器商里格外常见,大公司也是一样的。E。Hadoop相关的大数据体系架构的运维,确实有公司在用几百台机器做Hadoop,所以虽然不常见,我还是列出来吧。 2 需要技能:环境【Linux,Mysql,Oracle,MongoDB,Hadoop,nginx,apache,F5,lvs,vpn,iptable,svn,git,memcache,redis】工具【linux 常用工具,Mysql常用工具,Jenkins,zabbix,nagios】自动化运维【openstack,docker,ansible】语言【shell,python】 八 .QA  1 工作内容:QA需要了解需求,很多公司会要求QA写测试用例,我觉得是扯淡。完全是在浪费时间。通常开发三周,QA测试的时间只有一周到一周半。还有关于提前写测试用例的,都不靠谱。 2 需要技能:流程【Bug修复流程,版本发布流程】工具【禅道,BugZilla,Jira,Excel表格来统计Bug数,自动化测试】性格【严谨,耐心】 九. 算法工程师  1 工作内容:算法工程师的工作内容,大部分时间都是在调优。就是调各种参数和语料,寻找特征,验证结果,排除噪音。也会和Hadoop神马的打一些交道,mahout神马的,我那个时候还在用JavaML。现在并不知道有没有什么更好用的工具了。有的时候还要自己去标注语料---当然大部分人都不爱做这个事儿,会找漂亮的小编辑去做。2 需要技能:基础【机器学习,数据挖掘】工具【Mahout,JavaML等其他的算法工具集】 十. 搜索工程师  1 工作内容: 所以搜索现在其实分成两种。一种是传统的搜索。包括:A。抓取 B。解析C。去重D。处理E。索引F。查询另一种是做为架构的搜索。并不包括之前的抓取解析去重,只有索引和查询。A。索引B。查询 2 需要技能:环境【Linux】框架【Luence,Slor,ElasticSearch,Cassandra,MongoDB】算法【倒排索引,权重计算公式,去重算法,Facet搜索的原理,高亮算法,实时索引】 十一. 大数据工程师  1 工作内容:工作内容在前期会比较多一些,基础搭建还是一个挺讲究的事儿。系统搭建好之后呢,大概是两种,一种是向大数据部门提交任务,跑一圈给你。一种是持续的文本信息处理中增加新的处理模块,像我之前说的增加个分类啦,实体识别神马的。好吧第一种其实我也不记得是从哪得来的印象了,我是没有见到过的。架构稳定了之后,大数据部门的工作并不太多,常常会和算法工程师混到一起来。其他的应该就是大数据周边产品的开发工作了。再去解决一些Bug什么的。2 需要技能:环境【Linux】框架【Hadoo,spark,storm,pig,hive,mahout,zookeeper 】算法【mapreduce,hdfs,zookeeper】。 十二. Android工程师  1 工作内容:Android工程师的日常就是听产品经理讲需求,跟后端定接口,听QA反馈哪款机器不兼容,闹着申请各种测试机,以及悲催的用Android做IOS的控件。 2 需要技能:环境【Android Studio,Maven,Gradle】基础【数据结构,Java,计算机网络】组件【IM,地图,支付,拍照,视频,音频,统计,分享,手势密码】 十三. IOS工程师  1 工作内容:IOS工程师的工作内容真的挺简单的,听需求,定接口。做个适配,抛弃一下iphone4。还有啥。。马丹,以我为数不多的IOS知识来讲,真的不知道还有啥了。我知道的比较复杂的系统也是各种背景高斯模糊,各种渐变,各种图片滤镜处理,其他并没有什么。支付,地图,统计这些东西。 嗯。2 需要技能:环境【Xcode】基础【数据结构,Object,计算机网络】组件【IM,地图,支付,拍照,视频,音频,统计,分享,手势密码】

行者武松 2019-12-02 01:21:45 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档与Rails集成在Rails应用中使用OSS Ruby SDK只需要在Gemfile中添加以下依赖: gem 'aliyun-sdk', '~> 0.3.0然后在使用OSS时引入依赖就可以了: require 'aliyun/oss'另外,SDK的rails/目录下提供一些方便用户使用的辅助代码。 下面我们将利用SDK来实现一个简单的OSS文件管理器(oss-manager),最终包含以下功能: 列出用户所有的Bucket列出Bucket下所有的文件,按目录层级列出上传文件下载文件 1. 创建项目先安装Rails,然后创建一个Rails应用,oss-manager: gem install railsrails new oss-manager作为一个好的习惯,使用git管理项目代码: cd oss-managergit initgit add .git commit -m "init project"2. 添加SDK依赖编辑oss-manager/Gemfile,向其中加入SDK的依赖: gem 'aliyun-sdk', '~> 0.3.0'然后在oss-manager/下执行: bundle install保存这一步所做的更改: git add .git commit -m "add aliyun-sdk dependency"3. 初始化OSS Client为了避免在项目中用到OSS Client的地方都要初始化,我们在项目中添加一个初始化文件,方便在项目中使用OSS Client: # oss-manager/config/initializers/aliyun_oss_init.rbrequire 'aliyun/oss'module OSS def self.client unless @client Aliyun::Common::Logging.set_log_file('./log/oss_sdk.log') @client = Aliyun::OSS::Client.new( endpoint: Rails.application.secrets.aliyun_oss['endpoint'], access_key_id: Rails.application.secrets.aliyun_oss['access_key_id'], access_key_secret: Rails.application.secrets.aliyun_oss['access_key_secret'] ) end @client endend 上面的代码在SDK的rails/目录下可以找到。这样初始化后,在项目中使用OSSClient就非常方便: buckets = OSS.client.list_buckets其中endpoint和AccessKeyId/AccessKeySecret保存在oss-manager/conf/secrets.yml中,例如: development: secret_key_base: xxxx aliyun_oss: endpoint: xxxx access_key_id: aaaa access_key_secret: bbbb 保存代码: git add .git commit -m "add aliyun-sdk initializer"4. 实现List buckets功能首先用rails生成管理Buckets的controller: rails g controller buckets index这样会在oss-manager中生成以下文件: app/controller/buckets_controller.rb Buckets相关的逻辑代码app/views/buckets/index.html.erb Buckets相关的展示代码app/helpers/buckets_helper.rb 一些辅助函数 首先编辑buckets_controller.rb,调用OSS Client,将list_buckets的结果存放在@buckets变量中: class BucketsController < ApplicationController def index @buckets = OSS.client.list_buckets endend 然后编辑views/buckets/index.html.erb,将Bucket列表展示出来: <h1>Buckets</h1><table class="table table-striped"> <tr> <th>Name</th> <th>Location</th> <th>CreationTime</th> </tr> <% @buckets.each do |bucket| %> <tr> <td><%= link_to bucket.name, bucket_objects_path(bucket.name) %></td> <td><%= bucket.location %></td> <td><%= bucket.creation_time.localtime.to_s %></td> </tr> <% end %></table> 其中bucket_objects_path是一个辅助函数,在app/helpers/buckets_helper.rb中: module BucketsHelper def bucket_objects_path(bucket_name) "/buckets/#{bucket_name}/objects" endend 这样就完成了列出所有Bucket的功能。在运行之前,我们还需要配置Rails的路由,使得我们在浏览器中输入的地址能够调用正确的逻辑。编辑config/routes.rb,增加一条: resources :buckets do resources :objectsend好了,在oss-manager/下输入rails s以启动rails server,然后在浏览器中输入http://localhost:3000/buckets/就能看到Bucket列表了。 最后保存一下代码: git add .git commit -m "add list buckets feature"5. 实现List objects功能首先生成一个管理Objects的controller: rails g controller objects index然后编辑app/controllers/objects_controller.rb: class ObjectsController < ApplicationController def index @bucket_name = params[:bucket_id] @prefix = params[:prefix] @bucket = OSS.client.get_bucket(@bucket_name) @objects = @bucket.list_objects(:prefix => @prefix, :delimiter => '/') endend 上面的代码首先从URL的参数中获取Bucket名字,为了只按目录层级显示,我们还需要一个前缀。然后调用OSS Client的list_objects接口获取文件列表。注意,这里获取的是指定前缀下,并且以’/‘为分界的文件。这样做是为也按目录层级列出文件。请参考管理文件 接下来编辑app/views/objects/index.html.erb: <h1>Objects in <%= @bucket_name %></h1><p> <%= link_to 'Upload file', new_object_path(@bucket_name, @prefix) %></p><table class="table table-striped"> <tr> <th>Key</th> <th>Type</th> <th>Size</th> <th>LastModified</th> </tr> <tr> <td><%= link_to '../', with_prefix(upper_dir(@prefix)) %></td> <td>Directory</td> <td>N/A</td> <td>N/A</td> </tr> <% @objects.each do |object| %> <tr> <% if object.is_a?(Aliyun::OSS::Object) %> <td><%= link_to remove_prefix(object.key, @prefix), @bucket.object_url(object.key) %></td> <td><%= object.type %></td> <td><%= number_to_human_size(object.size) %></td> <td><%= object.last_modified.localtime.to_s %></td> <% else %> <td><%= link_to remove_prefix(object, @prefix), with_prefix(object) %></td> <td>Directory</td> <td>N/A</td> <td>N/A</td> <% end %> </tr> <% end %></table> 上面的代码将文件按目录结构显示,主要逻辑是: 总是在第一个显示’../‘指向上级目录对于Common prefix,显示为目录对于Object,显示为文件 上面的代码中用到了with_prefix, remove_prefix等一些辅助函数,它们定义在app/helpers/objects_helper.rb中: module ObjectsHelper def with_prefix(prefix) "?prefix=#{prefix}" end def remove_prefix(key, prefix) key.sub(/^#{prefix}/, '') end def upper_dir(dir) dir.sub(/[^\/]+\/$/, '') if dir end def new_object_path(bucket_name, prefix = nil) "/buckets/#{bucket_name}/objects/new/#{with_prefix(prefix)}" end def objects_path(bucket_name, prefix = nil) "/buckets/#{bucket_name}/objects/#{with_prefix(prefix)}" endend 完成之后运行rails s,然后在浏览器中输入地址http://localhost:3000/buckets/my-bucket/objects/就可以查看文件列表了。 惯例保存代码: git add .git commit -m "add list objects feature"6. 下载文件注意到在上一步显示文件列表时,我们为每个文件也添加了一个链接: <td><%= link_to remove_prefix(object.key, @prefix), @bucket.object_url(object.key) %></td> 其中Bucket#object_url是一个为文件生成临时URL的方法,参考下载文件 7. 上传文件在Rails这种服务端应用中,用户上传文件有两种办法: 用户先将文件上传到Rails的服务器上,服务器再将文件上传到OSS。这样做需要Rails服务器作为中转,文件多拷贝了一遍,不是很高效。服务器为用户生成表单和临时凭证,用户直接上传文件到OSS。 第一种方法比较简单,与普通的上传文件一样。下面我们用的是第二种方法: 首先在app/controllers/objects_controller.rb中增加一个#new方法,用于生成上传表单: def new @bucket_name = params[:bucket_id] @prefix = params[:prefix] @bucket = OSS.client.get_bucket(@bucket_name) @options = { :prefix => @prefix, :redirect => 'http://localhost:3000/buckets/' }end 然后编辑app/views/objects/new.html.erb: <h2>Upload object</h2><%= upload_form(@bucket, @options) do %> <table class="table table-striped"> <tr> <td><label>Bucket:</label></td> <td><%= @bucket.name %></td> </tr> <tr> <td><label>Prefix:</label></td> <td><%= @prefix %></td> </tr> <tr> <td><label>Select file:</label></td> <td><input type="file" name="file" style="display:inline" /></td> </tr> <tr> <td colspan="2"> <input type="submit" class="btn btn-default" value="Upload" /> <span>&nbsp;&nbsp</span> <%= link_to 'Back', objects_path(@bucket_name, @prefix) %> </td> </tr> </table><% end %> 其中upload_form是SDK提供的一个方便用户生成上传表单的辅助函数,在SDK的代码rails/aliyun_oss_helper.rb中。用户需要将其拷贝到app/helpers/目录下。完成之后运行rails s,然后访问http://localhost:3000/buckets/my-bucket/objects/new就能够上传文件了。 最后记得保存代码: git add .git commit -m "add upload object feature"8. 添加样式为了让界面更好看一些,我们可以添加一点样式(CSS)。 首先下载bootstrap,解压后将bootstrap.min.css拷贝到app/assets/stylesheets/下。 然后在修改app/views/layouts/application.html.erb,将yield一行改成: <div id="main"> <%= yield %> </div> 这会为每个页面添加一个id为main的<div>,然后修改app/assets/stylesheets/application.css,加入以下内容: body { text-align: center;}div#main { text-align: left; width: 1024px; margin: 0 auto;} 这会让网页的主体内容居中显示。通过添加简单的样式,我们的页面是不是更加赏心悦目了呢? 至此,一个简单的demo就完成了。完整的demo代码请参看 Alibaba Cloud OSS Rails Demo。

2019-12-01 23:14:35 0 浏览量 回答数 0

阿里云高校特惠,助力学生创业梦!0元体验,快速入门云计算!

学生动手场景应用,快速了解并掌握云服务器的各种新奇玩法!

回答

详细解答可以参考官方帮助文档与Rails集成在Rails应用中使用OSS Ruby SDK只需要在Gemfile中添加以下依赖: gem 'aliyun-sdk', '~> 0.3.0然后在使用OSS时引入依赖就可以了: require 'aliyun/oss'另外,SDK的rails/目录下提供一些方便用户使用的辅助代码。 下面我们将利用SDK来实现一个简单的OSS文件管理器(oss-manager),最终包含以下功能: 列出用户所有的Bucket列出Bucket下所有的文件,按目录层级列出上传文件下载文件 1. 创建项目先安装Rails,然后创建一个Rails应用,oss-manager: gem install railsrails new oss-manager作为一个好的习惯,使用git管理项目代码: cd oss-managergit initgit add .git commit -m "init project"2. 添加SDK依赖编辑oss-manager/Gemfile,向其中加入SDK的依赖: gem 'aliyun-sdk', '~> 0.3.0'然后在oss-manager/下执行: bundle install保存这一步所做的更改: git add .git commit -m "add aliyun-sdk dependency"3. 初始化OSS Client为了避免在项目中用到OSS Client的地方都要初始化,我们在项目中添加一个初始化文件,方便在项目中使用OSS Client: # oss-manager/config/initializers/aliyun_oss_init.rbrequire 'aliyun/oss'module OSS def self.client unless @client Aliyun::Common::Logging.set_log_file('./log/oss_sdk.log') @client = Aliyun::OSS::Client.new( endpoint: Rails.application.secrets.aliyun_oss['endpoint'], access_key_id: Rails.application.secrets.aliyun_oss['access_key_id'], access_key_secret: Rails.application.secrets.aliyun_oss['access_key_secret'] ) end @client endend 上面的代码在SDK的rails/目录下可以找到。这样初始化后,在项目中使用OSSClient就非常方便: buckets = OSS.client.list_buckets其中endpoint和AccessKeyId/AccessKeySecret保存在oss-manager/conf/secrets.yml中,例如: development: secret_key_base: xxxx aliyun_oss: endpoint: xxxx access_key_id: aaaa access_key_secret: bbbb 保存代码: git add .git commit -m "add aliyun-sdk initializer"4. 实现List buckets功能首先用rails生成管理Buckets的controller: rails g controller buckets index这样会在oss-manager中生成以下文件: app/controller/buckets_controller.rb Buckets相关的逻辑代码app/views/buckets/index.html.erb Buckets相关的展示代码app/helpers/buckets_helper.rb 一些辅助函数 首先编辑buckets_controller.rb,调用OSS Client,将list_buckets的结果存放在@buckets变量中: class BucketsController < ApplicationController def index @buckets = OSS.client.list_buckets endend 然后编辑views/buckets/index.html.erb,将Bucket列表展示出来: <h1>Buckets</h1><table class="table table-striped"> <tr> <th>Name</th> <th>Location</th> <th>CreationTime</th> </tr> <% @buckets.each do |bucket| %> <tr> <td><%= link_to bucket.name, bucket_objects_path(bucket.name) %></td> <td><%= bucket.location %></td> <td><%= bucket.creation_time.localtime.to_s %></td> </tr> <% end %></table> 其中bucket_objects_path是一个辅助函数,在app/helpers/buckets_helper.rb中: module BucketsHelper def bucket_objects_path(bucket_name) "/buckets/#{bucket_name}/objects" endend 这样就完成了列出所有Bucket的功能。在运行之前,我们还需要配置Rails的路由,使得我们在浏览器中输入的地址能够调用正确的逻辑。编辑config/routes.rb,增加一条: resources :buckets do resources :objectsend好了,在oss-manager/下输入rails s以启动rails server,然后在浏览器中输入http://localhost:3000/buckets/就能看到Bucket列表了。 最后保存一下代码: git add .git commit -m "add list buckets feature"5. 实现List objects功能首先生成一个管理Objects的controller: rails g controller objects index然后编辑app/controllers/objects_controller.rb: class ObjectsController < ApplicationController def index @bucket_name = params[:bucket_id] @prefix = params[:prefix] @bucket = OSS.client.get_bucket(@bucket_name) @objects = @bucket.list_objects(:prefix => @prefix, :delimiter => '/') endend 上面的代码首先从URL的参数中获取Bucket名字,为了只按目录层级显示,我们还需要一个前缀。然后调用OSS Client的list_objects接口获取文件列表。注意,这里获取的是指定前缀下,并且以’/‘为分界的文件。这样做是为也按目录层级列出文件。请参考管理文件 接下来编辑app/views/objects/index.html.erb: <h1>Objects in <%= @bucket_name %></h1><p> <%= link_to 'Upload file', new_object_path(@bucket_name, @prefix) %></p><table class="table table-striped"> <tr> <th>Key</th> <th>Type</th> <th>Size</th> <th>LastModified</th> </tr> <tr> <td><%= link_to '../', with_prefix(upper_dir(@prefix)) %></td> <td>Directory</td> <td>N/A</td> <td>N/A</td> </tr> <% @objects.each do |object| %> <tr> <% if object.is_a?(Aliyun::OSS::Object) %> <td><%= link_to remove_prefix(object.key, @prefix), @bucket.object_url(object.key) %></td> <td><%= object.type %></td> <td><%= number_to_human_size(object.size) %></td> <td><%= object.last_modified.localtime.to_s %></td> <% else %> <td><%= link_to remove_prefix(object, @prefix), with_prefix(object) %></td> <td>Directory</td> <td>N/A</td> <td>N/A</td> <% end %> </tr> <% end %></table> 上面的代码将文件按目录结构显示,主要逻辑是: 总是在第一个显示’../‘指向上级目录对于Common prefix,显示为目录对于Object,显示为文件 上面的代码中用到了with_prefix, remove_prefix等一些辅助函数,它们定义在app/helpers/objects_helper.rb中: module ObjectsHelper def with_prefix(prefix) "?prefix=#{prefix}" end def remove_prefix(key, prefix) key.sub(/^#{prefix}/, '') end def upper_dir(dir) dir.sub(/[^\/]+\/$/, '') if dir end def new_object_path(bucket_name, prefix = nil) "/buckets/#{bucket_name}/objects/new/#{with_prefix(prefix)}" end def objects_path(bucket_name, prefix = nil) "/buckets/#{bucket_name}/objects/#{with_prefix(prefix)}" endend 完成之后运行rails s,然后在浏览器中输入地址http://localhost:3000/buckets/my-bucket/objects/就可以查看文件列表了。 惯例保存代码: git add .git commit -m "add list objects feature"6. 下载文件注意到在上一步显示文件列表时,我们为每个文件也添加了一个链接: <td><%= link_to remove_prefix(object.key, @prefix), @bucket.object_url(object.key) %></td> 其中Bucket#object_url是一个为文件生成临时URL的方法,参考下载文件 7. 上传文件在Rails这种服务端应用中,用户上传文件有两种办法: 用户先将文件上传到Rails的服务器上,服务器再将文件上传到OSS。这样做需要Rails服务器作为中转,文件多拷贝了一遍,不是很高效。服务器为用户生成表单和临时凭证,用户直接上传文件到OSS。 第一种方法比较简单,与普通的上传文件一样。下面我们用的是第二种方法: 首先在app/controllers/objects_controller.rb中增加一个#new方法,用于生成上传表单: def new @bucket_name = params[:bucket_id] @prefix = params[:prefix] @bucket = OSS.client.get_bucket(@bucket_name) @options = { :prefix => @prefix, :redirect => 'http://localhost:3000/buckets/' }end 然后编辑app/views/objects/new.html.erb: <h2>Upload object</h2><%= upload_form(@bucket, @options) do %> <table class="table table-striped"> <tr> <td><label>Bucket:</label></td> <td><%= @bucket.name %></td> </tr> <tr> <td><label>Prefix:</label></td> <td><%= @prefix %></td> </tr> <tr> <td><label>Select file:</label></td> <td><input type="file" name="file" style="display:inline" /></td> </tr> <tr> <td colspan="2"> <input type="submit" class="btn btn-default" value="Upload" /> <span>&nbsp;&nbsp</span> <%= link_to 'Back', objects_path(@bucket_name, @prefix) %> </td> </tr> </table><% end %> 其中upload_form是SDK提供的一个方便用户生成上传表单的辅助函数,在SDK的代码rails/aliyun_oss_helper.rb中。用户需要将其拷贝到app/helpers/目录下。完成之后运行rails s,然后访问http://localhost:3000/buckets/my-bucket/objects/new就能够上传文件了。 最后记得保存代码: git add .git commit -m "add upload object feature"8. 添加样式为了让界面更好看一些,我们可以添加一点样式(CSS)。 首先下载bootstrap,解压后将bootstrap.min.css拷贝到app/assets/stylesheets/下。 然后在修改app/views/layouts/application.html.erb,将yield一行改成: <div id="main"> <%= yield %> </div> 这会为每个页面添加一个id为main的<div>,然后修改app/assets/stylesheets/application.css,加入以下内容: body { text-align: center;}div#main { text-align: left; width: 1024px; margin: 0 auto;} 这会让网页的主体内容居中显示。通过添加简单的样式,我们的页面是不是更加赏心悦目了呢? 至此,一个简单的demo就完成了。完整的demo代码请参看 Alibaba Cloud OSS Rails Demo。

2019-12-01 23:14:36 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档与Rails集成在Rails应用中使用OSS Ruby SDK只需要在Gemfile中添加以下依赖: gem 'aliyun-sdk', '~> 0.3.0然后在使用OSS时引入依赖就可以了: require 'aliyun/oss'另外,SDK的rails/目录下提供一些方便用户使用的辅助代码。 下面我们将利用SDK来实现一个简单的OSS文件管理器(oss-manager),最终包含以下功能: 列出用户所有的Bucket列出Bucket下所有的文件,按目录层级列出上传文件下载文件 1. 创建项目先安装Rails,然后创建一个Rails应用,oss-manager: gem install railsrails new oss-manager作为一个好的习惯,使用git管理项目代码: cd oss-managergit initgit add .git commit -m "init project"2. 添加SDK依赖编辑oss-manager/Gemfile,向其中加入SDK的依赖: gem 'aliyun-sdk', '~> 0.3.0'然后在oss-manager/下执行: bundle install保存这一步所做的更改: git add .git commit -m "add aliyun-sdk dependency"3. 初始化OSS Client为了避免在项目中用到OSS Client的地方都要初始化,我们在项目中添加一个初始化文件,方便在项目中使用OSS Client: # oss-manager/config/initializers/aliyun_oss_init.rbrequire 'aliyun/oss'module OSS def self.client unless @client Aliyun::Common::Logging.set_log_file('./log/oss_sdk.log') @client = Aliyun::OSS::Client.new( endpoint: Rails.application.secrets.aliyun_oss['endpoint'], access_key_id: Rails.application.secrets.aliyun_oss['access_key_id'], access_key_secret: Rails.application.secrets.aliyun_oss['access_key_secret'] ) end @client endend 上面的代码在SDK的rails/目录下可以找到。这样初始化后,在项目中使用OSSClient就非常方便: buckets = OSS.client.list_buckets其中endpoint和AccessKeyId/AccessKeySecret保存在oss-manager/conf/secrets.yml中,例如: development: secret_key_base: xxxx aliyun_oss: endpoint: xxxx access_key_id: aaaa access_key_secret: bbbb 保存代码: git add .git commit -m "add aliyun-sdk initializer"4. 实现List buckets功能首先用rails生成管理Buckets的controller: rails g controller buckets index这样会在oss-manager中生成以下文件: app/controller/buckets_controller.rb Buckets相关的逻辑代码app/views/buckets/index.html.erb Buckets相关的展示代码app/helpers/buckets_helper.rb 一些辅助函数 首先编辑buckets_controller.rb,调用OSS Client,将list_buckets的结果存放在@buckets变量中: class BucketsController < ApplicationController def index @buckets = OSS.client.list_buckets endend 然后编辑views/buckets/index.html.erb,将Bucket列表展示出来: <h1>Buckets</h1><table class="table table-striped"> <tr> <th>Name</th> <th>Location</th> <th>CreationTime</th> </tr> <% @buckets.each do |bucket| %> <tr> <td><%= link_to bucket.name, bucket_objects_path(bucket.name) %></td> <td><%= bucket.location %></td> <td><%= bucket.creation_time.localtime.to_s %></td> </tr> <% end %></table> 其中bucket_objects_path是一个辅助函数,在app/helpers/buckets_helper.rb中: module BucketsHelper def bucket_objects_path(bucket_name) "/buckets/#{bucket_name}/objects" endend 这样就完成了列出所有Bucket的功能。在运行之前,我们还需要配置Rails的路由,使得我们在浏览器中输入的地址能够调用正确的逻辑。编辑config/routes.rb,增加一条: resources :buckets do resources :objectsend好了,在oss-manager/下输入rails s以启动rails server,然后在浏览器中输入http://localhost:3000/buckets/就能看到Bucket列表了。 最后保存一下代码: git add .git commit -m "add list buckets feature"5. 实现List objects功能首先生成一个管理Objects的controller: rails g controller objects index然后编辑app/controllers/objects_controller.rb: class ObjectsController < ApplicationController def index @bucket_name = params[:bucket_id] @prefix = params[:prefix] @bucket = OSS.client.get_bucket(@bucket_name) @objects = @bucket.list_objects(:prefix => @prefix, :delimiter => '/') endend 上面的代码首先从URL的参数中获取Bucket名字,为了只按目录层级显示,我们还需要一个前缀。然后调用OSS Client的list_objects接口获取文件列表。注意,这里获取的是指定前缀下,并且以’/‘为分界的文件。这样做是为也按目录层级列出文件。请参考管理文件 接下来编辑app/views/objects/index.html.erb: <h1>Objects in <%= @bucket_name %></h1><p> <%= link_to 'Upload file', new_object_path(@bucket_name, @prefix) %></p><table class="table table-striped"> <tr> <th>Key</th> <th>Type</th> <th>Size</th> <th>LastModified</th> </tr> <tr> <td><%= link_to '../', with_prefix(upper_dir(@prefix)) %></td> <td>Directory</td> <td>N/A</td> <td>N/A</td> </tr> <% @objects.each do |object| %> <tr> <% if object.is_a?(Aliyun::OSS::Object) %> <td><%= link_to remove_prefix(object.key, @prefix), @bucket.object_url(object.key) %></td> <td><%= object.type %></td> <td><%= number_to_human_size(object.size) %></td> <td><%= object.last_modified.localtime.to_s %></td> <% else %> <td><%= link_to remove_prefix(object, @prefix), with_prefix(object) %></td> <td>Directory</td> <td>N/A</td> <td>N/A</td> <% end %> </tr> <% end %></table> 上面的代码将文件按目录结构显示,主要逻辑是: 总是在第一个显示’../‘指向上级目录对于Common prefix,显示为目录对于Object,显示为文件 上面的代码中用到了with_prefix, remove_prefix等一些辅助函数,它们定义在app/helpers/objects_helper.rb中: module ObjectsHelper def with_prefix(prefix) "?prefix=#{prefix}" end def remove_prefix(key, prefix) key.sub(/^#{prefix}/, '') end def upper_dir(dir) dir.sub(/[^\/]+\/$/, '') if dir end def new_object_path(bucket_name, prefix = nil) "/buckets/#{bucket_name}/objects/new/#{with_prefix(prefix)}" end def objects_path(bucket_name, prefix = nil) "/buckets/#{bucket_name}/objects/#{with_prefix(prefix)}" endend 完成之后运行rails s,然后在浏览器中输入地址http://localhost:3000/buckets/my-bucket/objects/就可以查看文件列表了。 惯例保存代码: git add .git commit -m "add list objects feature"6. 下载文件注意到在上一步显示文件列表时,我们为每个文件也添加了一个链接: <td><%= link_to remove_prefix(object.key, @prefix), @bucket.object_url(object.key) %></td> 其中Bucket#object_url是一个为文件生成临时URL的方法,参考下载文件 7. 上传文件在Rails这种服务端应用中,用户上传文件有两种办法: 用户先将文件上传到Rails的服务器上,服务器再将文件上传到OSS。这样做需要Rails服务器作为中转,文件多拷贝了一遍,不是很高效。服务器为用户生成表单和临时凭证,用户直接上传文件到OSS。 第一种方法比较简单,与普通的上传文件一样。下面我们用的是第二种方法: 首先在app/controllers/objects_controller.rb中增加一个#new方法,用于生成上传表单: def new @bucket_name = params[:bucket_id] @prefix = params[:prefix] @bucket = OSS.client.get_bucket(@bucket_name) @options = { :prefix => @prefix, :redirect => 'http://localhost:3000/buckets/' }end 然后编辑app/views/objects/new.html.erb: <h2>Upload object</h2><%= upload_form(@bucket, @options) do %> <table class="table table-striped"> <tr> <td><label>Bucket:</label></td> <td><%= @bucket.name %></td> </tr> <tr> <td><label>Prefix:</label></td> <td><%= @prefix %></td> </tr> <tr> <td><label>Select file:</label></td> <td><input type="file" name="file" style="display:inline" /></td> </tr> <tr> <td colspan="2"> <input type="submit" class="btn btn-default" value="Upload" /> <span>&nbsp;&nbsp</span> <%= link_to 'Back', objects_path(@bucket_name, @prefix) %> </td> </tr> </table><% end %> 其中upload_form是SDK提供的一个方便用户生成上传表单的辅助函数,在SDK的代码rails/aliyun_oss_helper.rb中。用户需要将其拷贝到app/helpers/目录下。完成之后运行rails s,然后访问http://localhost:3000/buckets/my-bucket/objects/new就能够上传文件了。 最后记得保存代码: git add .git commit -m "add upload object feature"8. 添加样式为了让界面更好看一些,我们可以添加一点样式(CSS)。 首先下载bootstrap,解压后将bootstrap.min.css拷贝到app/assets/stylesheets/下。 然后在修改app/views/layouts/application.html.erb,将yield一行改成: <div id="main"> <%= yield %> </div> 这会为每个页面添加一个id为main的<div>,然后修改app/assets/stylesheets/application.css,加入以下内容: body { text-align: center;}div#main { text-align: left; width: 1024px; margin: 0 auto;} 这会让网页的主体内容居中显示。通过添加简单的样式,我们的页面是不是更加赏心悦目了呢? 至此,一个简单的demo就完成了。完整的demo代码请参看 Alibaba Cloud OSS Rails Demo。

2019-12-01 23:14:34 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档与Rails集成在Rails应用中使用OSS Ruby SDK只需要在Gemfile中添加以下依赖: gem 'aliyun-sdk', '~> 0.3.0然后在使用OSS时引入依赖就可以了: require 'aliyun/oss'另外,SDK的rails/目录下提供一些方便用户使用的辅助代码。 下面我们将利用SDK来实现一个简单的OSS文件管理器(oss-manager),最终包含以下功能: 列出用户所有的Bucket列出Bucket下所有的文件,按目录层级列出上传文件下载文件 1. 创建项目先安装Rails,然后创建一个Rails应用,oss-manager: gem install railsrails new oss-manager作为一个好的习惯,使用git管理项目代码: cd oss-managergit initgit add .git commit -m "init project"2. 添加SDK依赖编辑oss-manager/Gemfile,向其中加入SDK的依赖: gem 'aliyun-sdk', '~> 0.3.0'然后在oss-manager/下执行: bundle install保存这一步所做的更改: git add .git commit -m "add aliyun-sdk dependency"3. 初始化OSS Client为了避免在项目中用到OSS Client的地方都要初始化,我们在项目中添加一个初始化文件,方便在项目中使用OSS Client: # oss-manager/config/initializers/aliyun_oss_init.rbrequire 'aliyun/oss'module OSS def self.client unless @client Aliyun::Common::Logging.set_log_file('./log/oss_sdk.log') @client = Aliyun::OSS::Client.new( endpoint: Rails.application.secrets.aliyun_oss['endpoint'], access_key_id: Rails.application.secrets.aliyun_oss['access_key_id'], access_key_secret: Rails.application.secrets.aliyun_oss['access_key_secret'] ) end @client endend 上面的代码在SDK的rails/目录下可以找到。这样初始化后,在项目中使用OSSClient就非常方便: buckets = OSS.client.list_buckets其中endpoint和AccessKeyId/AccessKeySecret保存在oss-manager/conf/secrets.yml中,例如: development: secret_key_base: xxxx aliyun_oss: endpoint: xxxx access_key_id: aaaa access_key_secret: bbbb 保存代码: git add .git commit -m "add aliyun-sdk initializer"4. 实现List buckets功能首先用rails生成管理Buckets的controller: rails g controller buckets index这样会在oss-manager中生成以下文件: app/controller/buckets_controller.rb Buckets相关的逻辑代码app/views/buckets/index.html.erb Buckets相关的展示代码app/helpers/buckets_helper.rb 一些辅助函数 首先编辑buckets_controller.rb,调用OSS Client,将list_buckets的结果存放在@buckets变量中: class BucketsController < ApplicationController def index @buckets = OSS.client.list_buckets endend 然后编辑views/buckets/index.html.erb,将Bucket列表展示出来: <h1>Buckets</h1><table class="table table-striped"> <tr> <th>Name</th> <th>Location</th> <th>CreationTime</th> </tr> <% @buckets.each do |bucket| %> <tr> <td><%= link_to bucket.name, bucket_objects_path(bucket.name) %></td> <td><%= bucket.location %></td> <td><%= bucket.creation_time.localtime.to_s %></td> </tr> <% end %></table> 其中bucket_objects_path是一个辅助函数,在app/helpers/buckets_helper.rb中: module BucketsHelper def bucket_objects_path(bucket_name) "/buckets/#{bucket_name}/objects" endend 这样就完成了列出所有Bucket的功能。在运行之前,我们还需要配置Rails的路由,使得我们在浏览器中输入的地址能够调用正确的逻辑。编辑config/routes.rb,增加一条: resources :buckets do resources :objectsend好了,在oss-manager/下输入rails s以启动rails server,然后在浏览器中输入http://localhost:3000/buckets/就能看到Bucket列表了。 最后保存一下代码: git add .git commit -m "add list buckets feature"5. 实现List objects功能首先生成一个管理Objects的controller: rails g controller objects index然后编辑app/controllers/objects_controller.rb: class ObjectsController < ApplicationController def index @bucket_name = params[:bucket_id] @prefix = params[:prefix] @bucket = OSS.client.get_bucket(@bucket_name) @objects = @bucket.list_objects(:prefix => @prefix, :delimiter => '/') endend 上面的代码首先从URL的参数中获取Bucket名字,为了只按目录层级显示,我们还需要一个前缀。然后调用OSS Client的list_objects接口获取文件列表。注意,这里获取的是指定前缀下,并且以’/‘为分界的文件。这样做是为也按目录层级列出文件。请参考管理文件 接下来编辑app/views/objects/index.html.erb: <h1>Objects in <%= @bucket_name %></h1><p> <%= link_to 'Upload file', new_object_path(@bucket_name, @prefix) %></p><table class="table table-striped"> <tr> <th>Key</th> <th>Type</th> <th>Size</th> <th>LastModified</th> </tr> <tr> <td><%= link_to '../', with_prefix(upper_dir(@prefix)) %></td> <td>Directory</td> <td>N/A</td> <td>N/A</td> </tr> <% @objects.each do |object| %> <tr> <% if object.is_a?(Aliyun::OSS::Object) %> <td><%= link_to remove_prefix(object.key, @prefix), @bucket.object_url(object.key) %></td> <td><%= object.type %></td> <td><%= number_to_human_size(object.size) %></td> <td><%= object.last_modified.localtime.to_s %></td> <% else %> <td><%= link_to remove_prefix(object, @prefix), with_prefix(object) %></td> <td>Directory</td> <td>N/A</td> <td>N/A</td> <% end %> </tr> <% end %></table> 上面的代码将文件按目录结构显示,主要逻辑是: 总是在第一个显示’../‘指向上级目录对于Common prefix,显示为目录对于Object,显示为文件 上面的代码中用到了with_prefix, remove_prefix等一些辅助函数,它们定义在app/helpers/objects_helper.rb中: module ObjectsHelper def with_prefix(prefix) "?prefix=#{prefix}" end def remove_prefix(key, prefix) key.sub(/^#{prefix}/, '') end def upper_dir(dir) dir.sub(/[^\/]+\/$/, '') if dir end def new_object_path(bucket_name, prefix = nil) "/buckets/#{bucket_name}/objects/new/#{with_prefix(prefix)}" end def objects_path(bucket_name, prefix = nil) "/buckets/#{bucket_name}/objects/#{with_prefix(prefix)}" endend 完成之后运行rails s,然后在浏览器中输入地址http://localhost:3000/buckets/my-bucket/objects/就可以查看文件列表了。 惯例保存代码: git add .git commit -m "add list objects feature"6. 下载文件注意到在上一步显示文件列表时,我们为每个文件也添加了一个链接: <td><%= link_to remove_prefix(object.key, @prefix), @bucket.object_url(object.key) %></td> 其中Bucket#object_url是一个为文件生成临时URL的方法,参考下载文件 7. 上传文件在Rails这种服务端应用中,用户上传文件有两种办法: 用户先将文件上传到Rails的服务器上,服务器再将文件上传到OSS。这样做需要Rails服务器作为中转,文件多拷贝了一遍,不是很高效。服务器为用户生成表单和临时凭证,用户直接上传文件到OSS。 第一种方法比较简单,与普通的上传文件一样。下面我们用的是第二种方法: 首先在app/controllers/objects_controller.rb中增加一个#new方法,用于生成上传表单: def new @bucket_name = params[:bucket_id] @prefix = params[:prefix] @bucket = OSS.client.get_bucket(@bucket_name) @options = { :prefix => @prefix, :redirect => 'http://localhost:3000/buckets/' }end 然后编辑app/views/objects/new.html.erb: <h2>Upload object</h2><%= upload_form(@bucket, @options) do %> <table class="table table-striped"> <tr> <td><label>Bucket:</label></td> <td><%= @bucket.name %></td> </tr> <tr> <td><label>Prefix:</label></td> <td><%= @prefix %></td> </tr> <tr> <td><label>Select file:</label></td> <td><input type="file" name="file" style="display:inline" /></td> </tr> <tr> <td colspan="2"> <input type="submit" class="btn btn-default" value="Upload" /> <span>&nbsp;&nbsp</span> <%= link_to 'Back', objects_path(@bucket_name, @prefix) %> </td> </tr> </table><% end %> 其中upload_form是SDK提供的一个方便用户生成上传表单的辅助函数,在SDK的代码rails/aliyun_oss_helper.rb中。用户需要将其拷贝到app/helpers/目录下。完成之后运行rails s,然后访问http://localhost:3000/buckets/my-bucket/objects/new就能够上传文件了。 最后记得保存代码: git add .git commit -m "add upload object feature"8. 添加样式为了让界面更好看一些,我们可以添加一点样式(CSS)。 首先下载bootstrap,解压后将bootstrap.min.css拷贝到app/assets/stylesheets/下。 然后在修改app/views/layouts/application.html.erb,将yield一行改成: <div id="main"> <%= yield %> </div> 这会为每个页面添加一个id为main的<div>,然后修改app/assets/stylesheets/application.css,加入以下内容: body { text-align: center;}div#main { text-align: left; width: 1024px; margin: 0 auto;} 这会让网页的主体内容居中显示。通过添加简单的样式,我们的页面是不是更加赏心悦目了呢? 至此,一个简单的demo就完成了。完整的demo代码请参看 Alibaba Cloud OSS Rails Demo。

2019-12-01 23:14:34 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档与Rails集成在Rails应用中使用OSS Ruby SDK只需要在Gemfile中添加以下依赖: gem 'aliyun-sdk', '~> 0.3.0然后在使用OSS时引入依赖就可以了: require 'aliyun/oss'另外,SDK的rails/目录下提供一些方便用户使用的辅助代码。 下面我们将利用SDK来实现一个简单的OSS文件管理器(oss-manager),最终包含以下功能: 列出用户所有的Bucket列出Bucket下所有的文件,按目录层级列出上传文件下载文件 1. 创建项目先安装Rails,然后创建一个Rails应用,oss-manager: gem install railsrails new oss-manager作为一个好的习惯,使用git管理项目代码: cd oss-managergit initgit add .git commit -m "init project"2. 添加SDK依赖编辑oss-manager/Gemfile,向其中加入SDK的依赖: gem 'aliyun-sdk', '~> 0.3.0'然后在oss-manager/下执行: bundle install保存这一步所做的更改: git add .git commit -m "add aliyun-sdk dependency"3. 初始化OSS Client为了避免在项目中用到OSS Client的地方都要初始化,我们在项目中添加一个初始化文件,方便在项目中使用OSS Client: # oss-manager/config/initializers/aliyun_oss_init.rbrequire 'aliyun/oss'module OSS def self.client unless @client Aliyun::Common::Logging.set_log_file('./log/oss_sdk.log') @client = Aliyun::OSS::Client.new( endpoint: Rails.application.secrets.aliyun_oss['endpoint'], access_key_id: Rails.application.secrets.aliyun_oss['access_key_id'], access_key_secret: Rails.application.secrets.aliyun_oss['access_key_secret'] ) end @client endend 上面的代码在SDK的rails/目录下可以找到。这样初始化后,在项目中使用OSSClient就非常方便: buckets = OSS.client.list_buckets其中endpoint和AccessKeyId/AccessKeySecret保存在oss-manager/conf/secrets.yml中,例如: development: secret_key_base: xxxx aliyun_oss: endpoint: xxxx access_key_id: aaaa access_key_secret: bbbb 保存代码: git add .git commit -m "add aliyun-sdk initializer"4. 实现List buckets功能首先用rails生成管理Buckets的controller: rails g controller buckets index这样会在oss-manager中生成以下文件: app/controller/buckets_controller.rb Buckets相关的逻辑代码app/views/buckets/index.html.erb Buckets相关的展示代码app/helpers/buckets_helper.rb 一些辅助函数 首先编辑buckets_controller.rb,调用OSS Client,将list_buckets的结果存放在@buckets变量中: class BucketsController < ApplicationController def index @buckets = OSS.client.list_buckets endend 然后编辑views/buckets/index.html.erb,将Bucket列表展示出来: <h1>Buckets</h1><table class="table table-striped"> <tr> <th>Name</th> <th>Location</th> <th>CreationTime</th> </tr> <% @buckets.each do |bucket| %> <tr> <td><%= link_to bucket.name, bucket_objects_path(bucket.name) %></td> <td><%= bucket.location %></td> <td><%= bucket.creation_time.localtime.to_s %></td> </tr> <% end %></table> 其中bucket_objects_path是一个辅助函数,在app/helpers/buckets_helper.rb中: module BucketsHelper def bucket_objects_path(bucket_name) "/buckets/#{bucket_name}/objects" endend 这样就完成了列出所有Bucket的功能。在运行之前,我们还需要配置Rails的路由,使得我们在浏览器中输入的地址能够调用正确的逻辑。编辑config/routes.rb,增加一条: resources :buckets do resources :objectsend好了,在oss-manager/下输入rails s以启动rails server,然后在浏览器中输入http://localhost:3000/buckets/就能看到Bucket列表了。 最后保存一下代码: git add .git commit -m "add list buckets feature"5. 实现List objects功能首先生成一个管理Objects的controller: rails g controller objects index然后编辑app/controllers/objects_controller.rb: class ObjectsController < ApplicationController def index @bucket_name = params[:bucket_id] @prefix = params[:prefix] @bucket = OSS.client.get_bucket(@bucket_name) @objects = @bucket.list_objects(:prefix => @prefix, :delimiter => '/') endend 上面的代码首先从URL的参数中获取Bucket名字,为了只按目录层级显示,我们还需要一个前缀。然后调用OSS Client的list_objects接口获取文件列表。注意,这里获取的是指定前缀下,并且以’/‘为分界的文件。这样做是为也按目录层级列出文件。请参考管理文件 接下来编辑app/views/objects/index.html.erb: <h1>Objects in <%= @bucket_name %></h1><p> <%= link_to 'Upload file', new_object_path(@bucket_name, @prefix) %></p><table class="table table-striped"> <tr> <th>Key</th> <th>Type</th> <th>Size</th> <th>LastModified</th> </tr> <tr> <td><%= link_to '../', with_prefix(upper_dir(@prefix)) %></td> <td>Directory</td> <td>N/A</td> <td>N/A</td> </tr> <% @objects.each do |object| %> <tr> <% if object.is_a?(Aliyun::OSS::Object) %> <td><%= link_to remove_prefix(object.key, @prefix), @bucket.object_url(object.key) %></td> <td><%= object.type %></td> <td><%= number_to_human_size(object.size) %></td> <td><%= object.last_modified.localtime.to_s %></td> <% else %> <td><%= link_to remove_prefix(object, @prefix), with_prefix(object) %></td> <td>Directory</td> <td>N/A</td> <td>N/A</td> <% end %> </tr> <% end %></table> 上面的代码将文件按目录结构显示,主要逻辑是: 总是在第一个显示’../‘指向上级目录对于Common prefix,显示为目录对于Object,显示为文件 上面的代码中用到了with_prefix, remove_prefix等一些辅助函数,它们定义在app/helpers/objects_helper.rb中: module ObjectsHelper def with_prefix(prefix) "?prefix=#{prefix}" end def remove_prefix(key, prefix) key.sub(/^#{prefix}/, '') end def upper_dir(dir) dir.sub(/[^\/]+\/$/, '') if dir end def new_object_path(bucket_name, prefix = nil) "/buckets/#{bucket_name}/objects/new/#{with_prefix(prefix)}" end def objects_path(bucket_name, prefix = nil) "/buckets/#{bucket_name}/objects/#{with_prefix(prefix)}" endend 完成之后运行rails s,然后在浏览器中输入地址http://localhost:3000/buckets/my-bucket/objects/就可以查看文件列表了。 惯例保存代码: git add .git commit -m "add list objects feature"6. 下载文件注意到在上一步显示文件列表时,我们为每个文件也添加了一个链接: <td><%= link_to remove_prefix(object.key, @prefix), @bucket.object_url(object.key) %></td> 其中Bucket#object_url是一个为文件生成临时URL的方法,参考下载文件 7. 上传文件在Rails这种服务端应用中,用户上传文件有两种办法: 用户先将文件上传到Rails的服务器上,服务器再将文件上传到OSS。这样做需要Rails服务器作为中转,文件多拷贝了一遍,不是很高效。服务器为用户生成表单和临时凭证,用户直接上传文件到OSS。 第一种方法比较简单,与普通的上传文件一样。下面我们用的是第二种方法: 首先在app/controllers/objects_controller.rb中增加一个#new方法,用于生成上传表单: def new @bucket_name = params[:bucket_id] @prefix = params[:prefix] @bucket = OSS.client.get_bucket(@bucket_name) @options = { :prefix => @prefix, :redirect => 'http://localhost:3000/buckets/' }end 然后编辑app/views/objects/new.html.erb: <h2>Upload object</h2><%= upload_form(@bucket, @options) do %> <table class="table table-striped"> <tr> <td><label>Bucket:</label></td> <td><%= @bucket.name %></td> </tr> <tr> <td><label>Prefix:</label></td> <td><%= @prefix %></td> </tr> <tr> <td><label>Select file:</label></td> <td><input type="file" name="file" style="display:inline" /></td> </tr> <tr> <td colspan="2"> <input type="submit" class="btn btn-default" value="Upload" /> <span>&nbsp;&nbsp</span> <%= link_to 'Back', objects_path(@bucket_name, @prefix) %> </td> </tr> </table><% end %> 其中upload_form是SDK提供的一个方便用户生成上传表单的辅助函数,在SDK的代码rails/aliyun_oss_helper.rb中。用户需要将其拷贝到app/helpers/目录下。完成之后运行rails s,然后访问http://localhost:3000/buckets/my-bucket/objects/new就能够上传文件了。 最后记得保存代码: git add .git commit -m "add upload object feature"8. 添加样式为了让界面更好看一些,我们可以添加一点样式(CSS)。 首先下载bootstrap,解压后将bootstrap.min.css拷贝到app/assets/stylesheets/下。 然后在修改app/views/layouts/application.html.erb,将yield一行改成: <div id="main"> <%= yield %> </div> 这会为每个页面添加一个id为main的<div>,然后修改app/assets/stylesheets/application.css,加入以下内容: body { text-align: center;}div#main { text-align: left; width: 1024px; margin: 0 auto;} 这会让网页的主体内容居中显示。通过添加简单的样式,我们的页面是不是更加赏心悦目了呢? 至此,一个简单的demo就完成了。完整的demo代码请参看 Alibaba Cloud OSS Rails Demo。

2019-12-01 23:14:34 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档与Rails集成在Rails应用中使用OSS Ruby SDK只需要在Gemfile中添加以下依赖: gem 'aliyun-sdk', '~> 0.3.0然后在使用OSS时引入依赖就可以了: require 'aliyun/oss'另外,SDK的rails/目录下提供一些方便用户使用的辅助代码。 下面我们将利用SDK来实现一个简单的OSS文件管理器(oss-manager),最终包含以下功能: 列出用户所有的Bucket列出Bucket下所有的文件,按目录层级列出上传文件下载文件 1. 创建项目先安装Rails,然后创建一个Rails应用,oss-manager: gem install railsrails new oss-manager作为一个好的习惯,使用git管理项目代码: cd oss-managergit initgit add .git commit -m "init project"2. 添加SDK依赖编辑oss-manager/Gemfile,向其中加入SDK的依赖: gem 'aliyun-sdk', '~> 0.3.0'然后在oss-manager/下执行: bundle install保存这一步所做的更改: git add .git commit -m "add aliyun-sdk dependency"3. 初始化OSS Client为了避免在项目中用到OSS Client的地方都要初始化,我们在项目中添加一个初始化文件,方便在项目中使用OSS Client: # oss-manager/config/initializers/aliyun_oss_init.rbrequire 'aliyun/oss'module OSS def self.client unless @client Aliyun::Common::Logging.set_log_file('./log/oss_sdk.log') @client = Aliyun::OSS::Client.new( endpoint: Rails.application.secrets.aliyun_oss['endpoint'], access_key_id: Rails.application.secrets.aliyun_oss['access_key_id'], access_key_secret: Rails.application.secrets.aliyun_oss['access_key_secret'] ) end @client endend 上面的代码在SDK的rails/目录下可以找到。这样初始化后,在项目中使用OSSClient就非常方便: buckets = OSS.client.list_buckets其中endpoint和AccessKeyId/AccessKeySecret保存在oss-manager/conf/secrets.yml中,例如: development: secret_key_base: xxxx aliyun_oss: endpoint: xxxx access_key_id: aaaa access_key_secret: bbbb 保存代码: git add .git commit -m "add aliyun-sdk initializer"4. 实现List buckets功能首先用rails生成管理Buckets的controller: rails g controller buckets index这样会在oss-manager中生成以下文件: app/controller/buckets_controller.rb Buckets相关的逻辑代码app/views/buckets/index.html.erb Buckets相关的展示代码app/helpers/buckets_helper.rb 一些辅助函数 首先编辑buckets_controller.rb,调用OSS Client,将list_buckets的结果存放在@buckets变量中: class BucketsController < ApplicationController def index @buckets = OSS.client.list_buckets endend 然后编辑views/buckets/index.html.erb,将Bucket列表展示出来: <h1>Buckets</h1><table class="table table-striped"> <tr> <th>Name</th> <th>Location</th> <th>CreationTime</th> </tr> <% @buckets.each do |bucket| %> <tr> <td><%= link_to bucket.name, bucket_objects_path(bucket.name) %></td> <td><%= bucket.location %></td> <td><%= bucket.creation_time.localtime.to_s %></td> </tr> <% end %></table> 其中bucket_objects_path是一个辅助函数,在app/helpers/buckets_helper.rb中: module BucketsHelper def bucket_objects_path(bucket_name) "/buckets/#{bucket_name}/objects" endend 这样就完成了列出所有Bucket的功能。在运行之前,我们还需要配置Rails的路由,使得我们在浏览器中输入的地址能够调用正确的逻辑。编辑config/routes.rb,增加一条: resources :buckets do resources :objectsend好了,在oss-manager/下输入rails s以启动rails server,然后在浏览器中输入http://localhost:3000/buckets/就能看到Bucket列表了。 最后保存一下代码: git add .git commit -m "add list buckets feature"5. 实现List objects功能首先生成一个管理Objects的controller: rails g controller objects index然后编辑app/controllers/objects_controller.rb: class ObjectsController < ApplicationController def index @bucket_name = params[:bucket_id] @prefix = params[:prefix] @bucket = OSS.client.get_bucket(@bucket_name) @objects = @bucket.list_objects(:prefix => @prefix, :delimiter => '/') endend 上面的代码首先从URL的参数中获取Bucket名字,为了只按目录层级显示,我们还需要一个前缀。然后调用OSS Client的list_objects接口获取文件列表。注意,这里获取的是指定前缀下,并且以’/‘为分界的文件。这样做是为也按目录层级列出文件。请参考管理文件 接下来编辑app/views/objects/index.html.erb: <h1>Objects in <%= @bucket_name %></h1><p> <%= link_to 'Upload file', new_object_path(@bucket_name, @prefix) %></p><table class="table table-striped"> <tr> <th>Key</th> <th>Type</th> <th>Size</th> <th>LastModified</th> </tr> <tr> <td><%= link_to '../', with_prefix(upper_dir(@prefix)) %></td> <td>Directory</td> <td>N/A</td> <td>N/A</td> </tr> <% @objects.each do |object| %> <tr> <% if object.is_a?(Aliyun::OSS::Object) %> <td><%= link_to remove_prefix(object.key, @prefix), @bucket.object_url(object.key) %></td> <td><%= object.type %></td> <td><%= number_to_human_size(object.size) %></td> <td><%= object.last_modified.localtime.to_s %></td> <% else %> <td><%= link_to remove_prefix(object, @prefix), with_prefix(object) %></td> <td>Directory</td> <td>N/A</td> <td>N/A</td> <% end %> </tr> <% end %></table> 上面的代码将文件按目录结构显示,主要逻辑是: 总是在第一个显示’../‘指向上级目录对于Common prefix,显示为目录对于Object,显示为文件 上面的代码中用到了with_prefix, remove_prefix等一些辅助函数,它们定义在app/helpers/objects_helper.rb中: module ObjectsHelper def with_prefix(prefix) "?prefix=#{prefix}" end def remove_prefix(key, prefix) key.sub(/^#{prefix}/, '') end def upper_dir(dir) dir.sub(/[^\/]+\/$/, '') if dir end def new_object_path(bucket_name, prefix = nil) "/buckets/#{bucket_name}/objects/new/#{with_prefix(prefix)}" end def objects_path(bucket_name, prefix = nil) "/buckets/#{bucket_name}/objects/#{with_prefix(prefix)}" endend 完成之后运行rails s,然后在浏览器中输入地址http://localhost:3000/buckets/my-bucket/objects/就可以查看文件列表了。 惯例保存代码: git add .git commit -m "add list objects feature"6. 下载文件注意到在上一步显示文件列表时,我们为每个文件也添加了一个链接: <td><%= link_to remove_prefix(object.key, @prefix), @bucket.object_url(object.key) %></td> 其中Bucket#object_url是一个为文件生成临时URL的方法,参考下载文件 7. 上传文件在Rails这种服务端应用中,用户上传文件有两种办法: 用户先将文件上传到Rails的服务器上,服务器再将文件上传到OSS。这样做需要Rails服务器作为中转,文件多拷贝了一遍,不是很高效。服务器为用户生成表单和临时凭证,用户直接上传文件到OSS。 第一种方法比较简单,与普通的上传文件一样。下面我们用的是第二种方法: 首先在app/controllers/objects_controller.rb中增加一个#new方法,用于生成上传表单: def new @bucket_name = params[:bucket_id] @prefix = params[:prefix] @bucket = OSS.client.get_bucket(@bucket_name) @options = { :prefix => @prefix, :redirect => 'http://localhost:3000/buckets/' }end 然后编辑app/views/objects/new.html.erb: <h2>Upload object</h2><%= upload_form(@bucket, @options) do %> <table class="table table-striped"> <tr> <td><label>Bucket:</label></td> <td><%= @bucket.name %></td> </tr> <tr> <td><label>Prefix:</label></td> <td><%= @prefix %></td> </tr> <tr> <td><label>Select file:</label></td> <td><input type="file" name="file" style="display:inline" /></td> </tr> <tr> <td colspan="2"> <input type="submit" class="btn btn-default" value="Upload" /> <span>&nbsp;&nbsp</span> <%= link_to 'Back', objects_path(@bucket_name, @prefix) %> </td> </tr> </table><% end %> 其中upload_form是SDK提供的一个方便用户生成上传表单的辅助函数,在SDK的代码rails/aliyun_oss_helper.rb中。用户需要将其拷贝到app/helpers/目录下。完成之后运行rails s,然后访问http://localhost:3000/buckets/my-bucket/objects/new就能够上传文件了。 最后记得保存代码: git add .git commit -m "add upload object feature"8. 添加样式为了让界面更好看一些,我们可以添加一点样式(CSS)。 首先下载bootstrap,解压后将bootstrap.min.css拷贝到app/assets/stylesheets/下。 然后在修改app/views/layouts/application.html.erb,将yield一行改成: <div id="main"> <%= yield %> </div> 这会为每个页面添加一个id为main的<div>,然后修改app/assets/stylesheets/application.css,加入以下内容: body { text-align: center;}div#main { text-align: left; width: 1024px; margin: 0 auto;} 这会让网页的主体内容居中显示。通过添加简单的样式,我们的页面是不是更加赏心悦目了呢? 至此,一个简单的demo就完成了。完整的demo代码请参看 Alibaba Cloud OSS Rails Demo。

2019-12-01 23:14:34 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档与Rails集成在Rails应用中使用OSS Ruby SDK只需要在Gemfile中添加以下依赖: gem 'aliyun-sdk', '~> 0.3.0然后在使用OSS时引入依赖就可以了: require 'aliyun/oss'另外,SDK的rails/目录下提供一些方便用户使用的辅助代码。 下面我们将利用SDK来实现一个简单的OSS文件管理器(oss-manager),最终包含以下功能: 列出用户所有的Bucket列出Bucket下所有的文件,按目录层级列出上传文件下载文件 1. 创建项目先安装Rails,然后创建一个Rails应用,oss-manager: gem install railsrails new oss-manager作为一个好的习惯,使用git管理项目代码: cd oss-managergit initgit add .git commit -m "init project"2. 添加SDK依赖编辑oss-manager/Gemfile,向其中加入SDK的依赖: gem 'aliyun-sdk', '~> 0.3.0'然后在oss-manager/下执行: bundle install保存这一步所做的更改: git add .git commit -m "add aliyun-sdk dependency"3. 初始化OSS Client为了避免在项目中用到OSS Client的地方都要初始化,我们在项目中添加一个初始化文件,方便在项目中使用OSS Client: # oss-manager/config/initializers/aliyun_oss_init.rbrequire 'aliyun/oss'module OSS def self.client unless @client Aliyun::Common::Logging.set_log_file('./log/oss_sdk.log') @client = Aliyun::OSS::Client.new( endpoint: Rails.application.secrets.aliyun_oss['endpoint'], access_key_id: Rails.application.secrets.aliyun_oss['access_key_id'], access_key_secret: Rails.application.secrets.aliyun_oss['access_key_secret'] ) end @client endend 上面的代码在SDK的rails/目录下可以找到。这样初始化后,在项目中使用OSSClient就非常方便: buckets = OSS.client.list_buckets其中endpoint和AccessKeyId/AccessKeySecret保存在oss-manager/conf/secrets.yml中,例如: development: secret_key_base: xxxx aliyun_oss: endpoint: xxxx access_key_id: aaaa access_key_secret: bbbb 保存代码: git add .git commit -m "add aliyun-sdk initializer"4. 实现List buckets功能首先用rails生成管理Buckets的controller: rails g controller buckets index这样会在oss-manager中生成以下文件: app/controller/buckets_controller.rb Buckets相关的逻辑代码app/views/buckets/index.html.erb Buckets相关的展示代码app/helpers/buckets_helper.rb 一些辅助函数 首先编辑buckets_controller.rb,调用OSS Client,将list_buckets的结果存放在@buckets变量中: class BucketsController < ApplicationController def index @buckets = OSS.client.list_buckets endend 然后编辑views/buckets/index.html.erb,将Bucket列表展示出来: <h1>Buckets</h1><table class="table table-striped"> <tr> <th>Name</th> <th>Location</th> <th>CreationTime</th> </tr> <% @buckets.each do |bucket| %> <tr> <td><%= link_to bucket.name, bucket_objects_path(bucket.name) %></td> <td><%= bucket.location %></td> <td><%= bucket.creation_time.localtime.to_s %></td> </tr> <% end %></table> 其中bucket_objects_path是一个辅助函数,在app/helpers/buckets_helper.rb中: module BucketsHelper def bucket_objects_path(bucket_name) "/buckets/#{bucket_name}/objects" endend 这样就完成了列出所有Bucket的功能。在运行之前,我们还需要配置Rails的路由,使得我们在浏览器中输入的地址能够调用正确的逻辑。编辑config/routes.rb,增加一条: resources :buckets do resources :objectsend好了,在oss-manager/下输入rails s以启动rails server,然后在浏览器中输入http://localhost:3000/buckets/就能看到Bucket列表了。 最后保存一下代码: git add .git commit -m "add list buckets feature"5. 实现List objects功能首先生成一个管理Objects的controller: rails g controller objects index然后编辑app/controllers/objects_controller.rb: class ObjectsController < ApplicationController def index @bucket_name = params[:bucket_id] @prefix = params[:prefix] @bucket = OSS.client.get_bucket(@bucket_name) @objects = @bucket.list_objects(:prefix => @prefix, :delimiter => '/') endend 上面的代码首先从URL的参数中获取Bucket名字,为了只按目录层级显示,我们还需要一个前缀。然后调用OSS Client的list_objects接口获取文件列表。注意,这里获取的是指定前缀下,并且以’/‘为分界的文件。这样做是为也按目录层级列出文件。请参考管理文件 接下来编辑app/views/objects/index.html.erb: <h1>Objects in <%= @bucket_name %></h1><p> <%= link_to 'Upload file', new_object_path(@bucket_name, @prefix) %></p><table class="table table-striped"> <tr> <th>Key</th> <th>Type</th> <th>Size</th> <th>LastModified</th> </tr> <tr> <td><%= link_to '../', with_prefix(upper_dir(@prefix)) %></td> <td>Directory</td> <td>N/A</td> <td>N/A</td> </tr> <% @objects.each do |object| %> <tr> <% if object.is_a?(Aliyun::OSS::Object) %> <td><%= link_to remove_prefix(object.key, @prefix), @bucket.object_url(object.key) %></td> <td><%= object.type %></td> <td><%= number_to_human_size(object.size) %></td> <td><%= object.last_modified.localtime.to_s %></td> <% else %> <td><%= link_to remove_prefix(object, @prefix), with_prefix(object) %></td> <td>Directory</td> <td>N/A</td> <td>N/A</td> <% end %> </tr> <% end %></table> 上面的代码将文件按目录结构显示,主要逻辑是: 总是在第一个显示’../‘指向上级目录对于Common prefix,显示为目录对于Object,显示为文件 上面的代码中用到了with_prefix, remove_prefix等一些辅助函数,它们定义在app/helpers/objects_helper.rb中: module ObjectsHelper def with_prefix(prefix) "?prefix=#{prefix}" end def remove_prefix(key, prefix) key.sub(/^#{prefix}/, '') end def upper_dir(dir) dir.sub(/[^\/]+\/$/, '') if dir end def new_object_path(bucket_name, prefix = nil) "/buckets/#{bucket_name}/objects/new/#{with_prefix(prefix)}" end def objects_path(bucket_name, prefix = nil) "/buckets/#{bucket_name}/objects/#{with_prefix(prefix)}" endend 完成之后运行rails s,然后在浏览器中输入地址http://localhost:3000/buckets/my-bucket/objects/就可以查看文件列表了。 惯例保存代码: git add .git commit -m "add list objects feature"6. 下载文件注意到在上一步显示文件列表时,我们为每个文件也添加了一个链接: <td><%= link_to remove_prefix(object.key, @prefix), @bucket.object_url(object.key) %></td> 其中Bucket#object_url是一个为文件生成临时URL的方法,参考下载文件 7. 上传文件在Rails这种服务端应用中,用户上传文件有两种办法: 用户先将文件上传到Rails的服务器上,服务器再将文件上传到OSS。这样做需要Rails服务器作为中转,文件多拷贝了一遍,不是很高效。服务器为用户生成表单和临时凭证,用户直接上传文件到OSS。 第一种方法比较简单,与普通的上传文件一样。下面我们用的是第二种方法: 首先在app/controllers/objects_controller.rb中增加一个#new方法,用于生成上传表单: def new @bucket_name = params[:bucket_id] @prefix = params[:prefix] @bucket = OSS.client.get_bucket(@bucket_name) @options = { :prefix => @prefix, :redirect => 'http://localhost:3000/buckets/' }end 然后编辑app/views/objects/new.html.erb: <h2>Upload object</h2><%= upload_form(@bucket, @options) do %> <table class="table table-striped"> <tr> <td><label>Bucket:</label></td> <td><%= @bucket.name %></td> </tr> <tr> <td><label>Prefix:</label></td> <td><%= @prefix %></td> </tr> <tr> <td><label>Select file:</label></td> <td><input type="file" name="file" style="display:inline" /></td> </tr> <tr> <td colspan="2"> <input type="submit" class="btn btn-default" value="Upload" /> <span>&nbsp;&nbsp</span> <%= link_to 'Back', objects_path(@bucket_name, @prefix) %> </td> </tr> </table><% end %> 其中upload_form是SDK提供的一个方便用户生成上传表单的辅助函数,在SDK的代码rails/aliyun_oss_helper.rb中。用户需要将其拷贝到app/helpers/目录下。完成之后运行rails s,然后访问http://localhost:3000/buckets/my-bucket/objects/new就能够上传文件了。 最后记得保存代码: git add .git commit -m "add upload object feature"8. 添加样式为了让界面更好看一些,我们可以添加一点样式(CSS)。 首先下载bootstrap,解压后将bootstrap.min.css拷贝到app/assets/stylesheets/下。 然后在修改app/views/layouts/application.html.erb,将yield一行改成: <div id="main"> <%= yield %> </div> 这会为每个页面添加一个id为main的<div>,然后修改app/assets/stylesheets/application.css,加入以下内容: body { text-align: center;}div#main { text-align: left; width: 1024px; margin: 0 auto;} 这会让网页的主体内容居中显示。通过添加简单的样式,我们的页面是不是更加赏心悦目了呢? 至此,一个简单的demo就完成了。完整的demo代码请参看 Alibaba Cloud OSS Rails Demo。

2019-12-01 23:14:35 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档与Rails集成在Rails应用中使用OSS Ruby SDK只需要在Gemfile中添加以下依赖: gem 'aliyun-sdk', '~> 0.3.0然后在使用OSS时引入依赖就可以了: require 'aliyun/oss'另外,SDK的rails/目录下提供一些方便用户使用的辅助代码。 下面我们将利用SDK来实现一个简单的OSS文件管理器(oss-manager),最终包含以下功能: 列出用户所有的Bucket列出Bucket下所有的文件,按目录层级列出上传文件下载文件 1. 创建项目先安装Rails,然后创建一个Rails应用,oss-manager: gem install railsrails new oss-manager作为一个好的习惯,使用git管理项目代码: cd oss-managergit initgit add .git commit -m "init project"2. 添加SDK依赖编辑oss-manager/Gemfile,向其中加入SDK的依赖: gem 'aliyun-sdk', '~> 0.3.0'然后在oss-manager/下执行: bundle install保存这一步所做的更改: git add .git commit -m "add aliyun-sdk dependency"3. 初始化OSS Client为了避免在项目中用到OSS Client的地方都要初始化,我们在项目中添加一个初始化文件,方便在项目中使用OSS Client: # oss-manager/config/initializers/aliyun_oss_init.rbrequire 'aliyun/oss'module OSS def self.client unless @client Aliyun::Common::Logging.set_log_file('./log/oss_sdk.log') @client = Aliyun::OSS::Client.new( endpoint: Rails.application.secrets.aliyun_oss['endpoint'], access_key_id: Rails.application.secrets.aliyun_oss['access_key_id'], access_key_secret: Rails.application.secrets.aliyun_oss['access_key_secret'] ) end @client endend 上面的代码在SDK的rails/目录下可以找到。这样初始化后,在项目中使用OSSClient就非常方便: buckets = OSS.client.list_buckets其中endpoint和AccessKeyId/AccessKeySecret保存在oss-manager/conf/secrets.yml中,例如: development: secret_key_base: xxxx aliyun_oss: endpoint: xxxx access_key_id: aaaa access_key_secret: bbbb 保存代码: git add .git commit -m "add aliyun-sdk initializer"4. 实现List buckets功能首先用rails生成管理Buckets的controller: rails g controller buckets index这样会在oss-manager中生成以下文件: app/controller/buckets_controller.rb Buckets相关的逻辑代码app/views/buckets/index.html.erb Buckets相关的展示代码app/helpers/buckets_helper.rb 一些辅助函数 首先编辑buckets_controller.rb,调用OSS Client,将list_buckets的结果存放在@buckets变量中: class BucketsController < ApplicationController def index @buckets = OSS.client.list_buckets endend 然后编辑views/buckets/index.html.erb,将Bucket列表展示出来: <h1>Buckets</h1><table class="table table-striped"> <tr> <th>Name</th> <th>Location</th> <th>CreationTime</th> </tr> <% @buckets.each do |bucket| %> <tr> <td><%= link_to bucket.name, bucket_objects_path(bucket.name) %></td> <td><%= bucket.location %></td> <td><%= bucket.creation_time.localtime.to_s %></td> </tr> <% end %></table> 其中bucket_objects_path是一个辅助函数,在app/helpers/buckets_helper.rb中: module BucketsHelper def bucket_objects_path(bucket_name) "/buckets/#{bucket_name}/objects" endend 这样就完成了列出所有Bucket的功能。在运行之前,我们还需要配置Rails的路由,使得我们在浏览器中输入的地址能够调用正确的逻辑。编辑config/routes.rb,增加一条: resources :buckets do resources :objectsend好了,在oss-manager/下输入rails s以启动rails server,然后在浏览器中输入http://localhost:3000/buckets/就能看到Bucket列表了。 最后保存一下代码: git add .git commit -m "add list buckets feature"5. 实现List objects功能首先生成一个管理Objects的controller: rails g controller objects index然后编辑app/controllers/objects_controller.rb: class ObjectsController < ApplicationController def index @bucket_name = params[:bucket_id] @prefix = params[:prefix] @bucket = OSS.client.get_bucket(@bucket_name) @objects = @bucket.list_objects(:prefix => @prefix, :delimiter => '/') endend 上面的代码首先从URL的参数中获取Bucket名字,为了只按目录层级显示,我们还需要一个前缀。然后调用OSS Client的list_objects接口获取文件列表。注意,这里获取的是指定前缀下,并且以’/‘为分界的文件。这样做是为也按目录层级列出文件。请参考管理文件 接下来编辑app/views/objects/index.html.erb: <h1>Objects in <%= @bucket_name %></h1><p> <%= link_to 'Upload file', new_object_path(@bucket_name, @prefix) %></p><table class="table table-striped"> <tr> <th>Key</th> <th>Type</th> <th>Size</th> <th>LastModified</th> </tr> <tr> <td><%= link_to '../', with_prefix(upper_dir(@prefix)) %></td> <td>Directory</td> <td>N/A</td> <td>N/A</td> </tr> <% @objects.each do |object| %> <tr> <% if object.is_a?(Aliyun::OSS::Object) %> <td><%= link_to remove_prefix(object.key, @prefix), @bucket.object_url(object.key) %></td> <td><%= object.type %></td> <td><%= number_to_human_size(object.size) %></td> <td><%= object.last_modified.localtime.to_s %></td> <% else %> <td><%= link_to remove_prefix(object, @prefix), with_prefix(object) %></td> <td>Directory</td> <td>N/A</td> <td>N/A</td> <% end %> </tr> <% end %></table> 上面的代码将文件按目录结构显示,主要逻辑是: 总是在第一个显示’../‘指向上级目录对于Common prefix,显示为目录对于Object,显示为文件 上面的代码中用到了with_prefix, remove_prefix等一些辅助函数,它们定义在app/helpers/objects_helper.rb中: module ObjectsHelper def with_prefix(prefix) "?prefix=#{prefix}" end def remove_prefix(key, prefix) key.sub(/^#{prefix}/, '') end def upper_dir(dir) dir.sub(/[^\/]+\/$/, '') if dir end def new_object_path(bucket_name, prefix = nil) "/buckets/#{bucket_name}/objects/new/#{with_prefix(prefix)}" end def objects_path(bucket_name, prefix = nil) "/buckets/#{bucket_name}/objects/#{with_prefix(prefix)}" endend 完成之后运行rails s,然后在浏览器中输入地址http://localhost:3000/buckets/my-bucket/objects/就可以查看文件列表了。 惯例保存代码: git add .git commit -m "add list objects feature"6. 下载文件注意到在上一步显示文件列表时,我们为每个文件也添加了一个链接: <td><%= link_to remove_prefix(object.key, @prefix), @bucket.object_url(object.key) %></td> 其中Bucket#object_url是一个为文件生成临时URL的方法,参考下载文件 7. 上传文件在Rails这种服务端应用中,用户上传文件有两种办法: 用户先将文件上传到Rails的服务器上,服务器再将文件上传到OSS。这样做需要Rails服务器作为中转,文件多拷贝了一遍,不是很高效。服务器为用户生成表单和临时凭证,用户直接上传文件到OSS。 第一种方法比较简单,与普通的上传文件一样。下面我们用的是第二种方法: 首先在app/controllers/objects_controller.rb中增加一个#new方法,用于生成上传表单: def new @bucket_name = params[:bucket_id] @prefix = params[:prefix] @bucket = OSS.client.get_bucket(@bucket_name) @options = { :prefix => @prefix, :redirect => 'http://localhost:3000/buckets/' }end 然后编辑app/views/objects/new.html.erb: <h2>Upload object</h2><%= upload_form(@bucket, @options) do %> <table class="table table-striped"> <tr> <td><label>Bucket:</label></td> <td><%= @bucket.name %></td> </tr> <tr> <td><label>Prefix:</label></td> <td><%= @prefix %></td> </tr> <tr> <td><label>Select file:</label></td> <td><input type="file" name="file" style="display:inline" /></td> </tr> <tr> <td colspan="2"> <input type="submit" class="btn btn-default" value="Upload" /> <span>&nbsp;&nbsp</span> <%= link_to 'Back', objects_path(@bucket_name, @prefix) %> </td> </tr> </table><% end %> 其中upload_form是SDK提供的一个方便用户生成上传表单的辅助函数,在SDK的代码rails/aliyun_oss_helper.rb中。用户需要将其拷贝到app/helpers/目录下。完成之后运行rails s,然后访问http://localhost:3000/buckets/my-bucket/objects/new就能够上传文件了。 最后记得保存代码: git add .git commit -m "add upload object feature"8. 添加样式为了让界面更好看一些,我们可以添加一点样式(CSS)。 首先下载bootstrap,解压后将bootstrap.min.css拷贝到app/assets/stylesheets/下。 然后在修改app/views/layouts/application.html.erb,将yield一行改成: <div id="main"> <%= yield %> </div> 这会为每个页面添加一个id为main的<div>,然后修改app/assets/stylesheets/application.css,加入以下内容: body { text-align: center;}div#main { text-align: left; width: 1024px; margin: 0 auto;} 这会让网页的主体内容居中显示。通过添加简单的样式,我们的页面是不是更加赏心悦目了呢? 至此,一个简单的demo就完成了。完整的demo代码请参看 Alibaba Cloud OSS Rails Demo。

2019-12-01 23:14:35 0 浏览量 回答数 0

问题

中间件性能初赛关于windows环境下的一些文档汇总

玄弟 2019-12-01 21:45:14 10515 浏览量 回答数 4

问题

Ruby-SDK之如何实现Rails应用?

青衫无名 2019-12-01 21:46:56 1481 浏览量 回答数 0

问题

容器服务 发布历史

青蛙跳 2019-12-01 21:32:38 622 浏览量 回答数 0

回答

Vue 相对不于 React 的一个优点是它易于理解和学习,且在国内占大多数。咱们可以在 Vue 的帮助下创建任何 Web 应用程序。 因此,时时了解一些新出现又好用的Vue 开源项目也是挺重要,一方面可以帮助咱们更加高效的开发,另一方面,咱们也可以模范学习其精华部分。 接下来看看新出的有哪些好用的开源项目。 uiGradients 网址: http://uigradients.com/ GitHub: https://github.com/ghosh/uiGradients GitHub Stars: 4.6k 彩色阵列和出色的UX使是这个项目的一个亮点,渐变仍然是网页设计中日益增长的趋势。 咱们可以选择所需的颜色,并可以获得所有可能的渐变,并获取对应的 CSS 代码, 赶紧收藏起来吧。 CSSFX CSS 过度效果的集合 网址: https://cssfx.dev GitHub: https://github.com/jolaleye/cssfx GitHub Stars: 3.5k CSSFX 里面有很多 CSS 过滤效果,咱们可以根据需求选择特定的动画,点击对应的效果即可看到生成的 CSS 代码,动手搞起来吧。 Sing App Vue Dashboard 一个管理模板 网址: https://flatlogic.com/templat... GitHub: https://github.com/flatlogic/sing-app-vue-dashboard GitHub Stars: 254 事例:https://flatlogic.com/templates/sing-app-vue-dashboard/demo 文档:https://demo.flatlogic.com/sing-app/documentation/ 这是基于最新 Vue 和 Bootstrap 免费和开源的管理模板,其实跟咱们国内的 vue-admin-template 差不多。咱们不一定要使用它,但可以研究学习源码,相信可以学到很多实用的技巧,加油少年。 Vue Storefront 网址: https://www.vuestorefront.io GitHub: https://github.com/DivanteLtd/vue-storefront GitHub Stars: 5.8k 这是一个PWA,可以连接到任何后端(或几乎任何后端)。这个项目的主要优点是使用了无头架构。这是一种全面的解决方案,为咱们提供了许多可能性(巨大的支持稳步增长的社区,服务器端渲染,将改善网页SEO,移动优先的方法和离线模式。 Faviator 图标生成的库 网址: https://www.faviator.xyz GitHub: https://www.faviator.xyz/playground GitHub Stars: 94 如果需要创建一个图标增加体验度。 可以使用任何 Google 字体以及任何颜色。只需通过首选的配置,然后选择PNG,SVG或JPG格式即可。 iView Vue UI 组件库 网址: https://iviewui.com/ GitHub: https://github.com/iview/iview GitHub Stars: 22.8k 不断迭代更新使这组UI组件成为具有任何技能水平的开发人员的不错选择。 要使用iView,需要对单一文件组件有充分的了解,该项目具有友好的API和大量文档。 Postwoman API请求构建器 网址: https://postwoman.io/ GitHub: https://github.com/liyasthomas/postwoman GitHub Stars: 10.5k 这个与 Postman 类似。 它是免费的,具有许多参与者,并且具有多平台和多设备支持。 这个工具真的非常快,并且有大量的更新。 该工具的创建者声称在不久的将来会有更多功能。 Vue Virtual Scroller 快速滚动 网址: https://akryum.github.io/vue-virtual-scroller/#/ GitHub: https://github.com/Akryum/vue-virtual-scroller GitHub Stars: 3.4k Vue Virtual Scroller具有四个主要组件。 RecycleScroller可以渲染列表中的可见项。 如果咱们不知道数据具体的数量,最好使用DynamicScroller。 DynamicScrollerItem将所有内容包装在DynamicScroller中(以处理大小更改)。 IdState简化了本地状态管理(在RecycleScroller内部)。 Mint UI 移动端的 UI 库 网址: http://mint-ui.github.io/#!/en GitHub: https://github.com/ElemeFE/mint-ui GitHub Stars: 15.2k 使用现成的CSS和JS组件更快地构建移动应用程序。使用此工具,咱们不必承担文件大小过大的风险,因为可以按需加载。动画由CSS3处理,由此来提高性能。 V Calendar 用于构建日历的无依赖插件 网址: https://vcalendar.io GitHub:https://github.com/nathanreyes/v-calendar GitHub Stars: 1.6k 您可以选择不同的视觉指示器来装饰日历。 V Calendar还为咱们提供了三种日期选择模式: 单选 多选 日期范围 Vue Design System 一组UI工具 网址: https://vueds.com/ GitHub: https://github.com/viljamis/vue-design-system GitHub Stars: 1.7k 这是一种组织良好的工具,对于任何web开发团队来说,它的命名都很容易理解。其中一个很大的优点是使用了更漂亮的代码格式化器,它可以在提交到Git之前自动排列代码。 Proppy UI组件的功能道具组合 网址: https://proppyjs.com GitHub: https://github.com/fahad19/proppy GitHub Stars: 856 ProppyJS 是一个很小的库,用于组合道具,它附带了各种集成包,让您可以自由地使用它流行的渲染库。 我们的想法是首先将Component的行为表达为props,然后使用Proppy的相同API将其连接到您的Component(可以是React,Vue.js或Preact)。 API还允许您访问其他应用程序范围的依赖项(如使用Redux的商店),以方便组件树中的任何位置。 Light Blue Vue Admin vue 后台展示模板 网址: https://flatlogic.com/templates/light-blue-vue-lite GitHub: https://github.com/flatlogic/light-blue-vue-admin GitHub Stars: 79 事例: https://demo.flatlogic.com/light-blue-vue-admin/#/app/dashboard 文档: https://demo.flatlogic.com/light-blue/documentation/ 模板是用Vue CLI和Bootstrap 4构建的。从演示中可以看到,这个模板有一组非常基本的页面:排版、地图、图表、聊天界面等。如果咱们需要一个扩展的模板,可以看看Light Blue Vue Full,它有60多个组件,无 jquery,有两个颜色主题。 Vue API Query 为 REST API 构建请求 GitHub: https://github.com/robsontenorio/vue-api-query GitHub Stars: 1.1k 关于这个项目没什么好说的。它所做的与描述行中所写的完全一样:它帮助咱们构建REST API的请求。 Vue Grid Layout Vue 的网格布局 Website: https://jbaysolutions.github.io/vue-grid-layout/examples/01-basic.html GitHub: https://github.com/jbaysolutions/vue-grid-layout GitHub Stars: 3.1k 所有网格相关问题的简单解决方案。它有静态的、可调整大小的和可拖动的小部件。还是响应和布局可以恢复和序列化。如果还需要再添加一个小部件,则不必重新构建所有网格。 Vue Content Loader 创建一个占位符加载 Website: http://danilowoz.com/create-vue-content-loader GitHub: https://github.com/egoist/vue-content-loader GitHub Stars: 2k 当咱们开发网站或者 APP 时,遇到内容过多加载速度慢时,会导致用户打开页面有大量空白页,vue-content-loader正是解决这个问题的一个组件,使加载内容之前生成一个dom模板,提高用户体验。 Echarts with Vue2.0 数据可视化 Website: https://simonzhangiter.github.io/DataVisualization/#/dashboard GitHub: https://github.com/SimonZhangITer/DataVisualization GitHub Stars: 1.3k 在图片中,咱们可以看到非常漂亮的图表。这个项目使任何数据都更具可读性,更容易理解和解释。它允许咱们在任何数据集中轻松地检测趋势和模式。 Vue.js Modal 高度可定制的模态框 Website: http://vue-js-modal.yev.io/ GitHub: https://github.com/euvl/vue-js-modal GitHub Stars: 2.9k 可以在该网站上查看所有不同类型的模态。 有15个按钮,按任意一个按钮,看到一个模态示例。 Vuesax 框架组件 Website: https://lusaxweb.github.io/vuesax/ GitHub: https://github.com/lusaxweb/vuesax GitHub Stars: 3.7k 这个项目在社区中很受欢迎。 它使咱们可以为每个组件设计不同的风格。 Vuesax的创建者强调,每个Web开发人员在进行Web设计时都应有选择的自由。 Vue2 Animate vue2.0 —使用animate.css 构建项目和创建组件 Website: https://the-allstars.com/vue2-animate/ GitHub: https://github.com/asika32764/vue2-animate GitHub Stars: 1.1k 这个库是跨浏览器的,咱们可以选择从5种类型的动画: rotate,slide,fade,bounce和zoom。在网站上有一个演示。动画的默认持续时间是1秒,但是咱们可以自定义该参数。 Vuetensils Vue.js的工具集 Website: https://vuetensils.stegosource.com/ GitHub: https://github.com/stegosource/vuetensils GitHub Stars: 111 这个UI库有一个标准的功能,但是最酷的是它没有额外的样式。你可以让设计尽可能的个性化,应用所有的需求。只需编写需要的样式,将其添加到项目中,并包含需要的尽可能多的组件。

茶什i 2020-01-09 10:39:02 0 浏览量 回答数 0

问题

Go语言编程有哪些利与弊?编程时如何判断是否应该用Go?

有只黑白猫 2020-01-06 13:37:29 15 浏览量 回答数 1

回答

ReAliDDNS基于云解析API的DDNSC 基于DTSDAO发布的AliDDNS 3.0继续开发至3.6.0,算是一个成熟的版本了,今天刚编译出来,分享给大家。 需要的下载吧 AliDDNS v3.6.0 v3.6.0更新内容: 1、版本号更新至3.6.0 2、著作信息放入系统托盘右键菜单“关于”。 3、增加随系统启动功能。 4、增加软件启动隐藏至托盘功能。 5、增加日志记录、超过10000行自动转储至软件目录功能。 6、软件功能实现根据使用习惯调整。 7、配置文件名称更改,参数增加。 8、完善窗体标签功能实现时的更新逻辑。 9、完善当域名记录不存在时自动添加。 10、程序代码调整,有兴趣的可以git。 ------------------------- ReAliDDNS基于云解析API的DDNSC 这个主题时间比较久了,看了一下,大家所提到的问题在v3.6.0版本已经解决。 下一个版本功能有需求的可以提提。 居然无法发表主题,没有权限,郁闷,有权限的帮忙发到新主题,可以让更多人看到、用到、反馈,谢了先! ------------------------- ReAliDDNS基于云解析API的DDNSC 再次提交一个新的版本v3.7.0.1: 1、版本号更新至3.7.0.1 2、著作信息放入系统托盘右键菜单“关于”。 3、增加随系统启动功能。 4、增加软件启动隐藏至托盘功能。 5、增加日志记录、超过10000行自动转储至软件目录功能。 6、软件功能实现根据使用习惯调整。 7、配置文件名称更改,参数增加。 8、完善窗体标签功能实现时的更新逻辑。 9、完善当域名记录不存在时自动添加。 10、增加手工指定一个IP,用于当不能从网址获取WAN口IP时救急使用。由于通过http方式从网站获取WAN口IP技术,是从返回信息过滤抓取xxx.xxx.xxx.xxx字串,有时候返回信息包含内容过多,会过滤抓取失败,因此,有必要保留一个手工指定IP的功能。 ------------------------- ReAliDDNS基于云解析API的DDNSC v3.7.1.1 1、增加系统托盘图标状态更新功能:红色-获取WAN口IP或者获取域名绑定IP失败。黄色-获取成功,但WAN口IP和域名绑定IP不一致。绿色-获取成功,WAN口IP和域名绑定IP一致。灰色-WAN口网络不通。 2、修改代码和窗体标签刷新BUG。 3、修复系统托盘图标刷新BUG。 ------------------------- 回 34楼飞翔的笨猫的帖子 ttl值使用的系统默认值,免费版本是600秒,主要是阿里云解析有好多版本,不知道修改后能否有效果,我增加一个参数,你们测试看看。 ------------------------- ReAliDDNS基于云解析API的DDNSC v3.8.0.0 1、增加TTL参数。 2、修复代码BUG。 ------------------------- ReAliDDNS基于云解析API的DDNSC 增加了TTL参数,请大家测试反馈信息哈。 ------------------------- ReAliDDNS基于云解析API的DDNSC v3.8.1.0 1、在配置文件中对accessKeyId和accessKeySecret进行加密存储。注意现有配置文件中未加密参数将失效。 ------------------------- Re回 37楼wisdomwei的帖子 引用第39楼飞翔的笨猫于2018-04-22 10:31发表的 回 37楼wisdomwei的帖子 : win10系统,勾选启动时最小化和日志自动转储 不起作用,随系统启动后,第一次无法自动绑定域名,必须手动点击立即更新一次才行 日志如下: 2018/4/22 10:28:32 运行出错!信息: System.UnauthorizedAccessException: 对注册表项“HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun”的访问被拒绝。    在 Microsoft.Win32.RegistryKey.Win32Error(Int32 errorCode, String str)    在 Microsoft.Win32.RegistryKey.CreateSubKeyInternal(String subkey, RegistryKeyPermissionCheck permissionCheck, Object registrySecurityObj, RegistryOptions registryOptions) ....... [url=https://bbs.aliyun.com/job.php?action=topost&tid=289624&pid=1776828][/url] 1、日志第一行报错是因为系统禁止写入注册表了,当随系统启动选定时,软件会写入系统注册表,看看是否杀毒软件拦截或者禁止了。 2、自动最小化不起作用目前无法复现错误,你再观察一下,把错误日志贴出来。 3、日志转储错误,建议使用管理员模式运行程序,有可能是文件权限原因。 如果最小化和日志转储都不起作用,建议把配置文件删除,重新运行软件,录入参数再测试保存后试一下看看是否恢复正常。 ------------------------- Re回 39楼飞翔的笨猫的帖子 引用第40楼飞翔的笨猫于2018-04-22 10:33发表的 回 39楼飞翔的笨猫的帖子 : 并且 win10 系统 设置ttl值后 无法保存设置 电脑重启后 还是回复默认600 [url=https://bbs.aliyun.com/job.php?action=topost&tid=289624&pid=1776829][/url] 根据你两个帖子反馈的情况,建议你把设置文件删除,然后使用管理员模式运行一下程序,重新设置一下试试看,如果问题依旧,把错误日志贴出来看看。 ------------------------- ReAliDDNS基于云解析API的DDNSC v3.8.2.1 1、增加角色权限检测。 2、更多功能日志输出。 ------------------------- ReReAliDDNS基于云解析API的DDNSC 引用第46楼佳盟自动化于2018-04-22 17:58发表的 ReAliDDNS基于云解析API的DDNSC : 见识了  我想发链接可以吗? [url=https://bbs.aliyun.com/job.php?action=topost&tid=289624&pid=1776874][/url] 可以,就是拿出来分享的哈 ------------------------- Re回 43楼wisdomwei的帖子 引用第45楼飞翔的笨猫于2018-04-22 17:17发表的 回 43楼wisdomwei的帖子 : 用了 最新的3.8.2.1版 可以自启动 设置也能保存 ddns也能自动更新,但是日志还是报错,你看下: 2018/4/22 17:06:20 计算机名: Work-PC 2018/4/22 17:06:20 当前用户: he* 2018/4/22 17:06:20 角色信息:Work-PChe* 2018/4/22 17:06:20 当前用户需要文件写入和注册表操作权限,否则相关参数不起作用! ....... [url=https://bbs.aliyun.com/job.php?action=topost&tid=289624&pid=1776869][/url] 提示注册表访问被拒绝,原因可能是注册表访问策略被修改,或者安装了杀毒软件,例如360,把软件对注册表的访问拦截了,如果是360,看看拦截清单里面有没有,有的话就删除拦截记录,再添加一条信任记录。 如果不是360等杀毒软件,就编辑一下组策略,把当前用户对注册表访问通过。 ------------------------- ReAliDDNS基于云解析API的DDNSC 下一个版本打算增加一个自动检测升级功能,实现无人值守的自动检测升级,不用再手工替换升级版本了,目前开发中。 ------------------------- 回 50楼清者自清12的帖子 使用了c#默认的控件textbox,mask设置成了000.000.000.000,代码里面校验了不能超出255.255.255.255,使用输入时稍微将就一下,以后有时间会重新设计一下控件,默认textbox处理录入格式时比较蠢。 ------------------------- ReReAliDDNS基于云解析API的DDNSC 引用第53楼清者自清12于2018-06-08 13:56发表的 ReAliDDNS基于云解析API的DDNSC : 还有个,获取IP那两个网址能不能自动切换,当一个网址获取不到IP时,自动切换到另外一个网址。 软件启动过程中,当获取不到IP时,软件就会卡死好一会, [url=https://bbs.aliyun.com/job.php?action=topost&tid=289624&pid=1782201][/url] 下载最新版本,已经添加了www.net.cn获取IP的网址,当然可以自行录入地址,地址获取返回含有xxx.xxx.xxx.xxx格式的ip的,函数会自动过滤其它信息,但内容含有多个ip就会失败。 ------------------------- ReReAliDDNS基于云解析API的DDNSC 引用第55楼lhpdir于2018-06-13 23:08发表的 ReAliDDNS基于云解析API的DDNSC : 如果设置时间3600秒,左边显示的是360,不过10秒掉1秒,是作者有意为之? [url=https://bbs.aliyun.com/job.php?action=topost&tid=289624&pid=1782899][/url] 是窗体控件格式问题,宽度不够,新版本已经增加了宽度,下载新版本即可。至于10秒掉一秒,估计是cpu时钟运行与程序控件显示不同步造成的,理论上应该是毫秒,本程序使用的是C#自带Timer控件,没有修改过。 ------------------------- ReReAliDDNS基于云解析API的DDNSC 引用第54楼lhpdir于2018-06-13 21:56发表的 ReAliDDNS基于云解析API的DDNSC : 解压密码? [url=https://bbs.aliyun.com/job.php?action=topost&tid=289624&pid=1782895][/url] winrar压缩,不需要解压密码 ------------------------- ReAliDDNS基于云解析API的DDNSC v3.8.4.0   1、增加Ngrok网络穿透功能。 2、调整倒计时控件宽度,修复当倒计时超过3位时被遮挡的问题。 3、精简代码。 ------------------------- Re回 51楼wisdomwei的帖子 引用第52楼清者自清12于2018-06-02 13:03发表的 回 51楼wisdomwei的帖子 : 兄台,whatismyip.akamai.com这个网址我这边有些地方经常获取不到IP,然后WAN口地址就变成0.0.0.0  软件能不能加一条,如果IP是0.0.0.0则不更新。要不然一获取不到IP,域名就绑定0.0.0.0了 [url=https://bbs.aliyun.com/job.php?action=topost&tid=289624&pid=1781486][/url] 已经实现自主添加其他查询网址,启用自动运行时会逐个查询。 v3.8.5.0 1、设置修改实时保存。 2、可添加多个公网IP查询网址,自动运行是逐个查询,当有返回值时停止。 3、简化代码。 ------------------------- ReReAliDDNS基于云解析API的DDNSC 引用第53楼清者自清12于2018-06-08 13:56发表的 ReAliDDNS基于云解析API的DDNSC : 还有个,获取IP那两个网址能不能自动切换,当一个网址获取不到IP时,自动切换到另外一个网址。 软件启动过程中,当获取不到IP时,软件就会卡死好一会, [url=https://bbs.aliyun.com/job.php?action=topost&tid=289624&pid=1782201][/url] 已经实现自主添加其他查询网址,启用自动运行时会逐个查询。 v3.8.5.0 1、设置修改实时保存。 2、可添加多个公网IP查询网址,自动运行是逐个查询,当有返回值时停止。 3、简化代码。 ------------------------- ReAliDDNS基于云解析API的DDNSC v3.8.5.0 1、设置修改实时保存。 2、可添加多个公网IP查询网址,自动运行是逐个查询,当有返回值时停止。 3、简化代码。 ------------------------- ReAliDDNS基于云解析API的DDNSC v3.8.6.0   1、修改代码,.net框架版本由4.5降低到4.0,可在WinXP系统运行,WinXP系统最高支持.net 4.0。 ------------------------- ReReAliDDNS基于云解析API的DDNSC 引用第65楼purelyc于2018-07-21 18:44发表的 ReAliDDNS基于云解析API的DDNSC : 感谢作者的软件,请问有没有方式做成可以为域名下多个主机记录做记录值的,现在只能做一个有点浪费域名了 [url=https://bbs.aliyun.com/job.php?action=topost&tid=289624&pid=1786873][/url] 你的意思是动态刷新几个A记录的IP地址吗?把几个记录刷新同一个IP地址还是不同IP地址? 或者你的意思是做一个管理域名的软件? ------------------------- ReReAliDDNS基于云解析API的DDNSC 引用第68楼qz_陈sir于2018-07-22 13:08发表的 ReAliDDNS基于云解析API的DDNSC : 楼主 发现你这个工具有个问题  用了这个工具  有设置了开机启动  其他用户远程桌面注销不了  必须把工具先退出才能注销   测了3个2003的服务器都是这样 [url=https://bbs.aliyun.com/job.php?action=topost&tid=289624&pid=1786987][/url] 如果win2003服务器,建议查看一下系统日志,看看远程登录之后都执行了什么操作,最好把相关日志贴出来看看。 远程桌面注销不了这种情况第一次遇到,我试试看能否重现你说的情况。 ------------------------- ReReAliDDNS基于云解析API的DDNSC 引用第70楼purelyc于2018-07-22 17:21发表的 ReAliDDNS基于云解析API的DDNSC : 请问一个问题,启动后不手动点一次测试连接,域名IP就无法自动绑定 自动更新时间到达后提示 2018/7/22 17:02:25    updateDomainRecord() Exception:  Aliyun.Acs.Core.Exceptions.ClientException: InvalidParameter : The parameter value RecordId is invalid.    在 Aliyun.Acs.Core.DefaultAcsClient.ParseAcsResponse[T](AcsRequest`1 request, HttpResponse httpResponse) ....... [url=https://bbs.aliyun.com/job.php?action=topost&tid=289624&pid=1787006][/url] 1、只有勾选了启动自动运行,软件启动才会自动分别查询阿里云DNS的A记录和WAN口IP,查询之后对比两者IP是否一致,一致就静默,等待下一次更新时间到来,不一致就立即更新。 如果没有勾选,软件启动后需要手工点击测试。 2、当返回你贴出来的日志时,说明你之前已经成功更新过A记录,但再次运行时,你只修改了域名,没有经过测试和添加到阿里云DNS,造成阿里云DNS里面的recordid对应的域名和你现在配置文件里面的不一致,正确的方法是每次修改之后都测试一下,如果不存在会提醒添加记录。 下载使用最新版本v3.8.6.0,日志记录里面会有很明确的提醒。 ------------------------- ReReAliDDNS基于云解析API的DDNSC 引用第73楼cxq82于2018-07-27 11:03发表的 ReAliDDNS基于云解析API的DDNSC : 帖主好! 非常感谢,开发这个插件分享给大家,这个实在找到辛苦,最终还是找到这里了。 有个疑问反馈下: 1、局域网内2机器同时开程序,更新同一域名,过会儿会无法更新域名;阿里后台发现有2个A记录,不懂是阿里故意设置的还是bug。 2、上述情况,关闭一台机器;在另一地域,用此程序更新另一个二级域名,也出现无法更新现象;是否同一key 不能多台电脑使用呢? ....... [url=https://bbs.aliyun.com/job.php?action=topost&tid=289624&pid=1787650][/url] 1、对于同一局域网内的两台机器同时运行AliDDNS.exe,更新同一域名a.demo.com,只要录入没有问题,应该不会出现a.demo.com在阿里云DNS里面有两个recordid,请检查录入是否正确。如果问题依旧,请把两台机器的软件运行界面截图和运行日志一起贴出来,还有阿里云控制台A记录的截图,我分析一下看看是否是软件BUG。 2、不同局域网,只要WAN口IP不同,不管地域是否是否相同,更新同一域名,只会导致阿里云DNS该A记录的IP不断变化。 3、不管是否是同一局域网,同一accesskey和accesssecret,可以更新任意不同A记录的IP,如果不能成功,请检查accesskey和accesssecret是否正确,或者网络路由是否有防火墙限制,点击【测试】试一下。可以把日志贴出来看看,分析一下问题。 据我所知,目前阿里云还没有限制DNS中A记录更新的频率和次数。 我见过宽带使用长城宽带的,每次更新WAN口IP都不同,奇葩的不得了,最后ngrok网络穿透了事。 ------------------------- Re回 72楼wisdomwei的帖子 引用第75楼kakalin于2018-07-31 15:39发表的 回 72楼wisdomwei的帖子 : 帖主好,我也遇到这样的问题,随系统自动启动已经开了,但是还是要每次手动点击测试连接才能正常工作。 日志: 2018/7/31 15:31:48 计算机名: xxxx 2018/7/31 15:31:48 当前用户: xxx 2018/7/31 15:31:48 角色信息:xxxx ....... [url=https://bbs.aliyun.com/job.php?action=topost&tid=289624&pid=1788169][/url] 关键的出错信息在这里: 2018/7/31 15:32:03 updateDomainRecord() Exception:  Aliyun.Acs.Core.Exceptions.ClientException: InvalidParameter : The parameter value RecordId is invalid. 之前已经成功运行过,阿里云DNS已经添加了域名并返回recordid了,但是,你再次启动时,配置文件里面的recordid和域名与阿里云DNS里面的recordid和域名不一致! 可能原因:1、本地修改域名后没有测试并添加。2、本地修改了recordid。3、本地配置文件被手工修改。4、阿里云DNS对应记录被手工修改。 解决办法:修改域名后点击测试和添加,确保生效,不要手工修改本地配置文件和阿里云DNS服务器里面的域名记录,除非你知道是在干什么。 ------------------------- ReReAliDDNS基于云解析API的DDNSC 引用第81楼鱼花于2018-08-14 20:58发表的 ReAliDDNS基于云解析API的DDNSC : 用上3.8.6版,乍么github.com/dtsdao/AliDDNS只有verson 1.0 ??? 3.8.6版在电算机重启后不会得自动点击测试连接,只能手工。要是人在外边,刚好ip又给营运商变了就不能及时更新正确ip了 补充:我的win 2012 打上自启了,能自启,就是不能解析? [url=https://bbs.aliyun.com/job.php?action=topost&tid=289624&pid=1789959][/url] 原作者已经不维护更新了,我fork过来继续更新。 ------------------------- ReReAliDDNS基于云解析API的DDNSC 引用第82楼鱼花于2018-08-14 21:18发表的 ReAliDDNS基于云解析API的DDNSC : 018/8/14 21:08:57 计算机名: computer 2018/8/14 21:08:57 当前用户: Administrator 2018/8/14 21:08:57 角色信息:computerAdministrator 2018/8/14 21:08:57 当前用户需要文件写入和注册表操作权限,否则相关参数不起作用! ....... [url=https://bbs.aliyun.com/job.php?action=topost&tid=289624&pid=1789962][/url] 稍后我会更新一下代码,当IP为0.0.0.0的时候不更新阿里云DNS记录,仅提示未能获取IP,需要手工获取。 ------------------------- ReReAliDDNS基于云解析API的DDNSC 引用第80楼服务器云于2018-08-10 22:56发表的 ReAliDDNS基于云解析API的DDNSC : 这个就是根据家里的IP 变化通过api动态的更新DNS? 有延迟么?python可以做么? [url=https://bbs.aliyun.com/job.php?action=topost&tid=289624&pid=1789426][/url] 完全可以,很简单。 ------------------------- Re回 28楼wisdomwei的帖子 引用第79楼flcz于2018-08-10 16:24发表的 回 28楼wisdomwei的帖子 : 有没有获取到0.0.0.0,不修改记录的功能。我现在可能是网络原因,老被改为0.0.0.0 [url=https://bbs.aliyun.com/job.php?action=topost&tid=289624&pid=1789379][/url] 稍后我会更新一下代码,当获取IP为0.0.0.0时不更新阿里云记录, 提示手工更改。 你可以尝试添加其他获取IP的地址的网址,看能否自动获取。例如:http://www.net.cn/static/customercare/yourip.asp http://ip.qq.com/ http://www.3322.org/dyndns/getip ------------------------- ReReAliDDNS基于云解析API的DDNSC 引用第78楼鱼花于2018-08-07 09:43发表的 ReAliDDNS基于云解析API的DDNSC : win 2012点击验证安钮没反应 [url=https://bbs.aliyun.com/job.php?action=topost&tid=289624&pid=1788817][/url] 是“测试连接”按钮吧?点击后稍等,如果网络状况不佳,或者设置错误,会有延迟。 程序运行需要.NET FRAMEWORK 4.0以上版本。 ------------------------- ReReAliDDNS基于云解析API的DDNSC 引用第77楼kakalin于2018-08-01 21:07发表的 ReAliDDNS基于云解析API的DDNSC : 找到原因了,本地配置文件无法保存recordid,手动写进去以后就正常了。 [url=https://bbs.aliyun.com/job.php?action=topost&tid=289624&pid=1788345][/url] 不建议修改recordid,除非你明白是在做什么?修改域名后测试连接,如果DNS记录存在,会自动获取recordid,如果不存在,会提示添加新记录。 ------------------------- Re回 72楼wisdomwei的帖子 引用第75楼kakalin于2018-07-31 15:39发表的 回 72楼wisdomwei的帖子 : 帖主好,我也遇到这样的问题,随系统自动启动已经开了,但是还是要每次手动点击测试连接才能正常工作。 日志: 2018/7/31 15:31:48 计算机名: xxxx 2018/7/31 15:31:48 当前用户: xxx 2018/7/31 15:31:48 角色信息:xxxx ....... [url=https://bbs.aliyun.com/job.php?action=topost&tid=289624&pid=1788169][/url] 勾选随系统启动自动运行即可。 ------------------------- ReReAliDDNS基于云解析API的DDNSC 引用第90楼kanxiji于2018-08-18 23:34发表的 ReAliDDNS基于云解析API的DDNSC : 楼主你好 你的东西很好用, 提个建议:TTL和更新秒数可以分别设置 [url=https://bbs.aliyun.com/job.php?action=topost&tid=289624&pid=1791200][/url] 抱歉是个BUG,升级对配置文件读写时参数错误,已经修复。感谢提供建议! ------------------------- ReAliDDNS基于云解析API的DDNSC v.3.8.6.2 1、修复配置文件参数TTL和WaitingTime写入BUG。 2、增加更新逻辑,当获取WAN口IP返回0.0.0.0时,不更新阿里云DNS记录,提示手工修改。 ------------------------- ReAliDDNS基于云解析API的DDNSC v3.8.6.3 1、修改测试存储逻辑,锁定Recordid编辑框,避免添加域名成功后,手工修改造成配置文件存储Recordid与服务器不一致时造成的自动更新出错。 ------------------------- ReReAliDDNS基于云解析API的DDNSC 引用第94楼鱼花于2018-08-28 11:00发表的 ReAliDDNS基于云解析API的DDNSC : v3.8.6.3  ,在win2012下点测试,没能得到本地ip 勾选自启,关闭退出,重新启动,这选项是空的。 之前下载的版本,在win 2012 r2下手动还能用就是机器重启后,没能得到本机ip,要手机点测试后才正常。 ....... [url=https://bbs.aliyun.com/job.php?action=topost&tid=289624&pid=1792007][/url] 1、点击【测试连接】是测试阿里云账号信息设置是否正确,如果正确就会测试录入的域名记录是否存在,如果存在就返回recordid,如果不存在就提示添加。 2、获取本地WAN口IP点击【获取WAN口IP】按钮,而不是【测试连接】按钮。 3、如果需要自动更新,需要设置自动更新倒计时秒数,勾选自动更新,勾选随系统启动自动运行。 感觉你对软件运行界面设置不熟悉,建议详细看一下软件运行界面,配置修改日志输出框都会有提示,也详细看一下。 ------------------------- ReReAliDDNS基于云解析API的DDNSC 引用第96楼saoian于2018-08-30 16:02发表的 ReAliDDNS基于云解析API的DDNSC : 你好: 程序运行时提示,版本检测程序update.exe未找到,能把这个文件发出来吗? 另外在运行升级时提示,软件运行目录下没有找到updateinfo.txt,是否是直接在运行目录下新建一个updateinfo.txt文件就可了? [url=https://bbs.aliyun.com/job.php?action=topost&tid=289624&pid=1792277][/url] 抱歉自动升级功能的update.exe还有些BUG,还没有放出来,请先取消勾选【关于】菜单下的【自动检测升级】,不勾选时其它功能可正常使用,等update.exe放出来您再勾选这个功能菜单。 ------------------------- ReReAliDDNS基于云解析API的DDNSC 引用第98楼daoyuanjiao于2018-09-14 11:12发表的 ReAliDDNS基于云解析API的DDNSC : 可以具体描述一下里面的ngrok的使用吗?我的配置后一直无法访问。但是单独打开ngrok设置令牌后,启动ngrok http 80 是可以访问的!谢谢!我i一直显示“Ngrok功能启用,ngrok.exe将自动加载!本机浏览器打开:127.0.0.1:4040 查看运行状态。”但是打开127.0.0.1:4040一直显示无法访问! [url=https://bbs.aliyun.com/job.php?action=topost&tid=289624&pid=1793763][/url] ngrok的详细使用方法你从官网看一下,我这里简单说两个方法: 1、使用官网网址映射。在ngrok官网 注册一个免费账号,从官方下载编译好的ngrok.exe程序,跟AliDDNS.EXE放在一个文件夹下,然后根据页面提示,填写参数,保存,勾选后自动运行。 2、如果自己有服务器的话,从github fork一下ngrok源码到本地,直接编译一个ngrokd出来,在服务器上运行,一般运行的方式是./bin/ngrokd -tlsKey="server.key" -tlsCrt="server.crt" -domain="ngrok.xxxx.cn" -httpAddr=":8081" -httpsAddr=":8082" -tunnelAddr=":8083" &  然后再根据编译时生成的证书,编译一个win的ngrok.exe程序来,跟AliDDNS.exe放在一个文件夹下,根据服务端的配置,令牌为空,地址为:ngrok.xxx.cn:8083,要穿透的二级域名假设为demo,那么穿透后的完整URL是http://demo.ngrok.xxx.cn:8081 访问http服务, 或者https://demo.ngrok.xxx.cn:8082 访问https服务,页面是否能打开,取决于80端口上是否有服务可以访问。内网的其他服务端口也是一样,假设ftp服务跑在21端口上,穿透WAN端口是2221,那么访问URL是ftp://demo.ngrok.xxx.cn:2221,不知道说明白了吗? ------------------------- 回 102楼estas的帖子 我用的北京联通的光纤,没有任何问题。 把日志贴出来。 DDNS跟线路关系不大,阿里云是智能路由,看本地DNS设置,或者杀毒软件设置。 ------------------------- 回 100楼daoyuanjiao的帖子 不支持,仅在windows平台可用,.net3.5以上。

wisdomwei 2019-12-02 02:58:27 0 浏览量 回答数 0
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 企业信息查询 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 企业建站模板