**
先在服务端通过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失败。");
}
})
}