Cloudinary API 图像上传的正确 React Native“文件”?

Posted

技术标签:

【中文标题】Cloudinary API 图像上传的正确 React Native“文件”?【英文标题】:Proper React Native "file" for Cloudinary API image upload? 【发布时间】:2017-03-08 01:29:32 【问题描述】:

http://cloudinary.com/documentation/image_upload_api_reference#upload

我尝试了以下方法:

用户从相机胶卷中挑选:


    data: "/9j/4AAQSkZJRgABAQAASABIAAD/4QBYRXhpZg..."
    origURL: "assets-library://asset/asset.JPG?id=ED7AC36B-A150-4C38-BB8C-B6D696F4F2ED&ext=JPG",
    uri: "file:///Users/me/Library/Developer/CoreSimulator/Devices/1BC4A449-46CF-4ADE-A9B5-78906C9C50FB..."

然后在服务器(Node.js)上,我尝试从上面使用uri

  addUserPhoto(uri) 
    const photo = new Promise((resolve, reject) => 
      const base64URI = new Buffer(uri).toString('base64');
      cloudinary.v2.uploader.upload('data:image/jpeg;base64,'+base64URI, , (result) => 
        console.log(result);
        resolve(result);
      );
    );
    return photo;
  

但我得到了错误: message: 'Invalid image file', http_code: 400

不确定正确的“文件”。我究竟做错了什么?我应该从相机胶卷数据中选择哪个字段,如何将其转换为与 Cloudinary API 兼容的“文件”?

【问题讨论】:

【参考方案1】:

uri 是图像的本地文件路径(在手机上),因此服务器无法访问它。

将图像发送到远程主机的方式是发送数据。

所以它最终成为data 之一。像这样:

data:image/jpeg;base64,/9j/4AAQSkZ...

之后,Node Express 给了我Error: request entity too large(所以我还以为是错的)

原来我必须这样做: app.use(bodyParser.json( limit: '50mb' )); app.use(bodyParser.urlencoded( limit: '50mb', extended: true ));

【讨论】:

bodyParser 配置救了我!谢谢

以上是关于Cloudinary API 图像上传的正确 React Native“文件”?的主要内容,如果未能解决你的问题,请参考以下文章

cloudinary -base 64 图像上传给出无效的 JSON 响应

如何使用 Cloudinary direct 正确更新或销毁图像?

使用 jQuery 使用 Cloudinary API 直接上传图片

在图像上叠加 Cloudinary 上传小部件

forEach不是将多个图像上传到cloudinary的函数

上传到 Cloudinary API - 文件参数无效