1

ユーザーが自分のデバイスで撮影した画像と入力したテキストをアップロードできるモバイル サイトがあります。現在、画像は base64 にエンコードされていますが、残念ながら画像が約 30% 膨張します。multipart/form-dataメソッドを POST 経由で実装することで、この機能を最適化することを考えました。

以下は私がそれを実装した方法です。サーバー側には、テスト中のphpスクリプトがあります。バイナリデータをファイルに保存しますが、サーバーはデータのタイプがtext/plainであると認識し、最初の 9 バイトの印刷可能な文字のみをキャプチャするため、 9 バイトしかキャプチャしません。この場合、私は PNG ファイルでテストしていて、これが私が得たものです。

16 進数でアップロードされた PNG ファイル。 キャプチャされたのは 9 バイトのみ

ここで何か変わったことを追加または削除する人はいますか? それは私を夢中にさせています。

        var boundary = 'boundary' + Math.floor(Math.random() * (new Date().getMilliseconds()) );

        var data = "--" + boundary + '\r\n';
            data+= "content-disposition: form-data; name=\"txt\"" + '\r\n';
            data+= "content-type: text/plain" + '\r\n\r\n';
            data+= "Text+data\r\n" + '--' + boundary + '\r\n' ;
            data+= "content-disposition: form-data; name=\"img\"" + '\r\n';
            data+= "content-length: " + (image_length) + '\r\n';
            data+= "content-type: application/octet-stream" + '\r\n\r\n';
        var body_length = image_length + ('\r\n--' + boundary).length + data.length;
            data+= binary_data + '\r\n--' + boundary;

        $.ajax({ type : 'POST', url : 'post.test.php?len=' + image_length,
            data : data, contentType: 'multipart/form-data, boundary=' + boundary, contentLength: body_length
        });
4

0 に答える 0