【发布时间】:2017-11-29 01:24:15
【问题描述】:
我有 cordova 应用程序,用户必须能够从手机中选择图像并将其上传到 AWS S3。我为此使用cordova-plugin-camera 和S3 SDK。我的代码可以正常工作(见下文),但需要将整个图像拉入内存中的 base64 编码字符串(每个Camera.DestinationType.DATA_URL),然后再拉入Buffer。
我希望将其从手机的硬盘中流式传输,以缓解潜在的内存问题。 cordova-plugin-camera 网站甚至对此有警告:
/** * 警告:不推荐使用 DATA_URL! DATA_URL 目的地 * 类型非常占用内存,即使质量很低 环境。使用它 * 会导致内存不足错误和 应用程序崩溃。请改用 FILE_URI * 或 NATIVE_URI。 */
那么有没有办法使用FILE_URI 或NATIVE_URI 或任何其他技术将照片直接从磁盘传输到S3?
这是我当前的代码:
doTheThing() {
let options = {
quality: 50,
destinationType: Camera.DestinationType.DATA_URL,
sourceType: Camera.PictureSourceType.PHOTOLIBRARY,
encodingType: Camera.EncodingType.JPG
};
navigator.camera.getPicture(imgData => {
this.uploadToS3(imgData);
}, options);
uploadToS3(data) {
let AWS = require('aws-sdk');
AWS.config = new AWS.Config();
AWS.config.accessKeyId = 'noway';
AWS.config.secretAccessKey = 'jose';
AWS.config.region = 'us-east-2';
let s3 = new AWS.S3();
let uploadParams = { Bucket: 'iamkule/f1/f2', Key: '', Body: new Buffer(data, 'base64') };
uploadParams.Key = 'myfile.jpg';
s3.upload(uploadParams, function (err, data) {
if (data) {
console.log('yay!');
}
});
}
}
【问题讨论】:
-
你看文件上传插件了吗?
-
@Gandhi 我可以得到一个网址吗?你的意思是cordova-plugin-file-transfer (cordova.apache.org/docs/en/latest/reference/…)?
-
文件传输插件就是我所指的。有一个上传功能,你可以试试
-
查看链接 - github.com/gandhirajan/Cordova_File_Operations 看看是否有帮助
-
这有什么线索吗?