• 关于

    ali 源

    的搜索结果

问题

oss图片处理服务常见问题

hpy 2019-12-01 21:13:47 6190 浏览量 回答数 1

问题

react用的Ali的cdn源引入就可以了嗎?

0xw 2019-12-01 20:10:29 2058 浏览量 回答数 1

问题

請問AliOS系統中能存在幾個TA(Trusted Application)?

eddieho1124 2019-12-01 20:22:58 567 浏览量 回答数 1

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

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

回答

今年3月份oss做了产品更新,bucket域名的强制下载策略改变了的,取消了bucket域名的强制下载如果你想实现强制下载 oss访问object实现强制下载:如 aaaa.oss-cn-hangzhou.aliyuncs.com想实现其下面的objectURL访问强制下载1) 设置对应的object 的http头的contentdisposition,格式类似:格式如:attachment;filename=123.jpeg ,2) 对aaaa这个bucket开启cdn加速,源站设置:aaaa.oss-cn-hangzhou.aliyuncs.com,回源host:aaaa.oss-cn-hangzhou.aliyuncs.com加速成功后,设置cdn的http头的,contentdisposition参数注意 这个设置后,该域名全站强制下载了的3) 如果aaaa bucket为公共读写,http:// aaaa.oss-cn-hangzhou.aliyuncs.com /object?response-content-disposition=xxx参考:目前只有js sdk可以支持的 https://github.com/ali-sdk/ali-oss#signatureurlname-optionsJavasdk也是支持的代码参考如下: String bucketName = "bucket名称"; String key = "1/2/1.jpg"; OSSClient client = new OSSClient(OSS_ENDPOINT,ACCESS_ID, ACCESS_KEY); GeneratePresignedUrlRequest generatePresignedUrlRequest = new GeneratePresignedUrlRequest(bucketName, key); Calendar cal=Calendar.getInstance(); cal.add(Calendar.MINUTE, 600); Date date=cal.getTime(); generatePresignedUrlRequest.setExpiration(date); ResponseHeaderOverrides rho=new ResponseHeaderOverrides(); rho.setContentDisposition("attachment;filename=123.jpeg"); generatePresignedUrlRequest.setResponseHeaders(rho); URL url=client.generatePresignedUrl(generatePresignedUrlRequest);

