本文告诉大家如何在 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/ ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系 。