namespace media;
entity Pictures {
key ID : UUID;
@Core.MediaType: 'image/png'
content : LargeBinary;
}
using media as db from '../db/schema';
service MediaService {
entity Pictures as projection on db.Pictures;
}
POST: https://host/media/Pictures
Request Headers:
Content-Type: application/json
Request Body : {}
PUT: https://host/media/Pictures(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)/content
Request Headers:
Content-Type: image/png
Request Body : <MEDIA>
GET: https://host/media/Pictures(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)/content
> cf create-service objectstore s3-standard s3-pictures
modules:
...
- name: cap-media-node-srv
...
requires:
- name: cap-media-node-db-hdi-container
- name: s3-pictures
resources:
...
- name: s3-pictures
type: objectstore
parameters:
service: objectstore
service-plan: s3-standard
service-name: s3-pictures
...
"dependencies": {
"@sap/cds": "^3.18.1",
"aws-sdk": "^2.559.0",
"express": "^4.17.1",
"hdb": "^0.17.1"
},
...
module.exports = srv => {
const vcap_services = JSON.parse(process.env.VCAP_SERVICES)
const AWS = require('aws-sdk')
const credentials = new AWS.Credentials(
vcap_services.objectstore[0].credentials.access_key_id,
vcap_services.objectstore[0].credentials.secret_access_key)
AWS.config.update({
region: vcap_services.objectstore[0].credentials.region,
credentials: credentials
})
const s3 = new AWS.S3({
apiVersion: '2006-03-01'
})
srv.on('UPDATE', 'Pictures', async req => {
const params = {
Bucket: vcap_services.objectstore[0].credentials.bucket,
Key: req.data.ID,
Body: req.data.content,
ContentType: "image/png"
};
s3.upload(params, function (err, data) {
console.log(err, data)
})
})
srv.on('READ', 'Pictures', (req, next) => {
if (!req.data.ID) {
return next()
}
return {
value: _getObjectStream(req.data.ID)
}
})
/* Get object stream from S3 */
function _getObjectStream(objectKey) {
const params = {
Bucket: vcap_services.objectstore[0].credentials.bucket,
Key: objectKey
};
return s3.getObject(params).createReadStream()
}
}
> cf env <APP_NAME>
PUT /media/Pictures(<ID>)/content
null { ETag: '"<ETAG>"',
ServerSideEncryption: 'AES256',
Location: '<LOCATION>',
key: '<ID>',
Key: '<ID>',
Bucket: '<BUCKET>' }
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
10 | |
9 | |
5 | |
4 | |
4 | |
3 | |
3 | |
3 | |
3 | |
3 |