WinForm上传图片到SM.MS图床

在写winform的时候发现pictureBox加载网络图片好慢,一开始以为是我买的服务器带宽低的原因,写完这个之后发现是图片大小原因,并且服务器传出的比sm.ms还要快一点点。10k左右的图片大概不会有闪烁,100k以上就会有延迟显示的问题了。

SM.MS图床

sm.ms图床是一个免费的图片服务器,免费申请账号即可拥有5G的空间,其他的就不介绍了,官网链接:https://sm.ms/

1.首先注册一个账号,并登录。

2.进入SM.MS的管理界面:https://sm.ms/home,找到token

image-20220113105854923

代码部分

1.SM.MS的api文档https://doc.sm.ms/

新建两个类用于接收返回值

 public class SmMsResponseDto
    {
        public bool Success { get; set; }
        public string Code { get; set; }
        public string Message { get; set; }
        public SmMsResponseData Data { get; set; }
        public string RequestId { get; set; }
    }

 public class SmMsResponseData
    {
        public string FileName { get; set; }
        public string StoreName { get; set; }
        /// <summary>
        /// 文件路径
        /// </summary>
        public string Path { get; set; }
        /// <summary>
        /// 删除图片用的hash值
        /// </summary>
        public string Hash { get; set; }
        /// <summary>
        /// 图片地址
        /// </summary>
        public string Url { get; set; }
        /// <summary>
        /// 删除图片的url
        /// </summary>
        public string Delete { get; set; }
        public string Page { get; set; }
    }

2.winform代码,放一个button和一个openFileDialog、一个pictureBox

 public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        public string SMMSServerUrl = "https://sm.ms/api/v2/upload";
        HttpClient client = new HttpClient();
        private async void button1_Click(object sender, EventArgs e)
        {
            DialogResult dialogResult = openFilePic.ShowDialog();
            if (dialogResult == DialogResult.OK)
            {
                // 获得文件名(包括名字后后缀)
                string fileName = openFilePic.SafeFileName;
                using (Stream stream = openFilePic.OpenFile())
                {
                    #region 读取流到字节数组
                    byte[] bytes = new byte[stream.Length];
                    stream.Position = 0;
                    stream.Read(bytes, 0, (int)stream.Length);
                    stream.Close();
                    #endregion

                    // 设置token
                    client.DefaultRequestHeaders.Add("Authorization", "放自己的token");
                    MultipartFormDataContent multipartFormDataContent = new MultipartFormDataContent();
                    multipartFormDataContent.Add(new ByteArrayContent(bytes), "\"smfile\"", $"\"{fileName}\"");

                    var response =
                        await client.PostAsync(SMMSServerUrl, multipartFormDataContent);
                    var resultStr = await response.Content.ReadAsStringAsync();
                    textBox1.AppendText(resultStr);

                    var smMsResponse = JsonConvert.DeserializeObject<SmMsResponseDto>(resultStr);
                    pictureBox1.ImageLocation = smMsResponse.Data.Url;
                }
            }
        }
    }

最终效果:

client.DefaultRequestHeaders.Add(“Authorization”, “放自己的token”);当前只是示例代码,正常这句不应该放在方法里面,因为不能重复添加,所以当前上传按钮只能成功一次,需要重新启动项目才能再次上传,所以需要自己根据业务修改代码。

uploadTosm.ms

其他的删除,查询上传历史等操作根据API文档去实现就好了

注意:使用httpClient最好使用单例,并且提前预热,不然就会很慢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不想只会CRUD的猿某人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值