**
先在服务端通过AK、SK获取上传下载临时URL,返回到前端进行上传
需要安装.net SDK
https://support.huaweicloud.com/sdk-dotnet-devg-obs/obs_25_0001.html
**

/// <summary>
/// 获取上传对象临时URL
/// </summary>
public static CreateTemporarySignatureResponse GetPutObjSignUrl(string fileName)
{
     ObsConfig config = new ObsConfig();
     config.Endpoint = Config.Endpoint;//桶Endpoint
     // 创建ObsClient实例 
     ObsClient obsClient = new ObsClient(Config.AccessKeyId, Config.SecretAccessKey, config);
     // 替换您的过期时间,单位是秒
     long exipreSeconds = long.Parse(Config.exipreSeconds);

     CreateTemporarySignatureRequest request = new CreateTemporarySignatureRequest();
     request.Method = HttpVerb.PUT;
     request.Expires = exipreSeconds;
     request.BucketName = Config.BucketName;
     request.ObjectKey = fileName;
     request.Headers.Add("content-type", "application/octet-stream");

     CreateTemporarySignatureResponse response = obsClient.CreateTemporarySignature(request);

     return response;
}

/// <summary>
/// 获取下载对象临时URL
/// </summary>
/// <param name="fileName">文件名</param>
/// <param name="VersionId">版本号  为空默认最新版</param>
/// <returns></returns>
public static CreateTemporarySignatureResponse GetDownObjSignUrl(string fileName,string VersionId = null)
{
     ObsConfig config = new ObsConfig();
     config.Endpoint = Config.CRMApiUrl;
     // 创建ObsClient实例
     ObsClient obsClient = new ObsClient(Config.AccessKeyId, Config.SecretAccessKey, config);
     // 替换您的过期时间,单位是秒
     long exipreSeconds = long.Parse(Config.exipreSeconds);

     CreateTemporarySignatureRequest request = new CreateTemporarySignatureRequest();
     request.Method = HttpVerb.GET;
     request.Expires = exipreSeconds;
     request.BucketName = Config.BucketName;
     request.ObjectKey = fileName;
     if (!string.IsNullOrEmpty(VersionId))
     {
          request.Parameters.Add("versionId", VersionId);
     }

     CreateTemporarySignatureResponse response = obsClient.CreateTemporarySignature(request);

     return response;
}

**
客户端通过服务端返回的临时URL访问OBS进行上传下载
引入axios.js
**

//上传文件
function uploadFile(){
	var files = document.getElementById('inputfile').files[0]//获取文件流

    utility.httpGet("/api/FileUpload/GetPutObjSignUrl?fileName=" + files.name)
        .done(function (obj) {
             var reopt = {
                 method: "put",
                 url: obj.SignUrl,
                 withCredentials: false,
                 headers: obj.ActualSignedRequestHeaders,
                 validateStatus: function (status) {
                      return status >= 200;
                 },
                 maxRedirects: 0,
                 responseType: 'text',
                 data: files,
            };

	axios.request(reopt).then(function (response) {
         if (response.status < 300) {
             console.log("上传成功,文件名:" + files.name + ",版本号:" + response.headers["x-obs-version-id"]);
         } else {
             console.log(response);
         }
    }).catch(function (err) {
         console.log(err);
    });
   })
}

//下载文件
function DownLoadFile(fileName,VersionID){
	utility.httpGet("/api/FileUpload/GetDownObjSignUrl?fileName="+fileName+"&VersionId="+VersionID)
       .done(function (obj) {
           if (obj) {
               var reopt = {
                   method: "get",
                   url: obj.SignUrl,
                   withCredentials: false,
                   headers: obj.ActualSignedRequestHeaders,
                   validateStatus: function (status) {
                       return status >= 200;
                   },
                   maxRedirects: 0,
                   responseType: 'blob',
              };

              axios.request(reopt).then(res => {
                  const blob = new Blob([res.data], { type: 'text/plain;charset=UTF-8' });
                  const filename = DisplayName;
                  // IE
                  if (window.navigator && window.navigator.msSaveOrOpenBlob) {
                      window.navigator.msSaveOrOpenBlob(blob, filename)
                  } else {
                      let href = window.URL.createObjectURL(blob);
                      f.simulateDownloadByA(href, filename);
                  }
            })
         }
         else {
             console.log("获取临时URL失败。");
         }
    })
}
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