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();
}
}
}
をなぜあなたはしないでください:あなたはそれのように感じる場合
が使用しているFormData#はできるだけ多くを追加したり:JSONでのバイナリデータは、悪い習慣(および大きいサイズ)などに等しく、 rawバイトとして送信しますか? Base64への変換は、サイズとパフォーマンスにある程度の影響を与えます。それらの生のバイトにgzip圧縮を適用して送信している実際のデータに応じて、サイズをさらに細くすることができます。しかし、あなたが画像をアップロードしているとすれば、それらはすでに圧縮されています(rawフォーマットを使用していない限り).gzipはここではあまり効果がありません。 –
私は試したreader.readAsBinaryString(ファイル);ファイルリーダーでは、バイナリデータを与えないので、ランダムな文字列を与えるので、webApiのバイト配列に変換することはできません – Nikil
異なるフォーマットは異なるサイズを持つため、元のフォーマットに戻さない限り、期待する必要がありますこの。イメージの一般的なアプローチは、イメージをフォルダにbase64文字列ではなくイメージとして保存してから、ファイル名をデータベースに格納することです。アップロードされた画像を扱うすべての方法には長所と短所がありますが、私にとってこれは最も明確な方法です(画像をウェブサイトに表示したい場合はページの読み込み時間を短縮します)。 – Archer