本文告诉大家如何在 UWP 中使用 sm.ms 图床服务上传图片,获取图片外链

和之前不一样的是,现在的 sm.ms 网站是需要注册才能获取对应的 Api Key 进行上传图片

注册账号

打开 https://sm.ms/ 点击右上角的注册按钮,注册步骤我就省略了

注册之后有免费的 5G 的空间,理论上用来做私人的图床也是足够的

打开 https://sm.ms/home/apitoken 可以生成对应的 Secret Token 请看下图

将这串 Api Key 保存到本地记事本上,接下来将会用到

安装库

虽然 sm.ms 上有文档说如何上传,但是我依然写了一个库,通过这个库可以让大家使用起来更加方便

通过 NuGet 安装 smms

这个库的源代码是开源的,全部源代码可以在github下载

使用库上传图片

因为我不想要在我的库里面引用 json 库,所以我的库的返回值就是字符串,解析方法请小伙伴自行用 json 或正则进行解析

这个库的初始化要求传入刚才保存的 Api Key 也就是每个小伙伴注册的都不一样

            var smms = new Smms("Api Key");

调用 UploadImage 传入 stream 就可以完成上传了,但是在 UWP 里面获取文件是用 StorageFile 的方式,需要通过 StorageFile 的扩展方法打开文件

var str = await smms.UploadImage(await File.OpenStreamForReadAsync(), File.Name);

上面代码的 File 是一个属性,定义请看代码

private StorageFile File { get; }

而 OpenStreamForReadAsync 是一个扩展方法,复制粘贴上面代码到 VisualStudio 里面就可以自动添加引用

调用 UploadImage 返回值是一个字符串,可以通过 Json 库转换为实际的类

        public class SmmsInfo
        {
            /// <summary>
            /// 
            /// </summary>
            [JsonProperty("success")]
            public bool Success { get;set; }
            /// <summary>
            /// 
            /// </summary>
            [JsonProperty("code")]
            public string Code { get;set; }
            /// <summary>
            /// 
            /// </summary>
            [JsonProperty("message")]
            public string Message { get;set; }
            /// <summary>
            /// 
            /// </summary>
            [JsonProperty("data")]
            public Data Data { get;set; }
            /// <summary>
            /// 
            /// </summary>
            [JsonProperty("RequestId")]
            public string RequestId { get;set; }

        }

        public class Data
        {
            /// <summary>
            /// 
            /// </summary>
            [JsonProperty("file_id")]
            public int FileId { get;set; }
            /// <summary>
            /// 
            /// </summary>
            [JsonProperty("width")]
            public int Width { get;set; }
            /// <summary>
            /// 
            /// </summary>
            [JsonProperty("height")]
            public int Height { get;set; }
            /// <summary>
            /// 
            /// </summary>
            [JsonProperty("filename")]
            public string Filename { get;set; }
            /// <summary>
            /// 
            /// </summary>
            [JsonProperty("storename")]
            public string StoreName { get;set; }
            /// <summary>
            /// 
            /// </summary>
            [JsonProperty("size")]
            public int Size { get;set; }
            /// <summary>
            /// 
            /// </summary>
            [JsonProperty("path")]
            public string Path { get;set; }
            /// <summary>
            /// 
            /// </summary>
            [JsonProperty("hash")]
            public string Hash { get;set; }
            /// <summary>
            /// 
            /// </summary>
            [JsonProperty("url")]
            public string Url { get;set; }
            /// <summary>
            /// 
            /// </summary>
            [JsonProperty("delete")]
            public string Delete { get;set; }
            /// <summary>
            /// 
            /// </summary>
            [JsonProperty("page")]
            public string Page { get;set; }
        }

在安装完成了json解析库可以使用下面方法转换

  var smmsInfo = JsonConvert.DeserializeObject<SmmsInfo>(str);

在使用这个库的时候需要注意处理网络异常等


本文会经常更新,请阅读原文: https://dotnet-campus.github.io//post/win10-uwp-smms%E5%9B%BE%E5%BA%8A.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

知识共享许可协议 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名 lindexi (包含链接: https://dotnet-campus.github.io/ ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系