• C# WebAPi接收和发送图片


    先上一个准备代码:image和字节数组相互转换:

    //字节数组转image
    //pic是字节数组
    System.IO.MemoryStream ms = new System.IO.MemoryStream(pic);
    System.Drawing.Image image = System.Drawing.Image.FromStream(ms);
    
    //image转字节数组
    MemoryStream newms = new MemoryStream();
    image.Save(newms, System.Drawing.Imaging.ImageFormat.Jpeg);
    byte[] BPicture = new byte[newms.Length];
    BPicture = newms.GetBuffer();

    现在介入正题,我们这个字节数组哪里来的呢?要么是从服务器的文件系统中拉的,要么是从数据库里拉的,这边不介绍前者,介绍一下后者。我使用的数据库是Oracle,这边 PAT_PIC字段是Oracle的blob类型,

    先写get方法:


    public
    string GetPatientPicByHemoId(string hemoId) { string result = string.Empty; PatientModel.MED_PATIENTS_PICDataTable dtPic = _patientService.GetPatientPicByHemoId(hemoId); if (dtPic != null && dtPic.Rows.Count > 0) { byte[] pic = dtPic[0].PAT_PIC; result = Convert.ToBase64String(pic); } eturn result.Length > 0 ? Utility.StringToJsonBySuccess(result, true) : Utility.StringToJsonBySuccess(result, false); }

    然后写下save方法:

         [HttpPost]
            [Route("Api/MedPatient/UploadInternalPhoto")]
            public async Task<string> UploadInternalPhoto()
            {
                int result = 0;
                string message = string.Empty;
                bool success = false;
    
                try
                {
                    Logger.Info("开始调用UploadPatientPhoto...");
                    string filePath = "~\UploadFiles\Photo";
                    string dir = HttpContext.Current.Server.MapPath(filePath);
                    if (!Directory.Exists(dir))
                        Directory.CreateDirectory(dir);
                    if (!Request.Content.IsMimeMultipartContent("form-data"))
                    {
                        throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
                    }
    
                    string fileFullName = string.Empty;
                    var provider = new CustomMultipartFormDataStreamProvider(dir);
                    await Request.Content.ReadAsMultipartAsync(provider);
                    string hemoId = provider.FormData.Get("hemoId");
                    MultipartFileData file = provider.FileData.FirstOrDefault();
                    if (file != null) { fileFullName = dir + file.LocalFileName.Substring(file.LocalFileName.LastIndexOf("\")); }
    
                    var imageCodecInfoList = ImageCodecInfo.GetImageEncoders();
                    string mimeType = "image/jpeg";
                    ImageCodecInfo myImageCodec = null;
                    foreach (var imgCodec in imageCodecInfoList)
                    {
                        if (imgCodec.MimeType == mimeType)
                        {
                            myImageCodec = imgCodec;
                            break;
                        }
                    }
    
                    if (myImageCodec == null)
                        return null;
    
                    EncoderParameters encoderParams = new EncoderParameters(1);
                    System.Drawing.Imaging.Encoder myCompressQuanlityEncoder = System.Drawing.Imaging.Encoder.Quality;
                    EncoderParameter myCompressQualityParam = new EncoderParameter(myCompressQuanlityEncoder, 80L);
                    encoderParams.Param[0] = myCompressQualityParam;
                    byte[] tempImage;
    
                    using (Bitmap bmpPic = new Bitmap(fileFullName))
                    {
                        using (MemoryStream msPicture = new MemoryStream())
                        {
                            bmpPic.Save(msPicture, myImageCodec, encoderParams);
                            tempImage = msPicture.ToArray();
                        }
                    }
    
                    InternalModel.MED_INTERNAL_PICDataTable pic = _internal.GetInternalPic(hemoId);
                    if (pic != null && pic.Rows.Count > 0)
                    {
                        pic[0].PAT_PIC = tempImage;
                    }
                    else
                    {
                        var row = pic.NewMED_INTERNAL_PICRow();
                        row.HEMOID = hemoId;
                        row.PAT_PIC = tempImage;
                        pic.AddMED_INTERNAL_PICRow(row);
                    }
                    result = _internal.SaveInternalPic(pic);
                    
    
                    success = true;
                }
                catch (Exception ex)
                {
                    message = ex.Message;
                    Logger.Error("上传患者照片失败", ex);
                }
    
                return Utility.StringToJsonBySuccess(message, success);
            }

    以下是StringToJsonBySuccess方法

     

    /// <summary>
    /// 字符串转换成Json带是否成功标记
    /// </summary>
    /// <param name="result"></param>
    /// <param name="success"></param>
    /// <returns></returns>

         

         public
    static string StringToJsonBySuccess(string result, bool success) { if (success) { result = "{"SUCCESS":"TRUE","DATA":"" + result + ""}"; } else { result = "{"SUCCESS":"FALSE"}"; } return result; }

    好了!明天国庆节提前回家喽~

  • 相关阅读:
    求树的重心
    牛客多校第七场B题
    高精度
    hdu 6763 Total Eclipse 并查集+思维
    substr用法
    置换群
    快速幂
    Winform+Mysql登录
    Rider C#连接MySQL
    C# winform组件
  • 原文地址:https://www.cnblogs.com/jyj666/p/15351987.html
Copyright © 2020-2023  润新知