无法将 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 获取文件并将其上传到服务器

将图像从 opencv 上传到 s3 存储桶

Paperclip S3 - 可以上传图像但无法查看它们

使用 Amazon Educate Starter 账户将图像上传到 S3

Cordova/Ionic 应用程序通过服务器签名的 url 将 base64 图像上传到 S3

如何使用 django-storages 将图像上传到亚马逊 S3?在管理员中上传有效,但在网站表单中无效