ユーザーが自分のデバイスで撮影した画像と入力したテキストをアップロードできるモバイル サイトがあります。現在、画像は base64 にエンコードされていますが、残念ながら画像が約 30% 膨張します。multipart/form-data
メソッドを POST 経由で実装することで、この機能を最適化することを考えました。
以下は私がそれを実装した方法です。サーバー側には、テスト中のphpスクリプトがあります。バイナリデータをファイルに保存しますが、サーバーはデータのタイプがtext/plainであると認識し、最初の 9 バイトの印刷可能な文字のみをキャプチャするため、 9 バイトしかキャプチャしません。この場合、私は PNG ファイルでテストしていて、これが私が得たものです。
ここで何か変わったことを追加または削除する人はいますか? それは私を夢中にさせています。
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
});