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

标签 rest cordova parse-platform mime-types content-type

我正在使用 parse.com rest api https://www.parse.com/docs/rest#files我正在尝试从 cordova 应用程序上传照片。我正在使用 ngCordova 项目 wrapperfile pluginfile 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
  });
};

最佳答案

你能从 cordova 请求中转储 http header 吗? IMO 发送 Content-type: mime/multipart 而不是 Docs 指定的内容。一般来说,如果插件只是格式化 REST api 文档中提到的 header ,并且如果文件字节包装在请求正文中的 Http.Entity 中,你会没事的。

使用“-v”开关自己调用 curl 示例列出 header 是个不错的主意,然后测试您的应用程序是否转储 http header (如果需要,还有 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

关于rest - 使用 cordova 文件传输插件上传到 parse.com 时损坏的 jpeg,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25336648/

相关文章:

Java Spring Boot REST API - 补丁 - "java.util.LinkedHashMap cannot be cast to xxx"

java - 微服务架构中的错误源传播

javascript - Phonegap 导航模块未使用 JQM 加载

ios - PFObject 未被转换为子类

javascript - 如何打印从 REST 返回的嵌套错误消息?

java如何重写jackson ObjectReader?

javascript - Cordova:无论如何在 Javascript 中检测 iOS 应用程序是作为调试还是发布构建的?

ruby - 无法安装pushmeup插件

iOS 推送通知将旧通知带回锁定屏幕

javascript - 将图像上传到解析帐户