obsService.ts
2.75 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
import request from "@/utils/request";
export const parseAndDecodeUrl = (url:string) => {
// 创建一个 URL 对象来解析传入的 URL 字符串
const parsedUrl = new URL(url);
// 获取 pathname (路径) 和 search (查询字符串, 如果有的话)
// hash (锚点, 如果有的话) 也可以根据需要添加
let { pathname, search = '', hash = '' } = parsedUrl;
// 去掉路径最前面的斜杠
pathname = pathname.startsWith('/') ? pathname.slice(1) : pathname;
// 将路径、查询字符串和锚点部分进行解码
pathname = decodeURIComponent(pathname);
search = decodeURIComponent(search);
hash = decodeURIComponent(hash);
// 提取最后一个斜杠后面的内容(文件名或资源标识符)
const lastSlashIndex = pathname.lastIndexOf('/');
const lastPart = lastSlashIndex !== -1 ? pathname.substring(lastSlashIndex + 1) : pathname;
// 返回去掉主机信息和开头斜杠后的解码部分以及最后一个斜杠后面的内容
return {
fileName: pathname,
decodedPath: pathname + search + hash,
lastPart: lastPart
};
}
//获取下载签名
export const getDownFileSignByUrl = (fileName) => {
return request({
url: `${
import.meta.env.VITE_APP_COMMON_URL
}/obs/generate-download-file-signature?fileName=${fileName}`,
method: "get",
});
};
//obs下载
export const obsDownloadRequest = (params) => {
return request({
withCredentials: false,
headers: params.actualSignedRequestHeaders
? {
"Content-Type": params.actualSignedRequestHeaders["Content-Type"],
}
: {},
validateStatus: function (status) {
return status >= 200;
},
url: params.signedUrl,
responseType: "blob",
maxRedirects: 0,
data: { unused: 0 },
method: "get",
});
};
//获取上传签名
export const getUpFileSignByUrl = (params) => {
return request({
url: `${
import.meta.env.VITE_APP_COMMON_URL
}/obs/generate-file-signature?fileName=${params.fileName}`,
method: "get",
});
};
export function getPathUrl(url:string) {
// 查找问号的位置
var questionMarkIndex = url.indexOf('?');
// 如果存在问号,则返回问号之前的部分;如果不存在,则返回原url
return questionMarkIndex !== -1 ? url.substring(0, questionMarkIndex) : url;
}
//obs上传
export const obsUploadRequest = (params) => {
return request({
url: params.signedUrl,
withCredentials: false,
headers: params.actualSignedRequestHeaders ? {
"Content-Type": params.actualSignedRequestHeaders[
"Content-Type"
]
} : {},
validateStatus: function (status) {
return status >= 200;
},
maxRedirects: 0,
// responseType: 'text',
data: params.file,
method: 'obsUploadRequest'
});
};