使用cordova文件传输插件上传到parse.com时,jpeg损坏

问题描述 投票:2回答:6

我正在使用parse.com rest api https://www.parse.com/docs/rest#files我正在尝试从cordova应用程序上传照片。我正在使用wrapperfile plugin的ngCordova项目file transfer plugin

当我上传照片时,它以某种方式被损坏。参见http://files.parsetfss.com/73b88ac0-8858-4f64-92bf-de6aaf29f525/tfss-7b54f8e8-77fd-4e3d-bbbe-83bf67bb08d0-profile-image.jpeg

如果我将发布请求Content-Type更改为application/json,我们将看到以下http://files.parsetfss.com/73b88ac0-8858-4f64-92bf-de6aaf29f525/tfss-219ecbb4-091f-45e6-9da1-35ad84022db6-profile-image.jpeg,它相当于上载的jpeg的十六进制转储。

--+++++org.apache.cordova.formBoundary
Content-Disposition: form-data; name="file"; filename="no-filename"
Content-Type: image/jpeg
Content-Length: 35476

<binary>
--+++++org.apache.cordova.formBoundary--

将该图像加载到预览中会发出警告,表明它已损坏。在photoshop中,它已正确加载,因此信息在那里,只是有些损坏。

我怀疑cordova文件传输插件不成熟,默认情况下会添加不需要的参数filefilename。而且无法删除它们。参见https://github.com/apache/cordova-plugin-file-transfer/blob/master/doc/index.md#upload

如何使用其余api和文件传输插件将jpeg二进制文件上传到parse.com?

profilesController.js

// uploads photo to rest api given local file_uri
$scope.addPhoto = function() {

  var options = {};
  options.mimeType = 'image/jpeg';
  options.headers = {
    'X-Parse-Application-Id': 'my-id',
    'X-Parse-REST-API-Key': 'my-key',
    'Content-Type': 'image/jpeg'
  };

  $cordovaFile.uploadFile('https://api.parse.com/1/files/profile-image.jpeg', $scope.imageSrc, options).then(function(result) {
    console.log('result:', result);
    $ionicLoading.hide();
  }, function(err) {
    // An error occured. Show a message to the user
  });
};
rest cordova parse-platform mime-types content-type
6个回答
1
投票

您可以从cordova请求中转储http标头吗? IMO的发送内容类型:mime / multipart,而不是文档指定的内容类型。通常,如果插件仅格式化REST api文档中提到的标头,并且文件字节包装在请求正文中的Http.Entity中,就可以了。

[使用“ -v”开关自己列出列表头然后调用curl示例,然后测试您的应用程序转储http头(如果需要,则为WIRE),以验证您发送的curl是什么,这不是一个坏主意。 >

curl -v -X POST  -H "X-Parse-Application-Id: AbR" -H "X-Parse-REST-API-Key: kuI9"  -H "Content-Type: image/*"  --data-binary '@test.png' https://api.parse.com/1/files/test.png

1
投票

[当前,文件传输插件发送多形式零件数据,该数据将多零件头添加到有效载荷。也许服务器不接受多部分标题。尝试从master安装文件传输版本,其中指出:“如果存在名为Content-Type的标头,则不会使用多部分表单数据。”


0
投票

答案是插件的api与解析所期望的格式不兼容。我求助于使用javascript sdk的文件方法https://www.parse.com/docs/js_guide#files-classes和相机插件的DATA_URL方法https://github.com/apache/cordova-plugin-camera/blob/master/doc/index.md#options


0
投票

您可以使用REST api从cordova应用程序上传文件。


0
投票

花些时间让我想一想这是我删除多部分标题的方式。


0
投票

我进行了2项对我有用的更改。

© www.soinside.com 2019 - 2024. All rights reserved.