无法将 Nativescript 图像上传到 S3
Posted
技术标签:
【中文标题】无法将 Nativescript 图像上传到 S3【英文标题】:Unable to upload Nativescript images to S3 【发布时间】:2020-07-07 16:47:08 【问题描述】:我有一个 nativescript-vue 应用程序,我想在其中拍摄一张相机拍摄的图像并上传到我的 S3 存储桶。
我安装了插件:
tns plugin add nativescript-aws-sdk
我的 app.js 中有:
import S3 from "nativescript-aws-sdk/s3";
S3.init( endPoint: '/images/person', accessKey: config.AWS_ACCESS_KEY, secretKey: config.AWS_SECRET_KEY, type: 'static' );
Vue.use(S3);
然后在我的函数中上传图片:
uploadPicture()
console.log('uploadPicture called..');
const s = new S3();
console.log('S3 inited..' + JSON.stringify(s));
但这会导致:
CONSOLE LOG file:///node_modules/@nativescript/core/image-source/image-source.js:331:16: 'fromNativeSource() is deprecated. Use ImageSource constructor instead.'
CONSOLE LOG file:///app/components/Photo.vue:303:0: 'uploadPicture called..'
CONSOLE LOG file:///app/components/Photo.vue:304:0: 'S3 const..undefined'
所以 S3.init() 有一些东西会导致错误。我在网上看不到很多这个插件的例子,所以要么没有人有问题,要么没有被使用?
谁能看到我做错了什么,你能指出我正确的方向吗?
更新: 将导入从 vue 文件移至 app.js:
import S3 from "nativescript-aws-sdk/s3";
S3.init( endPoint: '/images/person', accessKey: config.AWS_ACCESS_KEY, secretKey: config.AWS_SECRET_KEY, type: 'static' );
在我的 Vue 文件中:
import S3 from 'nativescript-aws-sdk/s3';
const s3 = new S3();
const imageUploaderId = s3.createUpload(
file: that.cameraImage,
bucketName: config.AWS_BUCKET_NAME,
key: `ns_$isios ? 'ios' : 'android'`+fileName,
acl: 'public-read',
completed: (error, success) =>
if (error)
console.log(`S3 Download Failed :-> $error.message`);
if (success)
console.log(`S3 Download Complete :-> $success.path`);
,
progress: progress =>
console.log(`Progress : $progress.value`);
).catch((err) =>
console.error("createUpload() caught error: " + JSON.stringify(err));
);
s3.pause(imageUploaderId);
s3.resume(imageUploaderId);
s3.cancel(imageUploaderId);
但似乎什么也没发生 - 没有错误或进展。
【问题讨论】:
您在哪个平台上遇到问题,iOS / Android? 我目前正在使用 iOS 进行测试,但最终它应该支持两者。 您没有按照说明操作? market.nativescript.org/plugins/nativescript-aws-sdk 是的,我的代码看起来正确,但 S3.init 正在停止执行。我可以构建它的唯一方法是将导入更改为: const S3 = require('nativescript-aws-sdk/s3').S3; 不,不一样。请注意它告诉S3.Init
// 。不同之处在于您声明了const S3 = require...
,但他们的S3
声明来自导入。
【参考方案1】:
您已两次声明 S3,一次是全局声明:
import S3 from "nativescript-aws-sdk/s3";
我猜是 uploadPicture() 方法中的本地版本:
const S3 = require('nativescript-aws-sdk/s3').S3;
导入 S3 必须执行 init,而不是稍后按照:https://market.nativescript.org/plugins/nativescript-aws-sdk
【讨论】:
我更新了我的更改 - 将导入移动到 app.js。但是,如果我有 'S3.S3.init(' 仅使用 'S3.init('',我将无法启动。但是如何在我的 vue 文件中使用 S3 ?以上是关于无法将 Nativescript 图像上传到 S3的主要内容,如果未能解决你的问题,请参考以下文章
如何从 NativeScript 中的 Image 获取文件并将其上传到服务器
使用 Amazon Educate Starter 账户将图像上传到 S3