OSSService.js 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311
  1. import OSS from "ali-oss";
  2. // import { ElMessage } from 'element-plus'
  3. import request from "../../common/request";
  4. import { PUBLIC_MODULES_PATH as prefix } from "@/api/AppPath";
  5. export default class OSSSerive {
  6. disposeXmlFile(data) {
  7. return request({
  8. url: prefix + "/oss/file/disposeXmlFile",
  9. method: "post",
  10. data: data,
  11. });
  12. }
  13. downLoadFileDisposeXmlFile(url) {
  14. return request({
  15. url: prefix + "/oss/file/downLoadFileDisposeXmlFile",
  16. method: "post",
  17. params: { file: url },
  18. });
  19. }
  20. queryById(id) {
  21. return request({
  22. url: prefix + "/oss/file/queryById",
  23. method: "get",
  24. params: { id: id },
  25. });
  26. }
  27. saveMsg(param) {
  28. return request({
  29. url: prefix + "/oss/file/saveMsg",
  30. method: "post",
  31. data: param,
  32. });
  33. }
  34. findFileList(attachmentId) {
  35. return request({
  36. url: prefix + "/oss/file/findFileList",
  37. method: "get",
  38. params: { attachmentId: attachmentId },
  39. });
  40. }
  41. getTemporaryUrl(url) {
  42. return request({
  43. url: prefix + "/oss/file/getTemporaryUrl",
  44. method: "get",
  45. params: { url: url },
  46. });
  47. }
  48. getFileSizeByUrl(url) {
  49. return request({
  50. url: prefix + "/oss/file/getFileSizeByUrl",
  51. method: "get",
  52. params: { url: url },
  53. });
  54. }
  55. deleteMsgById(id) {
  56. return request({
  57. url: prefix + "/oss/file/deleteMsgById",
  58. method: "get",
  59. params: { id: id },
  60. });
  61. }
  62. downLoadAttach(url) {
  63. return request({
  64. url: prefix + "/oss/file/downLoadAttach",
  65. method: "get",
  66. responseType: "blob",
  67. params: { file: url },
  68. });
  69. }
  70. }
  71. export const client = new OSS({
  72. // region: 'oss-cn-hangzhou', // oss地址
  73. // accessKeyId: 'LTAI5tQDWoM9c1WyJNPs86rX', // 通过阿里云控制台创建的AccessKey ID。
  74. // accessKeySecret: '84dDIx4edT1n78KUOqqSmDZ35pchJv', // 通过阿里云控制台创建的AccessKey Secret。
  75. // bucket: 'xgxm-test', // 仓库名字
  76. region: "oss-cn-hangzhou", // oss地址
  77. accessKeyId: "LTAI5tKa6kzGr5EyPWJB4EcD", // 通过阿里云控制台创建的AccessKey ID。
  78. accessKeySecret: "arHxB7ZPhizrBYf4844TtyaRctPMgW", // 通过阿里云控制台创建的AccessKey Secret。
  79. bucket: "xg-ccpm", // 仓库名字
  80. // bucket: 'xg-pg', // 仓库名字
  81. useFetch: true, // 支持上传大于100KB的文件
  82. secure: false, // 返回的url为https
  83. });
  84. export const headers = {
  85. // 指定该Object被下载时网页的缓存行为。
  86. "Cache-Control": "no-cache",
  87. // 指定该Object被下载时的名称。
  88. "Content-Disposition": "inline",
  89. // 指定该Object被下载时的内容编码格式。
  90. "Content-Encoding": "UTF-8",
  91. // 指定过期时间。
  92. Expires: "Wed, 08 Jul 2023 16:57:01 GMT",
  93. // 指定Object的存储类型。
  94. "x-oss-storage-class": "Standard",
  95. // 指定Object的访问权限。
  96. // 'x-oss-object-acl': 'private',
  97. // 设置Object的标签,可同时设置多个标签。
  98. "x-oss-tagging": "Tag1=1&Tag2=2",
  99. // 指定CopyObject操作时是否覆盖同名目标Object。此处设置为true,表示禁止覆盖同名Object。
  100. "x-oss-forbid-overwrite": "true",
  101. // 'secure': 'true'
  102. };
  103. export function onChange(file, files) {
  104. // console.log(file, 'file', files, 'Filest')
  105. return files;
  106. }
  107. // eslint-disable-next-line no-unused-vars
  108. export function handleUploadSuccess(response, file, fileS) {
  109. // console.log(response, file, fileS, 'response, file, fileList')
  110. }
  111. export function handleRemove(e, files) {
  112. return files;
  113. }
  114. export function fileName(file) {
  115. // console.log('文件名称处理')
  116. const tmpcnt = file.file.name.lastIndexOf(".");
  117. let fileName = file.file.name.substring(0, tmpcnt);
  118. // 将单引号‘’都转换成',将双引号“”都转换成"
  119. fileName = fileName.replace(/’|‘/g, "'").replace(/“|”/g, "");
  120. // 将中括号【】转换成[],将大括号{}转换成{}
  121. fileName = fileName
  122. .replace(/【/g, "(")
  123. .replace(/】/g, ")")
  124. .replace(/{/g, "(")
  125. .replace(/}/g, ")");
  126. fileName = fileName
  127. .replace(/\[/g, "(")
  128. .replace(/]/g, ")")
  129. .replace(/{/g, "(")
  130. .replace(/}/g, ")");
  131. // 将逗号,转换成,,将:转换成:
  132. fileName = fileName.replace(/,/g, ",").replace(/:/g, ":");
  133. // 将中文——转换为英文-
  134. fileName = fileName.replace(/—/g, "-");
  135. fileName = fileName.replace(/……/g, "");
  136. fileName = fileName.replace(/±/g, "");
  137. fileName = fileName.replace(/#/g, "");
  138. fileName = fileName.replace(/%/g, "");
  139. fileName = fileName.replace(/Π/g, "");
  140. fileName = fileName.replace(/π/g, "");
  141. fileName = fileName.replace(/·/g, ".");
  142. // console.log('文件名处理结果', fileName)
  143. return fileName;
  144. }
  145. export function beforeAvatarUpload(file, fileList, maxValue) {
  146. // 文件大小校验
  147. const isLt2M = file.size / 1024 / 1024 < maxValue;
  148. if (!isLt2M) {
  149. fileList.splice(fileList.length - 1, 1);
  150. // console.log('文件大小不能超过 ' + maxValue + ' MB!')
  151. }
  152. return isLt2M;
  153. }
  154. // export function exnameFix (file, isShow, names) {
  155. // // console.log('格式校验')
  156. // const tmpcnt = file.name.lastIndexOf('.')
  157. // const exname = file.name.substring(tmpcnt + 1) // 获取后缀名
  158. // if (names.indexOf(exname) < 0) {
  159. // if (isShow === '1') {
  160. // ElMessage({
  161. // message: '不支持的格式!',
  162. // type: 'error',
  163. // })
  164. // }
  165. // return false
  166. // }
  167. // return true
  168. // }
  169. export async function httpRequest(file, name, type, maxValue) {
  170. // 阿里云OSS上传
  171. if (!beforeAvatarUpload(file.file, [], maxValue)) {
  172. return;
  173. }
  174. // console.log('开始上传')
  175. // 判断扩展名
  176. const tmpcnt = file.file.name.lastIndexOf("."); // 获取.的下标
  177. const exname = file.file.name.substring(tmpcnt + 1); // 获取后缀名
  178. // console.log(exname, '后缀名')
  179. const now = new Date();
  180. const year = now.getFullYear();
  181. const month = now.getMonth() + 1;
  182. const day = now.getDate() > 10 ? now.getDate() : "0" + now.getDate();
  183. const filePath =
  184. "/attachment-file/assess/" +
  185. type +
  186. "/" +
  187. year +
  188. "/" +
  189. month +
  190. "/" +
  191. day +
  192. "/" +
  193. now.getTime();
  194. // console.log(filePath, '文件存储路径')
  195. const fileName = filePath + name + "." + exname;
  196. // console.log(fileName, '文件名')
  197. await client
  198. .multipartUpload(fileName, file.file, {
  199. // eslint-disable-next-line no-unused-vars
  200. progress: await function(p, checkpoint) {
  201. file.onProgress({ percent: Math.floor(p * 100) }); // 触发el-upload组件的onProgress方法
  202. },
  203. // mime: type,
  204. })
  205. .then(
  206. await function(result) {
  207. // console.log(result)
  208. if (result.res.status === 200) {
  209. // file.onSuccess(result) // 触发el-upload组件的onSuccess方法
  210. file.file.url = fileName;
  211. }
  212. // eslint-disable-next-line handle-callback-err,no-unused-vars
  213. }
  214. )
  215. .catch(function(err) {
  216. // console.log(err)
  217. file.onError("上传失败"); // 触发el-upload组件的onError方法,此方法会移除文件列表
  218. });
  219. }
  220. // eslint-disable-next-line no-unused-vars
  221. function getTemporaryByUrl(url) {
  222. return request({
  223. url: prefix + "/oss/file/getTemporaryUrl",
  224. method: "get",
  225. params: { url: url },
  226. });
  227. }
  228. export async function openWindowOnUrl(row) {
  229. if (row.url === undefined || row.url === null || row.url === "") {
  230. // Message.error('没有获取到文件的url')
  231. return;
  232. }
  233. let rowUrl = "";
  234. let suffix = row.name.substring(row.name.lastIndexOf(".") + 1);
  235. if (
  236. suffix === "jpg" ||
  237. suffix === "png" ||
  238. suffix === "gif" ||
  239. suffix === "bmp" ||
  240. suffix === "jpeg"
  241. ) {
  242. await getTemporaryByUrl(row.url).then((data) => {
  243. // eslint-disable-next-line no-undef
  244. onPreview(data);
  245. });
  246. return;
  247. }
  248. await getTemporaryByUrl(row.url).then((data) => {
  249. rowUrl = data;
  250. });
  251. if (suffix === "pdf") {
  252. window.open(
  253. "https://view.xdocin.com/xdoc?_xdoc=" + encodeURIComponent(rowUrl),
  254. "_blank"
  255. );
  256. } else if (
  257. suffix === "rar" ||
  258. suffix === "zip" ||
  259. suffix === "jar" ||
  260. suffix === "7z"
  261. ) {
  262. window.open(
  263. "https://view.xdocin.com/xdoc?_xdoc=" + encodeURIComponent(rowUrl),
  264. "_blank"
  265. );
  266. } else {
  267. window.open(
  268. "https://view.officeapps.live.com/op/view.aspx?src=" +
  269. encodeURIComponent(rowUrl),
  270. "_blank"
  271. );
  272. }
  273. }
  274. export async function toHref(row) {
  275. if (row.url === null || row.url === undefined || row.url === "") {
  276. // Message.error('没有获取到文件的url')
  277. return;
  278. }
  279. const link = document.createElement("a");
  280. await getTemporaryByUrl(row.url).then((data) => {
  281. const url = data; // 完整的url则直接使用
  282. // 这里是将url转成blob地址,
  283. fetch(url)
  284. .then((res) => res.blob())
  285. .then((blob) => {
  286. // 将链接地址字符内容转变成blob地址
  287. link.href = URL.createObjectURL(blob);
  288. link.download = row.name || ""; // 下载文件的名字
  289. // a.download = url.split('/')[url.split('/').length -1] // // 下载文件的名字
  290. document.body.appendChild(link);
  291. link.click();
  292. // 在资源下载完成后 清除 占用的缓存资源
  293. window.URL.revokeObjectURL(link.href);
  294. document.body.removeChild(link);
  295. });
  296. });
  297. }