0

$http または $resource と angular.js を使用してテキスト BLOB をファイルとしてアップロードする - curl スタイルのマルチパート/フォーム アップロードを模倣します。

この問題に関する以前の投稿があります。誰かが私が迷っている場所を特定できることを期待して、この問題についてより明確にしようとしています。

以下は、このサービスで動作することがわかっている curl コマンドの例です。

curl \
http://c.docverter.com/convert \
-F from=markdown \
-F to=pdf \
-F input_files[]=@<(echo hello) #or @example.md for a file

この問題に関する以前の投稿

sinatra からの成功ログ応答の例

{"input_files"=>[{:filename=>"api.md", :type=>"text/markdown", :name=>"input_files[]", :tempfile=>#<Tempfile:/tmp/RackMultipart20160426-3-5tb8po>, :head=>"Content-Disposition: form-data; name=\"input_files[]\"; filename=\"api.md\"\r\nContent-Type: text/markdown\r\n"}], "from"=>"markdown", "to"=>"pdf"}

私がする必要があることに

マークダウン テキスト (ブロブを使用すると仮定) を「ファイル」としてアップロードする必要があります。 $resource と $http の両方をさまざまな構成で試しましたが、うまくいきませんでした。

私の100回目のAngular試行後の典型的な惨めなログ応答:

{"from"=>"markdown", "input_files"=>["{}"], "to"=>"pdf"}

コード例:

angular.module('app')
  .factory('convert', function ($resource) {
    return $resource('http://c.docverter.com/convert', null, {
    pdf: {
      method: 'POST',
      headers: { 'Content-Type': 'multipart/form-data' },
      params: {
        from: 'markdown',
        to: 'pdf',
        'input_files[]': new Blob(['##title'], 'text/markdown')
      }
    }
  });
});

これは実際に私が試したことのほんの一例です。私はこれを数時間叩いてきましたが、あまり運がなかったので、おそらくここの誰かがマルチパートフォームデータについて詳しく知っていて、ブロブと角度の落とし穴に光を当てることができます.

4

1 に答える 1

0

ぐっすり眠って、もう 1 時間、アップロードとダウンロードを行っています。

var fd = new FormData();
var blob = new Blob([$scope.markdown], {type: 'text/markdown'});
var file = new File([blob], "abc.md");
fd.append('input_files[]', file);
fd.append('from', 'markdown');
fd.append('to', 'pdf');

$http.post('https://mydocverterserver.com/convert', fd, {
    transformRequest: angular.identity,
    headers: {'Content-Type': undefined},
    responseType: 'arraybuffer'
})
.success(function(response){
  var b = new Blob([response], { type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' });
  FileSaver.saveAs(b, 'abc.docx');
})
.error(function(res){
  console.log(res);
});

まだ少し大雑把です。おそらくクリーンアップして工場に移動しますが、動作します。

これは docx ですが、markdown と pdf でも機能します。

FileSaver ビットの由来: angular-file-saver

私のようにdocverter固有のソリューションを探している場合-サーバー側の修正について説明しますhere

于 2016-04-26T18:41:01.687 に答える