7

私は現在、jsonとxmlを介してのみデータを提供および受信するRailsベースのWebアプリケーションをまとめています。ただし、一部の要件には、バイナリデータ(画像)をアップロードする機能が含まれています。

私の理解では、JSONは完全にそのためのものではありません...しかし、アプリケーションへのこれら2つのエントリポイントを介してバイナリファイル/データを受信する問題に一般的にどのように対処しますか?

4

4 に答える 4

9

バイナリデータをbase64のようなものでエンコードすることをお勧めします。これにより、XMLまたはJSON形式で安全に使用できるようになります。

http://en.wikipedia.org/wiki/Base64

于 2009-01-09T01:08:18.867 に答える
5

たぶん、 Base64アルゴリズムを見ることができます。これは、すべてをASCII文字に「変換」するために使用されます。あなたはそれをコーディングしてデコードすることができます。これは、Webサービス、またはdotnetシリアル化にも使用されます。

これが少し役立つことを願っています。

編集:私は「新しい投稿」を見ました、投稿している間、誰かがより速かったです。Rails base64

于 2009-01-09T01:10:03.543 に答える
4

Rails と json と xml を使用している場合は、HTTP を使用しています。「POST」は HTTP の一部であり、バイナリ データを変換する最良の方法です。Base64 は、これを行うには非常に非効率的な方法です。

サーバーがデータを送信している場合は、サーバー上のファイルへのパスを XML または JSON で指定することをお勧めします。そうすれば、サーバーはデータを base64 でエンコードする必要がなく、HTTP GET を既にサポートしているクライアントは、データをデコードせずにプルダウンできます。(GET /path/to/file)

ファイルを送信するには、サーバーやクライアントに一意のファイル名を生成させ、2 段階のプロセスを使用します。クライアントは、fileToBeUploaded: "name of file.ext" を含む xml または json メッセージを送信し、メッセージの送信後、前述のファイル名でデータを POST します。繰り返しますが、クライアントとサーバーはデータをエンコードおよびデコードする必要はありません。これは、マルチパート リクエストを使用して 1 つのリクエストで実行できます。

Base64 は簡単ですが、データのサイズやリクエストの頻度によっては、CPU やメモリをすぐに消費してしまいます。サーバー側では、キャッシュされる操作ではありませんが、ディスクからファイルを読み取る Web サーバーの操作はキャッシュされます。

于 2009-05-19T10:53:09.697 に答える
2

画像が大きすぎない場合は、RoR :binary 型でデータベースに配置することは非常に理にかなっています。データベースのレプリカがある場合、イメージは他のサイトに無料でコピーされ、孤立したイメージや未亡人のイメージについて心配する必要はなく、アトミック トランザクションの問題ははるかに単純になります。

一方、Nessence は、Base64 が他のエンコーディング レイヤーと同様に、ネットワーク、メモリ、および CPU の負荷をトランザクションに追加するという点で正しいです。ネットワーク帯域幅が最大の問題である場合は、Web サービスが deflate/gzip 圧縮接続を受け入れて提供していることを確認してください。これにより、ネットワーク層での Base64 データのコストが削減されますが、メモリと CPU の負荷がさらに増加し​​ます。

これらは、チームやクライアントと話し合う必要があるアーキテクチャの問題です。

最後に、RoR の XML REST サポートについてお知らせします。デフォルトのスキャフォールディングから次のようなコードを使用して XML にレンダリングすると、Rails:binaryデータベース タイプは<object type="binary" encoding="base64">...</object>XML オブジェクトになります。

def show
  @myobject = MyObject.find(:id)
  respond_to do |format|
    format.xml { render => @myobject }
  end
end

これは GET 操作に最適で、PUT 操作と POST 操作は簡単に記述できます。問題は、Rails の PUT 操作と POST 操作が同じタグを受け入れないことです。これは、from_xmlコードがタグを解釈せずtype="binary"、代わりに を探すためtype="binaryBase64"です。Rails lighthouse サイトには、これを修正するためのパッチを含むバグがあります。

于 2009-08-18T00:23:40.930 に答える