想将图片存储到阿里云上,尝试着了解了下阿里云的OSS。
文档地址:https://help.aliyun.com/?spm=5176.doc31837.201511181.1.TePvVX
.net 版本SDK 的github地址:https://github.com/aliyun/aliyun-oss-csharp-sdk?spm=5176.doc32085.2.4.kSjabk
贴个OSS开通的region 和endpoint 的图,地址:https://help.aliyun.com/document_detail/31837.html?spm=5176.2020520105.147.4.VZf3rn
我这属于华东,最开始是用hangzhou那个endpoint尝试获取上传文件 ,发现报错了,原来是我创建的bucket 选择了华东2,所以要用shanghai那个
OssClient client1 = new OssClient(endpoint2, accessKeyId, accessKeySecret);
#region OSS文件操作 /// <summary> /// 文件上传 /// </summary> /// <param name="filename">文件的本地路径</param> /// <param name="keyname">存入OSS上的名字,后续用来获取图片地址用</param> /// <returns></returns> public PutObjectResult UploadFileToOSS(string filename, string keyname) { try { var reslut = client.PutObject(bucketname, keyname, filename); return reslut; } catch (Exception) { //MessageBox.Show("图片上传失败,文件名:"+filename+",keyname:"+keyname); throw new Exception("图片上传失败,文件名:" + filename + ",keyname:" + keyname); } } /// <summary> /// 获取图片uri /// </summary> /// <param name="keyname">上传图片的keyname</param> /// <param name="process">需要对图片进行的操作,可空,eg:process = "image/resize,m_fixed,w_100,h_100"</param> /// <returns></returns> public string GetImgPath(string keyname, string process = null) { try { var req = new GeneratePresignedUriRequest(bucketname, key, SignHttpMethod.Get); if (!string.IsNullOrWhiteSpace(process)) { req.Process = process; req.Expiration = DateTime.Now.AddSeconds(30 * 60); } // 产生带有签名的URI var uri = client.GeneratePresignedUri(req); return uri.ToString(); } catch (Exception) { throw new Exception("图片获取失败,key:"+keyname); } } #endregion
其中 endpoint:就是上面访问文件的域名(可以试上面贴图中默认的也可以是自定义的)
key:是你上传文件后,访问该文件的名字。
由于我们的web段用的是.NET CORE 就研究了下JS 在浏览器段的上传,发现一定要进行签名才能上传成功,我不知道是不是哪里设置的不对,不过反正生产环境当中肯定得用签名的,所以就没去深究了。
浏览器端的上传我测试了两种,直接表单submit,还有就是ajax,都成功了,官方还给出了个使用插件上传的,那个方便就用哪个
贴个小demo,有winform的也有JS 浏览器上传文件的:https://github.com/huanglin101/ALiYunOSSDemo.git