2015-09-14 6 views
5

私はthisの質問が私の問題を解決するだろうと私はSimple HTTP Serverの例に従ったが、解決策が見つからないという別の問題が発生している。ピラミッドでxlsxwriterレスポンスを返すときのデコードの問題

私のサーバーにExcelファイルを生成し、それをHttp応答でユーザーに返したいとします。私はxlsxwriterを使って私のサーバにファイルとピラミッドのフレームワークを構築しています。私はファイルをビルドして返しましたが、最初の問題はLibreCalcです(私はUbuntu 14でテストしています)、どのようにファイルをインポートしたいのですか?私が選択したものではありません。このエラーメッセージが表示されます。

一般的なエラーです。 一般的な入出力エラーです。

ファイルを作成して応答として返さずに保存すれば、問題なく開くことができます。

output = StringIO() 
workbook = xlsxwriter.Workbook(output) 
worksheet = workbook.add_worksheet() 

# add the data 

workbook.close() 

excelcontent = output.getvalue() 
response = Response(content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 
        body=excelcontent) 
response.headers.add('Content-Disposition', 
        "attachment; filename=%s.xlsx" % nice_filename) 
response.headers.add('Access-Control-Expose-Headers','Content-Disposition') 
response.headers.add("Content-Length", str(len(excelcontent))) 
response.headers.add('Last-Modified', last_modified) 
response.headers.add("Cache-Control", "no-store") 
response.headers.add("Pragma", "no-cache") 

return response 

そして、私は応答を処理:ファイル構築する

私のコード

$http({ 
     method: 'POST', 
     url: url, 
     data: data}, 
     {responseType: 'arraybuffer'} 
    ).success(function (response, status, headers, config) { 
     var file = new Blob([response], {type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'}); 
     var fileURL = URL.createObjectURL(file); 
     var result = document.getElementsByClassName("excel_hidden_download"); 
     var anchor = angular.element(result); 
     var filename_header = headers('Content-Disposition'); 
     var filename = filename_header.split('filename=')[1]; 
     anchor.attr({ 
      href: fileURL, 
      target: '_blank', 
      download: filename 
     })[0].click(); 
    }) 

を私はそれが私がUTF-8を使用しているという事実とは何かを持っている可能性が最初に考えました私はそれ以外の場合はビルドして開くことができるので、私はそうは思わない。

# -*- coding: utf-8 -*-

+0

PythonファイルでのUTF-8エンコーディングは、関連付けることができません。 –

+0

ブラウザのアドレスバーのURLから直接ファイルをダウンロードし、それがうまく動作するかどうかを確認できますか? –

+0

もしあなたがテキストエディタでファイルを調べる必要がないなら、何かヒントがあればそれが何であるかを見る必要があります。それはXMLなので、人間が読めるようにする必要があります。 –

答えて

1

私はthis質問に対する回答を、以下のことにより溶液を取得することができました。私はトリックをしたまさにわからないんだけど、ここに私の結果のコードです:

$http({ 
    method: 'POST', 
    url: url, 
    data: data, 
    responseType: 'arraybuffer' 
}).success(function (response, status, headers, config) { 
    var blob = new Blob([response], { 
     type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' 
    }); 
    var filename = headers('Content-Disposition').split('filename=')[1]; 

    var config = { 
     data: blob, 
     filename: filename, 
    }; 

    FileSaver.saveAs(config); 
}) 

そして、それは私が唯一のhttpコードを変更するために必要な、完璧に動作します。ところで、私はをsaveAs関数に使用しました。

関連する問題