2017-01-12 21 views
1

JavaScriptでファイルリーダーを使用しています。私のイメージをWebApiに投稿し、バイト配列に変換してサーバーに保存する必要があります。画像のサイズを大きく、私は30KBの画像をアップロードした場合、それが保存されて言ってみましょうすると、サーバで389Kbを持って、私は同じサイズで保存するか、画像のサイズを小さくするにはどうすればよいBase64に変換するとイメージのサイズを小さくする

//File Reader 
function OnFileEditImageEntry(file) { 
var reader = new FileReader(); 
reader.onloadend = function (evt) { 
    var ImageBase64 = evt.target.result; 
    return ImageBase64 ; 
}; 
reader.readAsDataURL(file); 
} 

//WEB API// 
public IHttpActionResult UpdateUserDetails(ImageModel model) 
{ 

    try 
    { 
     if (model.ImageBase64 != "") 
     { 
      var PicDataUrl = ""; 
      string ftpurl = "ftp://xxx.xxxxx.xxxx/"; 
      var username = "xxx"; 
      var password = "xxxxx"; 
      string UploadDirectory = "xxxx/xx"; 
      string FileName =model.ImageFileName; 
      String uploadUrl = String.Format("{0}{1}/{2}", ftpurl, UploadDirectory,FileName); 
       FtpWebRequest req = (FtpWebRequest)FtpWebRequest.Create(uploadUrl); 
       req.Proxy = null; 
       req.Method = WebRequestMethods.Ftp.UploadFile; 
       req.Credentials = new NetworkCredential(username, password); 
       req.EnableSsl = false; 
       req.UseBinary = true; 
       req.UsePassive = true; 
       byte[] data =Convert.FromBase64String(model.ImageBase64); 
       req.ContentLength = data.Length; 
       Stream stream = req.GetRequestStream(); 
       stream.Write(data, 0, data.Length); 
       stream.Close(); 
    } 
     } 
    } 
+1

をなぜあなたはしないでください:あなたはそれのように感じる場合

$.post(url, { name: '', data: base64 }) 

が使用しているFormData#はできるだけ多くを追加したり:JSONでのバイナリデータは、悪い習慣(および大きいサイズ)などに等しく、 rawバイトとして送信しますか? Base64への変換は、サイズとパフォーマンスにある程度の影響を与えます。それらの生のバイトにgzip圧縮を適用して送信している実際のデータに応じて、サイズをさらに細くすることができます。しかし、あなたが画像をアップロードしているとすれば、それらはすでに圧縮されています(rawフォーマットを使用していない限り).gzipはここではあまり効果がありません。 –

+0

私は試したreader.readAsBinaryString(ファイル);ファイルリーダーでは、バイナリデータを与えないので、ランダムな文字列を与えるので、webApiのバイト配列に変換することはできません – Nikil

+0

異なるフォーマットは異なるサイズを持つため、元のフォーマットに戻さない限り、期待する必要がありますこの。イメージの一般的なアプローチは、イメージをフォルダにbase64文字列ではなくイメージとして保存してから、ファイル名をデータベースに格納することです。アップロードされた画像を扱うすべての方法には長所と短所がありますが、私にとってこれは最も明確な方法です(画像をウェブサイトに表示したい場合はページの読み込み時間を短縮します)。 – Archer

答えて

0

の代わりに生のバイナリを送る助けが必要base64/FileReaderでサイズを30%増やす

フェッチ付き

XHR
// xhr = new ... 
// xhr.open(...) 

xhr.send(file) // or 
xhr.send(fd) // send the FormData 

通常のファイルをアップロードするとき、JSONを送信して回避しようとして、多くの開発者と

は間違っにする傾向があります。

fd.append('json', json) 

関連する問題