xiongmaodq 2019-12-02 01:39:33 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档一个Bucket下可能有非常多的文件,SDK提供一系列的接口方便用户管理文件。 查看所有文件通过list来列出当前Bucket下的所有文件。主要的参数如下: prefix 指定只列出符合特定前缀的文件marker 指定只列出文件名大于marker之后的文件delimiter 用于获取文件的公共前缀max-keys 用于指定最多返回的文件个数 let OSS = require('ali-oss');let client = new OSS({ region: '<Your region>', accessKeyId: '<Your AccessKeyId>', accessKeySecret: '<Your AccessKeySecret>', bucket: 'Your bucket name'});async function list () { try { // 不带任何参数,默认最多返回1000个文件 let result = await client.list(); console.log(result); // 根据nextMarker继续列出文件 if (result.isTruncated) { let result = await client.list({ marker: result.nextMarker }); } // 列出前缀为'my-'的文件 let result = await client.list({ prefix: 'my-' }); console.log(result); // 列出前缀为'my-'且在'my-object'之后的文件 let result = await client.list({ prefix: 'my-', marker: 'my-object' }); console.log(result); } catch (e) { console.log(e); }}list(); 模拟目录结构OSS是基于对象的存储服务,没有目录的概念。存储在一个Bucket中所有文件都是通过文件的key唯一标识,并没有层级的结构。这种结构可以让OSS的存储非常高效,但是用户管理文件时希望能够像传统的文件系统一样把文件分门别类放到不同的“目录”下面。通过OSS提供的“公共前缀”的功能,也可以很方便地模拟目录结构。公共前缀的概念请参考列出Object。 假设Bucket中已有如下文件: foo/xfoo/yfoo/bar/afoo/bar/bfoo/hello/C/1foo/hello/C/2...foo/hello/C/9999接下来我们实现一个函数叫listDir,列出指定目录下的文件和子目录: let OSS = require('ali-oss');let client = new OSS({ region: '<Your region>', accessKeyId: '<Your AccessKeyId>', accessKeySecret: '<Your AccessKeySecret>', bucket: 'Your bucket name'});async function listDir(dir) let result = await client.list({ prefix: dir, delimiter: '/' }); result.prefixes.forEach(function (subDir) { console.log('SubDir: %s', subDir); }); result.objects.forEach(function (obj) { console.log(Object: %s', obj.name); });end 运行结果如下: > await listDir('foo/')=> SubDir: foo/bar/ SubDir: foo/hello/ Object: foo/x Object: foo/y> await listDir('foo/bar/')=> Object: foo/bar/a Object: foo/bar/b> await listDir('foo/hello/C/')=> Object: foo/hello/C/1 Object: foo/hello/C/2 ... Object: foo/hello/C/9999文件元信息向OSS上传文件时,除了文件内容,还可以指定文件的一些属性信息,称为“元信息”。这些信息在上传时与文件一起存储,在下载时与文件一起返回。 因为文件元信息在上传/下载时是附在HTTP Headers中, HTTP协议规定不能包含复杂字符。因此元信息只能是简单的ASCII可见字符,不能包含换行。 所有元信息的总大小不能超过8KB。 使用put,putStream和multipartUpload时都可以通过指定meta参数来指定文件的元信息: let OSS = require('ali-oss')let client = new OSS({ region: '<Your region>', accessKeyId: '<Your AccessKeyId>', accessKeySecret: '<Your AccessKeySecret>', bucket: 'Your bucket name'});async function put () { try { let result = await client.put('object-key', 'local-file', { meta: { year: 2016, people: 'mary' } }); console.log(result); } catch (e) { console.log(e); }}put(); 通过putMeta接口来更新文件元信息: let OSS = require('ali-oss')let client = new OSS({ region: '<Your region>', accessKeyId: '<Your AccessKeyId>', accessKeySecret: '<Your AccessKeySecret>', bucket: 'Your bucket name'});async function putMeta () { try { let result = await client.putMeta('object-key', { meta: { year: 2015, people: 'mary' } }); console.log(result); } catch (e) { console.log(e); }}putMeta(); 拷贝文件使用copy拷贝一个文件。拷贝可以发生在下面两种情况: 同一个Bucket两个不同Bucket,但是它们在同一个region,此时的源Object名字应为’/bucket/object’的形式 另外,拷贝时对文件元信息的处理有两种选择: 如果没有指定meta参数,则与源文件相同,即拷贝源文件的元信息如果指定了meta参数,则使用新的元信息覆盖源文件的信息 let OSS = require('ali-oss')let client = new OSS({ region: '<Your region>', accessKeyId: '<Your AccessKeyId>', accessKeySecret: '<Your AccessKeySecret>', bucket: 'Your bucket name'});async function copy () { try { // 两个Bucket之间拷贝 let result = await client.copy('to', '/from-bucket/from'); console.log(result); // 拷贝元信息 let result = await client.copy('to', 'from'); console.log(result); // 覆盖元信息 let result = await client.copy('to', 'from', { meta: { year: 2015, people: 'mary' } }); console.log(result); } catch (e) { console.log(e); }} 删除文件通过delete来删除某个文件: let OSS = require('ali-oss')let client = new OSS({ region: '<Your region>', accessKeyId: '<Your AccessKeyId>', accessKeySecret: '<Your AccessKeySecret>', bucket: 'Your bucket name'});async function delete () { try { let result = yield client.delete('object-key'); console.log(result); } catch (e) { console.log(e); }}delete(); 批量删除文件通过deleteMulti来删除一批文件,用户可以通过quiet参数来指定是否返回删除的结果: let OSS = require('ali-oss')let client = new OSS({ region: '<Your region>', accessKeyId: '<Your AccessKeyId>', accessKeySecret: '<Your AccessKeySecret>', bucket: 'Your bucket name'});async function deleteMulti () { try { let result = await client.deleteMulti(['obj-1', 'obj-2', 'obj-3']); console.log(result); let result = await client.deleteMulti(['obj-1', 'obj-2', 'obj-3'], { quiet: true }); console.log(result); } catch (e) { console.log(e); }}deleteMulti();

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

回答

详细解答可以参考官方帮助文档一个Bucket下可能有非常多的文件,SDK提供一系列的接口方便用户管理文件。 查看所有文件通过list来列出当前Bucket下的所有文件。主要的参数如下: prefix 指定只列出符合特定前缀的文件marker 指定只列出文件名大于marker之后的文件delimiter 用于获取文件的公共前缀max-keys 用于指定最多返回的文件个数 let OSS = require('ali-oss');let client = new OSS({ region: '<Your region>', accessKeyId: '<Your AccessKeyId>', accessKeySecret: '<Your AccessKeySecret>', bucket: 'Your bucket name'});async function list () { try { // 不带任何参数,默认最多返回1000个文件 let result = await client.list(); console.log(result); // 根据nextMarker继续列出文件 if (result.isTruncated) { let result = await client.list({ marker: result.nextMarker }); } // 列出前缀为'my-'的文件 let result = await client.list({ prefix: 'my-' }); console.log(result); // 列出前缀为'my-'且在'my-object'之后的文件 let result = await client.list({ prefix: 'my-', marker: 'my-object' }); console.log(result); } catch (e) { console.log(e); }}list(); 模拟目录结构OSS是基于对象的存储服务,没有目录的概念。存储在一个Bucket中所有文件都是通过文件的key唯一标识,并没有层级的结构。这种结构可以让OSS的存储非常高效,但是用户管理文件时希望能够像传统的文件系统一样把文件分门别类放到不同的“目录”下面。通过OSS提供的“公共前缀”的功能,也可以很方便地模拟目录结构。公共前缀的概念请参考列出Object。 假设Bucket中已有如下文件: foo/xfoo/yfoo/bar/afoo/bar/bfoo/hello/C/1foo/hello/C/2...foo/hello/C/9999接下来我们实现一个函数叫listDir,列出指定目录下的文件和子目录: let OSS = require('ali-oss');let client = new OSS({ region: '<Your region>', accessKeyId: '<Your AccessKeyId>', accessKeySecret: '<Your AccessKeySecret>', bucket: 'Your bucket name'});async function listDir(dir) let result = await client.list({ prefix: dir, delimiter: '/' }); result.prefixes.forEach(function (subDir) { console.log('SubDir: %s', subDir); }); result.objects.forEach(function (obj) { console.log(Object: %s', obj.name); });end 运行结果如下: > await listDir('foo/')=> SubDir: foo/bar/ SubDir: foo/hello/ Object: foo/x Object: foo/y> await listDir('foo/bar/')=> Object: foo/bar/a Object: foo/bar/b> await listDir('foo/hello/C/')=> Object: foo/hello/C/1 Object: foo/hello/C/2 ... Object: foo/hello/C/9999文件元信息向OSS上传文件时,除了文件内容,还可以指定文件的一些属性信息,称为“元信息”。这些信息在上传时与文件一起存储,在下载时与文件一起返回。 因为文件元信息在上传/下载时是附在HTTP Headers中, HTTP协议规定不能包含复杂字符。因此元信息只能是简单的ASCII可见字符,不能包含换行。 所有元信息的总大小不能超过8KB。 使用put,putStream和multipartUpload时都可以通过指定meta参数来指定文件的元信息: let OSS = require('ali-oss')let client = new OSS({ region: '<Your region>', accessKeyId: '<Your AccessKeyId>', accessKeySecret: '<Your AccessKeySecret>', bucket: 'Your bucket name'});async function put () { try { let result = await client.put('object-key', 'local-file', { meta: { year: 2016, people: 'mary' } }); console.log(result); } catch (e) { console.log(e); }}put(); 通过putMeta接口来更新文件元信息: let OSS = require('ali-oss')let client = new OSS({ region: '<Your region>', accessKeyId: '<Your AccessKeyId>', accessKeySecret: '<Your AccessKeySecret>', bucket: 'Your bucket name'});async function putMeta () { try { let result = await client.putMeta('object-key', { meta: { year: 2015, people: 'mary' } }); console.log(result); } catch (e) { console.log(e); }}putMeta(); 拷贝文件使用copy拷贝一个文件。拷贝可以发生在下面两种情况: 同一个Bucket两个不同Bucket,但是它们在同一个region,此时的源Object名字应为’/bucket/object’的形式 另外,拷贝时对文件元信息的处理有两种选择: 如果没有指定meta参数,则与源文件相同,即拷贝源文件的元信息如果指定了meta参数,则使用新的元信息覆盖源文件的信息 let OSS = require('ali-oss')let client = new OSS({ region: '<Your region>', accessKeyId: '<Your AccessKeyId>', accessKeySecret: '<Your AccessKeySecret>', bucket: 'Your bucket name'});async function copy () { try { // 两个Bucket之间拷贝 let result = await client.copy('to', '/from-bucket/from'); console.log(result); // 拷贝元信息 let result = await client.copy('to', 'from'); console.log(result); // 覆盖元信息 let result = await client.copy('to', 'from', { meta: { year: 2015, people: 'mary' } }); console.log(result); } catch (e) { console.log(e); }} 删除文件通过delete来删除某个文件: let OSS = require('ali-oss')let client = new OSS({ region: '<Your region>', accessKeyId: '<Your AccessKeyId>', accessKeySecret: '<Your AccessKeySecret>', bucket: 'Your bucket name'});async function delete () { try { let result = yield client.delete('object-key'); console.log(result); } catch (e) { console.log(e); }}delete(); 批量删除文件通过deleteMulti来删除一批文件,用户可以通过quiet参数来指定是否返回删除的结果: let OSS = require('ali-oss')let client = new OSS({ region: '<Your region>', accessKeyId: '<Your AccessKeyId>', accessKeySecret: '<Your AccessKeySecret>', bucket: 'Your bucket name'});async function deleteMulti () { try { let result = await client.deleteMulti(['obj-1', 'obj-2', 'obj-3']); console.log(result); let result = await client.deleteMulti(['obj-1', 'obj-2', 'obj-3'], { quiet: true }); console.log(result); } catch (e) { console.log(e); }}deleteMulti();

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

回答

详细解答可以参考官方帮助文档一个Bucket下可能有非常多的文件,SDK提供一系列的接口方便用户管理文件。 查看所有文件通过list来列出当前Bucket下的所有文件。主要的参数如下: prefix 指定只列出符合特定前缀的文件marker 指定只列出文件名大于marker之后的文件delimiter 用于获取文件的公共前缀max-keys 用于指定最多返回的文件个数 let OSS = require('ali-oss');let client = new OSS({ region: '<Your region>', accessKeyId: '<Your AccessKeyId>', accessKeySecret: '<Your AccessKeySecret>', bucket: 'Your bucket name'});async function list () { try { // 不带任何参数,默认最多返回1000个文件 let result = await client.list(); console.log(result); // 根据nextMarker继续列出文件 if (result.isTruncated) { let result = await client.list({ marker: result.nextMarker }); } // 列出前缀为'my-'的文件 let result = await client.list({ prefix: 'my-' }); console.log(result); // 列出前缀为'my-'且在'my-object'之后的文件 let result = await client.list({ prefix: 'my-', marker: 'my-object' }); console.log(result); } catch (e) { console.log(e); }}list(); 模拟目录结构OSS是基于对象的存储服务,没有目录的概念。存储在一个Bucket中所有文件都是通过文件的key唯一标识,并没有层级的结构。这种结构可以让OSS的存储非常高效,但是用户管理文件时希望能够像传统的文件系统一样把文件分门别类放到不同的“目录”下面。通过OSS提供的“公共前缀”的功能,也可以很方便地模拟目录结构。公共前缀的概念请参考列出Object。 假设Bucket中已有如下文件: foo/xfoo/yfoo/bar/afoo/bar/bfoo/hello/C/1foo/hello/C/2...foo/hello/C/9999接下来我们实现一个函数叫listDir,列出指定目录下的文件和子目录: let OSS = require('ali-oss');let client = new OSS({ region: '<Your region>', accessKeyId: '<Your AccessKeyId>', accessKeySecret: '<Your AccessKeySecret>', bucket: 'Your bucket name'});async function listDir(dir) let result = await client.list({ prefix: dir, delimiter: '/' }); result.prefixes.forEach(function (subDir) { console.log('SubDir: %s', subDir); }); result.objects.forEach(function (obj) { console.log(Object: %s', obj.name); });end 运行结果如下: > await listDir('foo/')=> SubDir: foo/bar/ SubDir: foo/hello/ Object: foo/x Object: foo/y> await listDir('foo/bar/')=> Object: foo/bar/a Object: foo/bar/b> await listDir('foo/hello/C/')=> Object: foo/hello/C/1 Object: foo/hello/C/2 ... Object: foo/hello/C/9999文件元信息向OSS上传文件时,除了文件内容,还可以指定文件的一些属性信息,称为“元信息”。这些信息在上传时与文件一起存储,在下载时与文件一起返回。 因为文件元信息在上传/下载时是附在HTTP Headers中, HTTP协议规定不能包含复杂字符。因此元信息只能是简单的ASCII可见字符,不能包含换行。 所有元信息的总大小不能超过8KB。 使用put,putStream和multipartUpload时都可以通过指定meta参数来指定文件的元信息: let OSS = require('ali-oss')let client = new OSS({ region: '<Your region>', accessKeyId: '<Your AccessKeyId>', accessKeySecret: '<Your AccessKeySecret>', bucket: 'Your bucket name'});async function put () { try { let result = await client.put('object-key', 'local-file', { meta: { year: 2016, people: 'mary' } }); console.log(result); } catch (e) { console.log(e); }}put(); 通过putMeta接口来更新文件元信息: let OSS = require('ali-oss')let client = new OSS({ region: '<Your region>', accessKeyId: '<Your AccessKeyId>', accessKeySecret: '<Your AccessKeySecret>', bucket: 'Your bucket name'});async function putMeta () { try { let result = await client.putMeta('object-key', { meta: { year: 2015, people: 'mary' } }); console.log(result); } catch (e) { console.log(e); }}putMeta(); 拷贝文件使用copy拷贝一个文件。拷贝可以发生在下面两种情况: 同一个Bucket两个不同Bucket,但是它们在同一个region,此时的源Object名字应为’/bucket/object’的形式 另外,拷贝时对文件元信息的处理有两种选择: 如果没有指定meta参数,则与源文件相同,即拷贝源文件的元信息如果指定了meta参数,则使用新的元信息覆盖源文件的信息 let OSS = require('ali-oss')let client = new OSS({ region: '<Your region>', accessKeyId: '<Your AccessKeyId>', accessKeySecret: '<Your AccessKeySecret>', bucket: 'Your bucket name'});async function copy () { try { // 两个Bucket之间拷贝 let result = await client.copy('to', '/from-bucket/from'); console.log(result); // 拷贝元信息 let result = await client.copy('to', 'from'); console.log(result); // 覆盖元信息 let result = await client.copy('to', 'from', { meta: { year: 2015, people: 'mary' } }); console.log(result); } catch (e) { console.log(e); }} 删除文件通过delete来删除某个文件: let OSS = require('ali-oss')let client = new OSS({ region: '<Your region>', accessKeyId: '<Your AccessKeyId>', accessKeySecret: '<Your AccessKeySecret>', bucket: 'Your bucket name'});async function delete () { try { let result = yield client.delete('object-key'); console.log(result); } catch (e) { console.log(e); }}delete(); 批量删除文件通过deleteMulti来删除一批文件,用户可以通过quiet参数来指定是否返回删除的结果: let OSS = require('ali-oss')let client = new OSS({ region: '<Your region>', accessKeyId: '<Your AccessKeyId>', accessKeySecret: '<Your AccessKeySecret>', bucket: 'Your bucket name'});async function deleteMulti () { try { let result = await client.deleteMulti(['obj-1', 'obj-2', 'obj-3']); console.log(result); let result = await client.deleteMulti(['obj-1', 'obj-2', 'obj-3'], { quiet: true }); console.log(result); } catch (e) { console.log(e); }}deleteMulti();

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

回答

详细解答可以参考官方帮助文档一个Bucket下可能有非常多的文件,SDK提供一系列的接口方便用户管理文件。 查看所有文件通过list来列出当前Bucket下的所有文件。主要的参数如下: prefix 指定只列出符合特定前缀的文件marker 指定只列出文件名大于marker之后的文件delimiter 用于获取文件的公共前缀max-keys 用于指定最多返回的文件个数 let OSS = require('ali-oss');let client = new OSS({ region: '<Your region>', accessKeyId: '<Your AccessKeyId>', accessKeySecret: '<Your AccessKeySecret>', bucket: 'Your bucket name'});async function list () { try { // 不带任何参数,默认最多返回1000个文件 let result = await client.list(); console.log(result); // 根据nextMarker继续列出文件 if (result.isTruncated) { let result = await client.list({ marker: result.nextMarker }); } // 列出前缀为'my-'的文件 let result = await client.list({ prefix: 'my-' }); console.log(result); // 列出前缀为'my-'且在'my-object'之后的文件 let result = await client.list({ prefix: 'my-', marker: 'my-object' }); console.log(result); } catch (e) { console.log(e); }}list(); 模拟目录结构OSS是基于对象的存储服务,没有目录的概念。存储在一个Bucket中所有文件都是通过文件的key唯一标识,并没有层级的结构。这种结构可以让OSS的存储非常高效,但是用户管理文件时希望能够像传统的文件系统一样把文件分门别类放到不同的“目录”下面。通过OSS提供的“公共前缀”的功能,也可以很方便地模拟目录结构。公共前缀的概念请参考列出Object。 假设Bucket中已有如下文件: foo/xfoo/yfoo/bar/afoo/bar/bfoo/hello/C/1foo/hello/C/2...foo/hello/C/9999接下来我们实现一个函数叫listDir,列出指定目录下的文件和子目录: let OSS = require('ali-oss');let client = new OSS({ region: '<Your region>', accessKeyId: '<Your AccessKeyId>', accessKeySecret: '<Your AccessKeySecret>', bucket: 'Your bucket name'});async function listDir(dir) let result = await client.list({ prefix: dir, delimiter: '/' }); result.prefixes.forEach(function (subDir) { console.log('SubDir: %s', subDir); }); result.objects.forEach(function (obj) { console.log(Object: %s', obj.name); });end 运行结果如下: > await listDir('foo/')=> SubDir: foo/bar/ SubDir: foo/hello/ Object: foo/x Object: foo/y> await listDir('foo/bar/')=> Object: foo/bar/a Object: foo/bar/b> await listDir('foo/hello/C/')=> Object: foo/hello/C/1 Object: foo/hello/C/2 ... Object: foo/hello/C/9999文件元信息向OSS上传文件时,除了文件内容,还可以指定文件的一些属性信息,称为“元信息”。这些信息在上传时与文件一起存储,在下载时与文件一起返回。 因为文件元信息在上传/下载时是附在HTTP Headers中, HTTP协议规定不能包含复杂字符。因此元信息只能是简单的ASCII可见字符,不能包含换行。 所有元信息的总大小不能超过8KB。 使用put,putStream和multipartUpload时都可以通过指定meta参数来指定文件的元信息: let OSS = require('ali-oss')let client = new OSS({ region: '<Your region>', accessKeyId: '<Your AccessKeyId>', accessKeySecret: '<Your AccessKeySecret>', bucket: 'Your bucket name'});async function put () { try { let result = await client.put('object-key', 'local-file', { meta: { year: 2016, people: 'mary' } }); console.log(result); } catch (e) { console.log(e); }}put(); 通过putMeta接口来更新文件元信息: let OSS = require('ali-oss')let client = new OSS({ region: '<Your region>', accessKeyId: '<Your AccessKeyId>', accessKeySecret: '<Your AccessKeySecret>', bucket: 'Your bucket name'});async function putMeta () { try { let result = await client.putMeta('object-key', { meta: { year: 2015, people: 'mary' } }); console.log(result); } catch (e) { console.log(e); }}putMeta(); 拷贝文件使用copy拷贝一个文件。拷贝可以发生在下面两种情况: 同一个Bucket两个不同Bucket,但是它们在同一个region,此时的源Object名字应为’/bucket/object’的形式 另外,拷贝时对文件元信息的处理有两种选择: 如果没有指定meta参数,则与源文件相同,即拷贝源文件的元信息如果指定了meta参数,则使用新的元信息覆盖源文件的信息 let OSS = require('ali-oss')let client = new OSS({ region: '<Your region>', accessKeyId: '<Your AccessKeyId>', accessKeySecret: '<Your AccessKeySecret>', bucket: 'Your bucket name'});async function copy () { try { // 两个Bucket之间拷贝 let result = await client.copy('to', '/from-bucket/from'); console.log(result); // 拷贝元信息 let result = await client.copy('to', 'from'); console.log(result); // 覆盖元信息 let result = await client.copy('to', 'from', { meta: { year: 2015, people: 'mary' } }); console.log(result); } catch (e) { console.log(e); }} 删除文件通过delete来删除某个文件: let OSS = require('ali-oss')let client = new OSS({ region: '<Your region>', accessKeyId: '<Your AccessKeyId>', accessKeySecret: '<Your AccessKeySecret>', bucket: 'Your bucket name'});async function delete () { try { let result = yield client.delete('object-key'); console.log(result); } catch (e) { console.log(e); }}delete(); 批量删除文件通过deleteMulti来删除一批文件,用户可以通过quiet参数来指定是否返回删除的结果: let OSS = require('ali-oss')let client = new OSS({ region: '<Your region>', accessKeyId: '<Your AccessKeyId>', accessKeySecret: '<Your AccessKeySecret>', bucket: 'Your bucket name'});async function deleteMulti () { try { let result = await client.deleteMulti(['obj-1', 'obj-2', 'obj-3']); console.log(result); let result = await client.deleteMulti(['obj-1', 'obj-2', 'obj-3'], { quiet: true }); console.log(result); } catch (e) { console.log(e); }}deleteMulti();

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

回答

详细解答可以参考官方帮助文档一个Bucket下可能有非常多的文件,SDK提供一系列的接口方便用户管理文件。 查看所有文件通过list来列出当前Bucket下的所有文件。主要的参数如下: prefix 指定只列出符合特定前缀的文件marker 指定只列出文件名大于marker之后的文件delimiter 用于获取文件的公共前缀max-keys 用于指定最多返回的文件个数 let OSS = require('ali-oss');let client = new OSS({ region: '<Your region>', accessKeyId: '<Your AccessKeyId>', accessKeySecret: '<Your AccessKeySecret>', bucket: 'Your bucket name'});async function list () { try { // 不带任何参数,默认最多返回1000个文件 let result = await client.list(); console.log(result); // 根据nextMarker继续列出文件 if (result.isTruncated) { let result = await client.list({ marker: result.nextMarker }); } // 列出前缀为'my-'的文件 let result = await client.list({ prefix: 'my-' }); console.log(result); // 列出前缀为'my-'且在'my-object'之后的文件 let result = await client.list({ prefix: 'my-', marker: 'my-object' }); console.log(result); } catch (e) { console.log(e); }}list(); 模拟目录结构OSS是基于对象的存储服务,没有目录的概念。存储在一个Bucket中所有文件都是通过文件的key唯一标识,并没有层级的结构。这种结构可以让OSS的存储非常高效,但是用户管理文件时希望能够像传统的文件系统一样把文件分门别类放到不同的“目录”下面。通过OSS提供的“公共前缀”的功能,也可以很方便地模拟目录结构。公共前缀的概念请参考列出Object。 假设Bucket中已有如下文件: foo/xfoo/yfoo/bar/afoo/bar/bfoo/hello/C/1foo/hello/C/2...foo/hello/C/9999接下来我们实现一个函数叫listDir,列出指定目录下的文件和子目录: let OSS = require('ali-oss');let client = new OSS({ region: '<Your region>', accessKeyId: '<Your AccessKeyId>', accessKeySecret: '<Your AccessKeySecret>', bucket: 'Your bucket name'});async function listDir(dir) let result = await client.list({ prefix: dir, delimiter: '/' }); result.prefixes.forEach(function (subDir) { console.log('SubDir: %s', subDir); }); result.objects.forEach(function (obj) { console.log(Object: %s', obj.name); });end 运行结果如下: > await listDir('foo/')=> SubDir: foo/bar/ SubDir: foo/hello/ Object: foo/x Object: foo/y> await listDir('foo/bar/')=> Object: foo/bar/a Object: foo/bar/b> await listDir('foo/hello/C/')=> Object: foo/hello/C/1 Object: foo/hello/C/2 ... Object: foo/hello/C/9999文件元信息向OSS上传文件时,除了文件内容,还可以指定文件的一些属性信息,称为“元信息”。这些信息在上传时与文件一起存储,在下载时与文件一起返回。 因为文件元信息在上传/下载时是附在HTTP Headers中, HTTP协议规定不能包含复杂字符。因此元信息只能是简单的ASCII可见字符,不能包含换行。 所有元信息的总大小不能超过8KB。 使用put,putStream和multipartUpload时都可以通过指定meta参数来指定文件的元信息: let OSS = require('ali-oss')let client = new OSS({ region: '<Your region>', accessKeyId: '<Your AccessKeyId>', accessKeySecret: '<Your AccessKeySecret>', bucket: 'Your bucket name'});async function put () { try { let result = await client.put('object-key', 'local-file', { meta: { year: 2016, people: 'mary' } }); console.log(result); } catch (e) { console.log(e); }}put(); 通过putMeta接口来更新文件元信息: let OSS = require('ali-oss')let client = new OSS({ region: '<Your region>', accessKeyId: '<Your AccessKeyId>', accessKeySecret: '<Your AccessKeySecret>', bucket: 'Your bucket name'});async function putMeta () { try { let result = await client.putMeta('object-key', { meta: { year: 2015, people: 'mary' } }); console.log(result); } catch (e) { console.log(e); }}putMeta(); 拷贝文件使用copy拷贝一个文件。拷贝可以发生在下面两种情况: 同一个Bucket两个不同Bucket,但是它们在同一个region,此时的源Object名字应为’/bucket/object’的形式 另外,拷贝时对文件元信息的处理有两种选择: 如果没有指定meta参数,则与源文件相同,即拷贝源文件的元信息如果指定了meta参数,则使用新的元信息覆盖源文件的信息 let OSS = require('ali-oss')let client = new OSS({ region: '<Your region>', accessKeyId: '<Your AccessKeyId>', accessKeySecret: '<Your AccessKeySecret>', bucket: 'Your bucket name'});async function copy () { try { // 两个Bucket之间拷贝 let result = await client.copy('to', '/from-bucket/from'); console.log(result); // 拷贝元信息 let result = await client.copy('to', 'from'); console.log(result); // 覆盖元信息 let result = await client.copy('to', 'from', { meta: { year: 2015, people: 'mary' } }); console.log(result); } catch (e) { console.log(e); }} 删除文件通过delete来删除某个文件: let OSS = require('ali-oss')let client = new OSS({ region: '<Your region>', accessKeyId: '<Your AccessKeyId>', accessKeySecret: '<Your AccessKeySecret>', bucket: 'Your bucket name'});async function delete () { try { let result = yield client.delete('object-key'); console.log(result); } catch (e) { console.log(e); }}delete(); 批量删除文件通过deleteMulti来删除一批文件,用户可以通过quiet参数来指定是否返回删除的结果: let OSS = require('ali-oss')let client = new OSS({ region: '<Your region>', accessKeyId: '<Your AccessKeyId>', accessKeySecret: '<Your AccessKeySecret>', bucket: 'Your bucket name'});async function deleteMulti () { try { let result = await client.deleteMulti(['obj-1', 'obj-2', 'obj-3']); console.log(result); let result = await client.deleteMulti(['obj-1', 'obj-2', 'obj-3'], { quiet: true }); console.log(result); } catch (e) { console.log(e); }}deleteMulti();

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

回答

详细解答可以参考官方帮助文档一个Bucket下可能有非常多的文件,SDK提供一系列的接口方便用户管理文件。 查看所有文件通过list来列出当前Bucket下的所有文件。主要的参数如下: prefix 指定只列出符合特定前缀的文件marker 指定只列出文件名大于marker之后的文件delimiter 用于获取文件的公共前缀max-keys 用于指定最多返回的文件个数 let OSS = require('ali-oss');let client = new OSS({ region: '<Your region>', accessKeyId: '<Your AccessKeyId>', accessKeySecret: '<Your AccessKeySecret>', bucket: 'Your bucket name'});async function list () { try { // 不带任何参数,默认最多返回1000个文件 let result = await client.list(); console.log(result); // 根据nextMarker继续列出文件 if (result.isTruncated) { let result = await client.list({ marker: result.nextMarker }); } // 列出前缀为'my-'的文件 let result = await client.list({ prefix: 'my-' }); console.log(result); // 列出前缀为'my-'且在'my-object'之后的文件 let result = await client.list({ prefix: 'my-', marker: 'my-object' }); console.log(result); } catch (e) { console.log(e); }}list(); 模拟目录结构OSS是基于对象的存储服务,没有目录的概念。存储在一个Bucket中所有文件都是通过文件的key唯一标识,并没有层级的结构。这种结构可以让OSS的存储非常高效,但是用户管理文件时希望能够像传统的文件系统一样把文件分门别类放到不同的“目录”下面。通过OSS提供的“公共前缀”的功能,也可以很方便地模拟目录结构。公共前缀的概念请参考列出Object。 假设Bucket中已有如下文件: foo/xfoo/yfoo/bar/afoo/bar/bfoo/hello/C/1foo/hello/C/2...foo/hello/C/9999接下来我们实现一个函数叫listDir,列出指定目录下的文件和子目录: let OSS = require('ali-oss');let client = new OSS({ region: '<Your region>', accessKeyId: '<Your AccessKeyId>', accessKeySecret: '<Your AccessKeySecret>', bucket: 'Your bucket name'});async function listDir(dir) let result = await client.list({ prefix: dir, delimiter: '/' }); result.prefixes.forEach(function (subDir) { console.log('SubDir: %s', subDir); }); result.objects.forEach(function (obj) { console.log(Object: %s', obj.name); });end 运行结果如下: > await listDir('foo/')=> SubDir: foo/bar/ SubDir: foo/hello/ Object: foo/x Object: foo/y> await listDir('foo/bar/')=> Object: foo/bar/a Object: foo/bar/b> await listDir('foo/hello/C/')=> Object: foo/hello/C/1 Object: foo/hello/C/2 ... Object: foo/hello/C/9999文件元信息向OSS上传文件时,除了文件内容,还可以指定文件的一些属性信息,称为“元信息”。这些信息在上传时与文件一起存储,在下载时与文件一起返回。 因为文件元信息在上传/下载时是附在HTTP Headers中, HTTP协议规定不能包含复杂字符。因此元信息只能是简单的ASCII可见字符,不能包含换行。 所有元信息的总大小不能超过8KB。 使用put,putStream和multipartUpload时都可以通过指定meta参数来指定文件的元信息: let OSS = require('ali-oss')let client = new OSS({ region: '<Your region>', accessKeyId: '<Your AccessKeyId>', accessKeySecret: '<Your AccessKeySecret>', bucket: 'Your bucket name'});async function put () { try { let result = await client.put('object-key', 'local-file', { meta: { year: 2016, people: 'mary' } }); console.log(result); } catch (e) { console.log(e); }}put(); 通过putMeta接口来更新文件元信息: let OSS = require('ali-oss')let client = new OSS({ region: '<Your region>', accessKeyId: '<Your AccessKeyId>', accessKeySecret: '<Your AccessKeySecret>', bucket: 'Your bucket name'});async function putMeta () { try { let result = await client.putMeta('object-key', { meta: { year: 2015, people: 'mary' } }); console.log(result); } catch (e) { console.log(e); }}putMeta(); 拷贝文件使用copy拷贝一个文件。拷贝可以发生在下面两种情况: 同一个Bucket两个不同Bucket,但是它们在同一个region,此时的源Object名字应为’/bucket/object’的形式 另外,拷贝时对文件元信息的处理有两种选择: 如果没有指定meta参数,则与源文件相同,即拷贝源文件的元信息如果指定了meta参数,则使用新的元信息覆盖源文件的信息 let OSS = require('ali-oss')let client = new OSS({ region: '<Your region>', accessKeyId: '<Your AccessKeyId>', accessKeySecret: '<Your AccessKeySecret>', bucket: 'Your bucket name'});async function copy () { try { // 两个Bucket之间拷贝 let result = await client.copy('to', '/from-bucket/from'); console.log(result); // 拷贝元信息 let result = await client.copy('to', 'from'); console.log(result); // 覆盖元信息 let result = await client.copy('to', 'from', { meta: { year: 2015, people: 'mary' } }); console.log(result); } catch (e) { console.log(e); }} 删除文件通过delete来删除某个文件: let OSS = require('ali-oss')let client = new OSS({ region: '<Your region>', accessKeyId: '<Your AccessKeyId>', accessKeySecret: '<Your AccessKeySecret>', bucket: 'Your bucket name'});async function delete () { try { let result = yield client.delete('object-key'); console.log(result); } catch (e) { console.log(e); }}delete(); 批量删除文件通过deleteMulti来删除一批文件,用户可以通过quiet参数来指定是否返回删除的结果: let OSS = require('ali-oss')let client = new OSS({ region: '<Your region>', accessKeyId: '<Your AccessKeyId>', accessKeySecret: '<Your AccessKeySecret>', bucket: 'Your bucket name'});async function deleteMulti () { try { let result = await client.deleteMulti(['obj-1', 'obj-2', 'obj-3']); console.log(result); let result = await client.deleteMulti(['obj-1', 'obj-2', 'obj-3'], { quiet: true }); console.log(result); } catch (e) { console.log(e); }}deleteMulti();

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

回答

详细解答可以参考官方帮助文档一个Bucket下可能有非常多的文件,SDK提供一系列的接口方便用户管理文件。 查看所有文件通过list来列出当前Bucket下的所有文件。主要的参数如下: prefix 指定只列出符合特定前缀的文件marker 指定只列出文件名大于marker之后的文件delimiter 用于获取文件的公共前缀max-keys 用于指定最多返回的文件个数 let OSS = require('ali-oss');let client = new OSS({ region: '<Your region>', accessKeyId: '<Your AccessKeyId>', accessKeySecret: '<Your AccessKeySecret>', bucket: 'Your bucket name'});async function list () { try { // 不带任何参数,默认最多返回1000个文件 let result = await client.list(); console.log(result); // 根据nextMarker继续列出文件 if (result.isTruncated) { let result = await client.list({ marker: result.nextMarker }); } // 列出前缀为'my-'的文件 let result = await client.list({ prefix: 'my-' }); console.log(result); // 列出前缀为'my-'且在'my-object'之后的文件 let result = await client.list({ prefix: 'my-', marker: 'my-object' }); console.log(result); } catch (e) { console.log(e); }}list(); 模拟目录结构OSS是基于对象的存储服务,没有目录的概念。存储在一个Bucket中所有文件都是通过文件的key唯一标识,并没有层级的结构。这种结构可以让OSS的存储非常高效,但是用户管理文件时希望能够像传统的文件系统一样把文件分门别类放到不同的“目录”下面。通过OSS提供的“公共前缀”的功能,也可以很方便地模拟目录结构。公共前缀的概念请参考列出Object。 假设Bucket中已有如下文件: foo/xfoo/yfoo/bar/afoo/bar/bfoo/hello/C/1foo/hello/C/2...foo/hello/C/9999接下来我们实现一个函数叫listDir,列出指定目录下的文件和子目录: let OSS = require('ali-oss');let client = new OSS({ region: '<Your region>', accessKeyId: '<Your AccessKeyId>', accessKeySecret: '<Your AccessKeySecret>', bucket: 'Your bucket name'});async function listDir(dir) let result = await client.list({ prefix: dir, delimiter: '/' }); result.prefixes.forEach(function (subDir) { console.log('SubDir: %s', subDir); }); result.objects.forEach(function (obj) { console.log(Object: %s', obj.name); });end 运行结果如下: > await listDir('foo/')=> SubDir: foo/bar/ SubDir: foo/hello/ Object: foo/x Object: foo/y> await listDir('foo/bar/')=> Object: foo/bar/a Object: foo/bar/b> await listDir('foo/hello/C/')=> Object: foo/hello/C/1 Object: foo/hello/C/2 ... Object: foo/hello/C/9999文件元信息向OSS上传文件时,除了文件内容,还可以指定文件的一些属性信息,称为“元信息”。这些信息在上传时与文件一起存储,在下载时与文件一起返回。 因为文件元信息在上传/下载时是附在HTTP Headers中, HTTP协议规定不能包含复杂字符。因此元信息只能是简单的ASCII可见字符,不能包含换行。 所有元信息的总大小不能超过8KB。 使用put,putStream和multipartUpload时都可以通过指定meta参数来指定文件的元信息: let OSS = require('ali-oss')let client = new OSS({ region: '<Your region>', accessKeyId: '<Your AccessKeyId>', accessKeySecret: '<Your AccessKeySecret>', bucket: 'Your bucket name'});async function put () { try { let result = await client.put('object-key', 'local-file', { meta: { year: 2016, people: 'mary' } }); console.log(result); } catch (e) { console.log(e); }}put(); 通过putMeta接口来更新文件元信息: let OSS = require('ali-oss')let client = new OSS({ region: '<Your region>', accessKeyId: '<Your AccessKeyId>', accessKeySecret: '<Your AccessKeySecret>', bucket: 'Your bucket name'});async function putMeta () { try { let result = await client.putMeta('object-key', { meta: { year: 2015, people: 'mary' } }); console.log(result); } catch (e) { console.log(e); }}putMeta(); 拷贝文件使用copy拷贝一个文件。拷贝可以发生在下面两种情况: 同一个Bucket两个不同Bucket,但是它们在同一个region,此时的源Object名字应为’/bucket/object’的形式 另外,拷贝时对文件元信息的处理有两种选择: 如果没有指定meta参数,则与源文件相同,即拷贝源文件的元信息如果指定了meta参数,则使用新的元信息覆盖源文件的信息 let OSS = require('ali-oss')let client = new OSS({ region: '<Your region>', accessKeyId: '<Your AccessKeyId>', accessKeySecret: '<Your AccessKeySecret>', bucket: 'Your bucket name'});async function copy () { try { // 两个Bucket之间拷贝 let result = await client.copy('to', '/from-bucket/from'); console.log(result); // 拷贝元信息 let result = await client.copy('to', 'from'); console.log(result); // 覆盖元信息 let result = await client.copy('to', 'from', { meta: { year: 2015, people: 'mary' } }); console.log(result); } catch (e) { console.log(e); }} 删除文件通过delete来删除某个文件: let OSS = require('ali-oss')let client = new OSS({ region: '<Your region>', accessKeyId: '<Your AccessKeyId>', accessKeySecret: '<Your AccessKeySecret>', bucket: 'Your bucket name'});async function delete () { try { let result = yield client.delete('object-key'); console.log(result); } catch (e) { console.log(e); }}delete(); 批量删除文件通过deleteMulti来删除一批文件,用户可以通过quiet参数来指定是否返回删除的结果: let OSS = require('ali-oss')let client = new OSS({ region: '<Your region>', accessKeyId: '<Your AccessKeyId>', accessKeySecret: '<Your AccessKeySecret>', bucket: 'Your bucket name'});async function deleteMulti () { try { let result = await client.deleteMulti(['obj-1', 'obj-2', 'obj-3']); console.log(result); let result = await client.deleteMulti(['obj-1', 'obj-2', 'obj-3'], { quiet: true }); console.log(result); } catch (e) { console.log(e); }}deleteMulti();

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

问题

JavaScript-SDK之如何实现管理文件(二)?

青衫无名 2019-12-01 21:44:26 1018 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档使用 数据传输 DTS 可以将本地 PostgreSQL 数据库实例的数据迁移到 RDS for PostgreSQL 实例。PostgreSQL 迁移支持增量数据同步功能,可以实现在本地应用不停服的情况下,平滑完成 PostgreSQL 数据库的迁移工作。 本小节简单介绍使用 数据传输 DTS (以下简称 DTS)进行 PostgreSQL->RDS for PostgreSQL 数据迁移的任务配置流程。 迁移类型简介 结构迁移 DTS 将被迁移对象的结构定义迁移到目标实例。对于 PostgreSQL,DTS 支持结构迁移的对象包含:Table、trigger、view、sequence、function、user defined type、rule、domain、operation、aggregate。 全量数据迁移 DTS 将源数据库迁移对象的存量数据全部迁移到目标实例。 增量数据迁移 增量数据迁移将迁移过程中,本地 PostgreSQL 数据库实例的增量更新数据同步到目标 RDS for PostgreSQL 实例,最终实现本地 PostgreSQL 数据库实例同目标 RDS for PostgreSQL 实例保持动态数据同步的过程。使用增量数据迁移,可以实现在本地 PostgreSQL 数据库实例正常提供服务的同时,平滑完成本地 PostgreSQL->RDS For PostgreSQL 的数据迁移。 迁移限制 全量迁移支持的 PostgreSQL 版本为:9.2、9.3、9.4、9.5 及以上版本;增量迁移支持的源实例 PostgreSQL 版本:9.4.8、9.5 及以上版本。迁移过程中,不支持 DDL 操作。不支持迁移使用 C 语言编写的 function。如果使用了对象名映射功能后,依赖这个对象的其他对象可能迁移失败。 迁移权限要求当使用数据传输服务进行 PostgreSQL 迁移时,在不同迁移类型情况下,源跟目标数据库的迁移帐号权限要求如下: 迁移类型 结构迁移 全量迁移 增量数据迁移 本地 PostgreSQL 实例 pg_catalog 的 usage 权限 迁移对象的 select superuser 目标 RDS for PostgreSQL 实例 迁移对象的 create、usage 权限 schema 的 owner schema 的 owner 迁移顺序DTS 在进行 PostgreSQL->RDS For PostgreSQL 数据迁移时,为了解决对象间的依赖,提高迁移成功率。结构对象及数据的迁移顺序如下: 进行结构对象:Table、view、sequence、function、user defined type、rule、domain、operation、aggregate 的迁移全量数据迁移进行结构对象:trigger、foreign key 的迁移 全量数据迁移完成后,任务列表中的迁移进度为:结构迁移 100%,全量迁移 100%,迁移状态为“迁移中”,此时迁移任务正在进行步骤(3)中的对象的迁移。此时,请勿手动结束任务,否则会造成迁移数据丢失。待迁移状态显示为“迁移完成”后,表示全量数据迁移任务已经完成,这时可以安全地手动结束任务。 迁移步骤下面详细介绍下使用 DTS 将本地的 PostgreSQL 数据库迁移到 RDS for PostgreSQL 的任务配置流程。 RDS实例数据库创建在数据迁移过程中,如果待迁移的数据库在目标 RDS for PostgreSQL 实例中不存在,那么 DTS 自动会创建。但是对于如下两种情况,用户需要在配置迁移任务之前,手动创建数据库。 数据库名称不符合:RDS 定义规范(由小写字母、数字、下划线、中划线组成,字母开头,字母或数字结尾,最长 64 个字符)。待迁移数据库,在本地 PostgreSQL 数据库实例和目标 RDS for PostgreSQL 实例中存储名称不同。 对于这两种情况,用户需要在配置迁移任务之前,先在 RDS 控制台完成数据库创建。具体参考RDS数据库创建流程。 迁移帐号创建迁移任务配置,需要提供 PostgreSQL 数据库实例及目标 RDS for PostgreSQL 实例的迁移账号。迁移账号所需权限详见上文的 迁移权限要求。 如果您的本地 PostgreSQL 数据库实例或 RDS for PostgreSQL 实例的迁移账号尚未创建,那么可以参考如下流程创建迁移账号: 通过 PostgreSQL 客户端,在 PostgreSQL 中创建迁移账号。 create user username password 'password' 如果您要使用增量迁移,那么创建的账号必须是 superuser,所以创建账号语句调整为: create user username with superuser password 'password' 参数说明: username:要创建的账号名password:该账号的登录密码 给迁移账号授权,本地 PostgreSQL 数据库实例及 RDS For PostgreSQL 实例的迁移账号权限要求详见上表。 GRANT privileges ON tablename TO username; 参数说明: privileges:该账号的操作权限,如 SELECT、INSERT、UPDATE 等。如果要授权该账号所有权限,则使用 ALLtablename:表名。如果要授权该账号所有的表权限,则使用通配符 *username:要授权的账号名 逻辑流复制插件安装如果您需要使用增量数据迁移进行不停机迁移,那么在任务配置之前,需要在本地 PostgreSQL 中安装 DTS 提供的逻辑流复制插件。 插件下载。 PostgreSQL 9.4 版本 PostgreSQL 9.5 版本 PostgreSQL 9.6版本 PostgreSQL 10.0版本 插件安装。 解压下载的压缩包。将 ali_decoding.so 文件拷贝到 PostgreSQL 安装路径的 lib 目录下。 如果用 rpm 包安装,那么这个绝对路径为:/usr/pgsql-{$version}/lib/,其中 $version 为版本号,例如如果版本为 9.5,那么绝对路径为:/usr/pgsql-9.5/lib。 将ali_decoding.contorl 文件拷贝到 PostgreSQL 安装路径下的share/extension 目录下。 如果用 rpm 包安装,那么这个绝对路径为:/usr/pgsql-${version}/share/extension/,其中 ${version}为 PostgreSQL 版本号,例如如果版本为 9.5,那么绝对路径为:/usr/pgsql-9.5/share/extension/。 测试安装是否成功。 使用 superuser 账号登录 PostgreSQL 客户端,运行如下 SQL,看是否能够成功创建 replication slot 。如果成功创建那么说明插件安装成功。 SELECT * FROM pg_create_logical_replication_slot('replication_slot_test', 'ali_decoding'); 如果输出结果如下,说明插件安装成功。 测试成功后,使用如下 SQL 将 replication slot 删除掉。 SELECT pg_drop_replication_slot('replication_slot_test'); 迁移任务配置当上面的所有前置条件都配置完成后,就可以开始正式的数据迁移了。下面详细介绍迁移任务配置流程。 进入数据传输 DTS 控制台,点击右上角的创建迁移任务,开始迁移任务配置。本地 PostgreSQL 数据库实例跟目标 RDS for PostgreSQL 实例连接信息配置。 这个步骤主要配置 迁移任务名称,本地 PostgreSQL 数据库实例连接信息及目标 RDS for PostgreSQL 实例连接信息。其中: 任务名称 DTS 为每个任务自动生成一个任务名称,任务名称没有唯一性要求。您可以根据需要修改任务名称,建议为任务配置具有业务意义的名称,便于后续的任务识别。 源实例信息 实例类型:选择 有公网 IP 的自建数据库 数据库类型: 选择 PostgreSQL主机名或IP地址: 配置本地 PostgreSQL 数据库实例的访问地址,这个地址必须为公网访问方式端口:本地 PostgreSQL 数据库实例的监听端口数据库名称:连接本地 PostgreSQL 数据库实例的默认数据库名数据库账号:本地 PostgreSQL 数据库实例的连接账号数据库密码:本地 PostgreSQL 数据库实例连接账号对应的密码 目标实例信息 实例类型:选择 RDS 实例RDS 实例 ID: 配置迁移的目标 RDS for PostgreSQL 实例的实例 ID。 DTS 支持经典网络和 VPC 网络的 RDS for PostgreSQL 实例数据库名称:连接 RDS for PostgreSQL 实例的默认数据库名数据库账号:RDS For PostgreSQL 实例的连接账号数据库密码:上面指定的 RDS for PostgreSQL 实例连接账号对应的密码 当配置完连接信息后,点击右下角 授权白名单 并进入下一步进行白名单授权。这个步骤 DTS 会将 DTS 服务器的 IP 地址添加到目标 RDS 实例的白名单中,避免因为 RDS 实例设置了白名单,导致 DTS 服务器连接不上 RDS for PostgreSQL 实例导致迁移失败。 选择迁移对象及迁移类型。 迁移类型 对于 PostgreSQL->RDS for PostgreSQL,支持 结构迁移、全量数据迁移、增量数据迁移。 如果只需要进行全量迁移,那么迁移类型选择:结构迁移 + 全量数据迁移。 如果需要进行不停机迁移,那么迁移类型选择:结构迁移 + 全量数据迁移+增量数据迁移。 迁移对象 选择您要迁移的对象。迁移对象选择的粒度可以为:库、表、列三个粒度。默认情况下,对象迁移到 RDS for PostgreSQL 实例后,对象名跟本地 PostgreSQL 数据库实例一致。如果您迁移的对象在源实例跟目标实例上名称不同,那么需要使用 DTS 提供的对象名映射功能,详细使用方式可以参考库表列映射。 预检查。 在迁移任务正式启动之前,会先进行前置预检查,只有预检查通过后,才能成功启动迁移。预检查的内容及修复方式可以参考本文末尾的 预检查简介 一节。 如果预检查失败,那么可以点击具体检查项后的按钮,查看具体的失败详情,并根据失败原因修复后,重新进行预检查。 启动迁移任务。 当预检查通过后,可以启动迁移任务,任务启动成功后,可以在任务列表中查看迁移的具体状态及迁移进度。 至此,完成本地 PostgreSQL 数据库实例到 RDS for PostgreSQL 实例的数据迁移任务配置。 预检查内容DTS 在启动迁移之前,会进行前置预检查,本小节简单介绍 PostgreSQL->RDS for PostgreSQL 的预检查内容: 预检查项 检查内容 备注 源库连接性检查 检查 DTS 服务同本地 PostgreSQL 数据库 实例的连通性 (1) 填写信息是否有误?如果填写信息有误,请修改后重新预检查(2) 检查端口是否配置从其他服务器连接 目的库连接性检查 检查 DTS 服务同目的 RDS for PostgreSQL 实例的连通性 检查填写信息是否有误,如果有误请先修改后重新预检查 源库版本检查 检查本地 PostgreSQL 数据库实例版本跟目标 RDS for PostgreSQL 是否一致 如果版本不一致,预检查会有提醒。可以根据提醒对本地 PostgreSQL 数据库实例进行升级或降级,也可以继续迁移 数据库可用性检查 检查待迁移数据库在目标 RDS for PostgreSQL 实例是否已存在 如果待迁移数据库命名规范不满足 RDS 实例要求,那么 DTS 在目标 RDS for PostgreSQL 实例创建待迁移数据库会报错失败,即数据库可用性检查会失败。此时可以参考 库表列映射 对迁移数据库进行重命名 源库权限检查 检查任务配置时,提供的本地 PostgreSQL 数据库实例的账号的权限是否满足要求 如果检查失败,那么请参考本文 迁移账号创建 一节对迁移账号进行授权后,重新进行预检查 目的库权限检查 检查任务配置时,提供的目的 RDS for PostgreSQL 数据库账号的权限是否满足要求 如果检查失败,那么请参考本文 迁移账号创建 一节对迁移账号进行授权后,重新进行预检查 同名对象存在性检查 检查待迁移对象在目标 RDS for PostgreSQL 实例中是否已经存在 如果检查失败,请将目标库中这些已经存在的对象删除后,重新进行预检查 源端同名对象存在性检查 检查要迁移到同一个数据库中的多个对象是否重名 如果检查失败,可以参考 库表列映射 将重名对象进行重命名 约束完整性检查 检查待迁移对象依赖的父对象是否迁移 如果检查失败,那么可以修改迁移对象,同时迁移依赖的父对象后,重新预检查 增量拓扑冲突检查 检查同一个迁移对象是否已经存在迁移链路 如果存在冲突链路,那么需要删除掉冲突链路后,重新预检查 LC_MONETERY 一致性检查 检查源库、目标库的 Lc_monetery 定义是否一致 如果检查失败,可以修改目标 RDS For PostgreSQL 实例的 LC_MONETERY 定义,或者继续迁移 PostgreSQL 逻辑流复制插件检查 检查本地 PostgreSQL 实例是否安装了逻辑流复制插件 如果检查失败,可以参考下面的 逻辑流复制插件安装 一节安装逻辑流复制插件后重新预检查 PostgreSQL 逻辑流 slot 存在性检查 检查本地 PostgreSQL 数据库实例存在跟 DTS 创建的 replication slot 重名的 replication slot 如果检查失败,可以删除本地 PostgreSQL 数据库实例中已经存在的同名 replication slot 后,重新预检查

2019-12-01 23:09:43 0 浏览量 回答数 0

问题

建议:用户手册

packrat 2019-12-01 21:57:35 6233 浏览量 回答数 1

问题

普通表单post提交,如何持久识别用户身份?

杨冬芳 2019-12-01 20:08:46 749 浏览量 回答数 1

问题

Logtail如何收集syslog?

轩墨 2019-12-01 21:52:40 1617 浏览量 回答数 0

回答

两个不同的包,肯定有不一样的,好好看下换成ali的吧,com.alibaba.druid.pool.DruidDataSource稳定可靠,用过c3p0,出现过很多问题,尤其是有时候连接的上,有时候连不上。web80%以上都采用这个连接池这个常用不,现在用的多不?很久没搞java了。对行情不是很了解<preclass="brush:html;toolbar:true;auto-links:false;"><!--配置master数据源--><beanid="masterDataSource"class="com.alibaba.druid.pool.DruidDataSource"init-method="init"destroy-method="close"><propertyname="driverClassName"value="${driverClassName}"></property><propertyname="url"value="${master_jdbc_url}"></property><propertyname="username"value="${master_jdbc_username}"></property><propertyname="password"value="${master_jdbc_password}"></property></bean> <divclass='ref'> 引用来自“求是科技”的评论<preclass="brush:html;toolbar:true;auto-links:false;"><!--配置master数据源--><beanid="masterDataSource"class="com.alibaba.druid.pool.DruidDataSource"init-method="init"destroy-method="close"><propertyname="driverClassName"value="${driverClassName}"></property><propertyname="url"value="${master_jdbc_url}"></property><propertyname="username"value="${master_jdbc_username}"></property><propertyname="password"value="${master_jdbc_password}"></property></bean> 换druid吧 换了,也是一样的问题druid与oracle连接的jar包都是从maven上下载的吗?我觉得你这里很有可能是jar包的问题。另外自己的ip尽量写成localhost或127.0.0.1,不要写成192.168.2.67这种。 哦不对。你这是传输list的问题,应该属于用法问题,你换成map试下,我记得曾今我们的解决方案是循环list生成一个字符串传进去,进去后解析出来。 https://my.oschina.net/u/2312022/blog/481180<divclass='ref'> 引用来自“求是科技”的评论druid与oracle连接的jar包都是从maven上下载的吗?我觉得你这里很有可能是jar包的问题。另外自己的ip尽量写成localhost或127.0.0.1,不要写成192.168.2.67这种。回复<aclass='referer'target='_blank'>@求是科技:搞定了,getConnect()的问题,connection需要先转换java传参list的时候,oralce需要使用游标类型来接收。

爱吃鱼的程序员 2020-06-09 10:24:54 0 浏览量 回答数 0

问题

AliOS开发者FAQ

hanfeng10 2019-12-01 21:00:29 2308 浏览量 回答数 0

问题

部署镜像

猫饭先生 2019-12-01 21:03:27 716 浏览量 回答数 0

问题

程序员报错QA大分享(1)

问问小秘 2020-06-18 15:46:14 8 浏览量 回答数 1
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 企业信息查询 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 2020阿里巴巴研发效能峰会 企业建站模板 云效成长地图 高端建站