Javascript 使用图像URI在服务器文件系统中存储图像文件

Javascript 使用图像URI在服务器文件系统中存储图像文件,javascript,c#,jquery,cordova,asp.net-web-api,Javascript,C#,Jquery,Cordova,Asp.net Web Api,我从这个Cordova摄像头API获取URL,并将其发布到WEBAPI。我尝试使用base64,但当我在服务器中发布它时,它会增加图像大小 请在下面找到我的代码,并建议我如何将文件保存到服务器 //WEB API// public IHttpActionResult UpdateUserDetails(ImageModel model) { try { if (model.ImageBase64 != "") { var PicDataUrl = ""

我从这个Cordova摄像头API获取URL,并将其发布到WEBAPI。我尝试使用base64,但当我在服务器中发布它时,它会增加图像大小

请在下面找到我的代码,并建议我如何将文件保存到服务器

  //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;

 // I am getting URI path like below and need to save this file in server

   model.ImageBase64 =  C:\Program Files (x86)\IIS Express\services5.jpg

        byte[] data =Convert.FromBase64String(model.ImageBase64);
        req.ContentLength = data.Length;
        Stream stream = req.GetRequestStream();
        stream.Write(data, 0, data.Length);
        stream.Close();
    }
}
}

 // I am getting URL from this Cordova Camera API and I am posting to WEBAPI

function onSuccessEdituserProfileGallery(imageData) {
console.log(imageData);
var smallImage
smallImage = document.getElementById('EdituserProfileImage');

smallImage.src = imageData;
customerImgData =smallImage.src;
return customerImgData;    
}
通常我会这样做:

后端:

        [HttpPost]
        [Route("Upload/Image")]
        public async Task<IHttpActionResult> UploadImg()
        {
            try
            {
                #region VAR

                if (!Directory.Exists(HttpContext.Current.Server.MapPath(string.Concat("~", Constant.Application.User_Cropped_Image_Directory)))) ;
                Directory.CreateDirectory(HttpContext.Current.Server.MapPath(string.Concat("~", Constant.Application.User_Cropped_Image_Directory)));

                string mapPath = HttpContext.Current.Server.MapPath(string.Concat("~", Constant.Application.User_Cropped_Image_Directory));

                HttpRequestMessage request = this.Request;
                String fileName = "";

                #endregion VAR

                #region SPLIT

                // Get base64 string from POST
                var base64String = request.Content.ReadAsStringAsync().Result;
                // SPLIT Content from unecessary data
                var split = base64String.Split(',');
                var strings = split[1].Split('-');

                #endregion SPLIT

                // Convert Base64 String to byte[]
                byte[] imageBytes = Convert.FromBase64String(strings[0]);
                MemoryStream ms = new MemoryStream(imageBytes, 0, imageBytes.Length);

                // Convert byte[] to Image
                ms.Write(imageBytes, 0, imageBytes.Length);
                Image image = Image.FromStream(ms, true);
                if (!Directory.Exists(String.Concat(mapPath, fileName).ToLowerInvariant()))
                    Directory.CreateDirectory(String.Concat(mapPath, fileName).ToLowerInvariant());

                fileName = GenericUtils.GetFileNameWithExt(image).ToLowerInvariant();

                //name = String.Concat("croppedImage_", fileName);
                image.Save(String.Concat(mapPath, fileName).ToLowerInvariant());



                return Ok(new { data = String.Concat(Constant.Application.User_Cropped_Image_Directory, fileName).ToLowerInvariant() } );
            }
            catch (Exception ex)
            {
                _logger.LogException(ex);
                return null;
            }
        }
通常我会这样做:

后端:

        [HttpPost]
        [Route("Upload/Image")]
        public async Task<IHttpActionResult> UploadImg()
        {
            try
            {
                #region VAR

                if (!Directory.Exists(HttpContext.Current.Server.MapPath(string.Concat("~", Constant.Application.User_Cropped_Image_Directory)))) ;
                Directory.CreateDirectory(HttpContext.Current.Server.MapPath(string.Concat("~", Constant.Application.User_Cropped_Image_Directory)));

                string mapPath = HttpContext.Current.Server.MapPath(string.Concat("~", Constant.Application.User_Cropped_Image_Directory));

                HttpRequestMessage request = this.Request;
                String fileName = "";

                #endregion VAR

                #region SPLIT

                // Get base64 string from POST
                var base64String = request.Content.ReadAsStringAsync().Result;
                // SPLIT Content from unecessary data
                var split = base64String.Split(',');
                var strings = split[1].Split('-');

                #endregion SPLIT

                // Convert Base64 String to byte[]
                byte[] imageBytes = Convert.FromBase64String(strings[0]);
                MemoryStream ms = new MemoryStream(imageBytes, 0, imageBytes.Length);

                // Convert byte[] to Image
                ms.Write(imageBytes, 0, imageBytes.Length);
                Image image = Image.FromStream(ms, true);
                if (!Directory.Exists(String.Concat(mapPath, fileName).ToLowerInvariant()))
                    Directory.CreateDirectory(String.Concat(mapPath, fileName).ToLowerInvariant());

                fileName = GenericUtils.GetFileNameWithExt(image).ToLowerInvariant();

                //name = String.Concat("croppedImage_", fileName);
                image.Save(String.Concat(mapPath, fileName).ToLowerInvariant());



                return Ok(new { data = String.Concat(Constant.Application.User_Cropped_Image_Directory, fileName).ToLowerInvariant() } );
            }
            catch (Exception ex)
            {
                _logger.LogException(ex);
                return null;
            }
        }

谢谢费德里科。您的代码和我使用的代码几乎相同。问题是,当我转换到base64(保存在服务器中的文件)时,文件大小会增加到原始文件大小的近10倍。你面对的是同一件事吗。您的代码和我使用的代码几乎相同。问题是,当我转换到base64(保存在服务器中的文件)时,文件大小会增加到原始文件大小的近10倍。你也面对同样的事情吗