C#웹api 파일 흐름stream 두 가지 업로드 방식
7348 단어 asp.net 학습 기록C#
2. base64 이미지 업로드
2.1 클라이언트
///
///
///
///
///
///
///
///
public static string SaveLearningImage(int pic_width, int pic_height, string bitMapData, string url, int saveType = 1)
{
var requstData = new
{
pic_width = pic_width,
pic_height = pic_height,
bitMapData = bitMapData,
saveType = saveType
};
return HttpPostRequst(url, JsonConvert.SerializeObject(requstData), "");
}
2.2 웹api(전체 코드 첨부)
[FromBody]
///
///
///
public class ImageSaveController : ApiController
{
///
///
///
//public class SaveImage
//{
private object _lock = new object();
///
///
///
///
///
///
[HttpPost]
//public string SaveLearningImage(int pic_width, int pic_height, dynamic string bitMapData, int saveType = 4)
public string SaveLearningImage([FromBody] Object bit)
{
lock (_lock)
{
//JavaScriptSerializer jss = new JavaScriptSerializer();
//string myJson = jss.Serialize(bitMapData);
//return myJson;
string jsonstr = JsonConvert.SerializeObject(bit);
Data res = JsonConvert.DeserializeObject(jsonstr);
//Data res = new Data
//{
// BitMapData = ((Newtonsoft.Json.Linq.JContainer)(bit)).First
//};
return SavePhoto(res.pic_width, res.pic_height, res.BitMapData, res.saveType);
}
}
private class Data {
public string BitMapData { get; set; }
public int pic_width { get; set; }
public int pic_height { get; set; }
public int saveType { get; set; }
}
private string SavePhoto(int pic_width, int pic_height, string bitMapData, int saveType)
{
byte[] bitmap_data = Convert.FromBase64String(bitMapData);
int PhotoD = 170;
Stream stream = new MemoryStream(bitmap_data);
var m_pic = new Bitmap(stream);
string Year = System.DateTime.Now.Year.ToString();
string Month = System.DateTime.Now.Month.ToString();
string Day = System.DateTime.Now.Day.ToString();
string Hour = System.DateTime.Now.Hour.ToString();
string ConfigPath = "", filePath = "";
switch (saveType)
{
case 4:
{
ConfigPath = ConfigurationManager.AppSettings["LearPicPath"];
filePath = "/imagepath/onlinephoto/";
break;
}
case 1:
{
ConfigPath = ConfigurationManager.AppSettings["LearPicPath_Theory"];
filePath = "/";
break;
}
}
filePath += Year + "/" + Month + "/" + Day + "/" + Hour + "/";
// ,
DirectoryInfo upDir = new DirectoryInfo(ConfigPath + filePath);
if (!upDir.Exists)
{
upDir.Create();
}
//
DateTime date = DateTime.Now;
string fileName = Guid.NewGuid().ToString() + ".jpg";
int towidth = pic_width;
int toheight = pic_height;
//towidth = PhotoD;
//toheight = PhotoD;
int width = pic_width;
int height = pic_height;
int x = 0;
int y = 0;
int ow = m_pic.Width;
int oh = m_pic.Height;
switch (ThumbnailMode.Cut)
{
case ThumbnailMode.HW:// ( )
break;
case ThumbnailMode.W:// ,
toheight = m_pic.Height * width / m_pic.Width;
break;
case ThumbnailMode.H:// ,
towidth = m_pic.Width * height / m_pic.Height;
break;
case ThumbnailMode.Cut:// ( )
if ((double)m_pic.Width / (double)m_pic.Height > (double)towidth / (double)toheight)
{
oh = m_pic.Height;
ow = m_pic.Height * towidth / toheight;
y = 0;
x = (m_pic.Width - ow) / 2;
}
else
{
ow = m_pic.Width;
oh = m_pic.Width * height / towidth;
x = 0;
y = (m_pic.Height - oh) / 2;
}
break;
default:
break;
}
// bmp
System.Drawing.Image bitmap = new System.Drawing.Bitmap(towidth, toheight);
//
Graphics g = System.Drawing.Graphics.FromImage(bitmap);
//
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
// ,
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
//
g.Clear(Color.Transparent);
//
g.DrawImage(m_pic, new Rectangle(0, 0, towidth, toheight),
new Rectangle(x, y, ow, oh),
GraphicsUnit.Pixel);
string fullPath = ConfigPath + filePath + fileName;
try
{
// jpg
bitmap.Save(fullPath, System.Drawing.Imaging.ImageFormat.Jpeg);
}
catch (System.Exception e)
{
throw e;
}
finally
{
m_pic.Dispose();
bitmap.Dispose();
g.Dispose();
}
return filePath + fileName;
}
///
///
///
public enum ThumbnailMode
{
///
/// ( )。
///
HW,
///
/// , 。
///
W,
///
/// , 。
///
H,
///
/// ( )。
///
Cut
}
}
그림을 업로드하는 것이 비교적 간단하고base64는 그림에 있어서 전단이든 후단이든 비교적 편리하다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Rider (추가 : Visual Studio for Mac도)에서는 C#으로 작성된 Unity 표준 클래스를 직접 볼 수있는 이야기여러분은 Unity 코드를 어떤 편집기를 사용하여 작성합니까? Visual Studio (for Mac 포함) Visual Studio Code 다양한 옵션이 있다고 생각하지만 Rider를 사용하고 있습니다. 최근 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.