OSSService.js 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259
  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. // bucket: 'xg-pg', // 仓库名字
  77. useFetch: true, // 支持上传大于100KB的文件
  78. secure: false // 返回的url为https
  79. })
  80. export const headers = {
  81. // 指定该Object被下载时网页的缓存行为。
  82. 'Cache-Control': 'no-cache',
  83. // 指定该Object被下载时的名称。
  84. 'Content-Disposition': 'inline',
  85. // 指定该Object被下载时的内容编码格式。
  86. 'Content-Encoding': 'UTF-8',
  87. // 指定过期时间。
  88. Expires: 'Wed, 08 Jul 2023 16:57:01 GMT',
  89. // 指定Object的存储类型。
  90. 'x-oss-storage-class': 'Standard',
  91. // 指定Object的访问权限。
  92. // 'x-oss-object-acl': 'private',
  93. // 设置Object的标签,可同时设置多个标签。
  94. 'x-oss-tagging': 'Tag1=1&Tag2=2',
  95. // 指定CopyObject操作时是否覆盖同名目标Object。此处设置为true,表示禁止覆盖同名Object。
  96. 'x-oss-forbid-overwrite': 'true'
  97. // 'secure': 'true'
  98. }
  99. export function onChange (file, files) {
  100. // console.log(file, 'file', files, 'Filest')
  101. return files
  102. }
  103. // eslint-disable-next-line no-unused-vars
  104. export function handleUploadSuccess (response, file, fileS) {
  105. // console.log(response, file, fileS, 'response, file, fileList')
  106. }
  107. export function handleRemove (e, files) {
  108. return files
  109. }
  110. export function fileName (file) {
  111. // console.log('文件名称处理')
  112. const tmpcnt = file.file.name.lastIndexOf('.')
  113. let fileName = file.file.name.substring(0, tmpcnt)
  114. // 将单引号‘’都转换成',将双引号“”都转换成"
  115. fileName = fileName.replace(/’|‘/g, '\'').replace(/“|”/g, '')
  116. // 将中括号【】转换成[],将大括号{}转换成{}
  117. fileName = fileName.replace(/【/g, '(').replace(/】/g, ')').replace(/{/g, '(').replace(/}/g, ')')
  118. fileName = fileName.replace(/\[/g, '(').replace(/]/g, ')').replace(/{/g, '(').replace(/}/g, ')')
  119. // 将逗号,转换成,,将:转换成:
  120. fileName = fileName.replace(/,/g, ',').replace(/:/g, ':')
  121. // 将中文——转换为英文-
  122. fileName = fileName.replace(/—/g, '-')
  123. fileName = fileName.replace(/……/g, '')
  124. fileName = fileName.replace(/±/g, '')
  125. fileName = fileName.replace(/#/g, '')
  126. fileName = fileName.replace(/%/g, '')
  127. fileName = fileName.replace(/Π/g, '')
  128. fileName = fileName.replace(/π/g, '')
  129. fileName = fileName.replace(/·/g, '.')
  130. // console.log('文件名处理结果', fileName)
  131. return fileName
  132. }
  133. export function beforeAvatarUpload (file, fileList, maxValue) {
  134. // 文件大小校验
  135. const isLt2M = file.size / 1024 / 1024 < maxValue
  136. if (!isLt2M) {
  137. fileList.splice(fileList.length - 1, 1)
  138. // console.log('文件大小不能超过 ' + maxValue + ' MB!')
  139. }
  140. return isLt2M
  141. }
  142. // export function exnameFix (file, isShow, names) {
  143. // // console.log('格式校验')
  144. // const tmpcnt = file.name.lastIndexOf('.')
  145. // const exname = file.name.substring(tmpcnt + 1) // 获取后缀名
  146. // if (names.indexOf(exname) < 0) {
  147. // if (isShow === '1') {
  148. // ElMessage({
  149. // message: '不支持的格式!',
  150. // type: 'error',
  151. // })
  152. // }
  153. // return false
  154. // }
  155. // return true
  156. // }
  157. export async function httpRequest (file, name, type, maxValue) { // 阿里云OSS上传
  158. if (!beforeAvatarUpload(file.file, [], maxValue)) {
  159. return
  160. }
  161. // console.log('开始上传')
  162. // 判断扩展名
  163. const tmpcnt = file.file.name.lastIndexOf('.') // 获取.的下标
  164. const exname = file.file.name.substring(tmpcnt + 1) // 获取后缀名
  165. // console.log(exname, '后缀名')
  166. const now = new Date()
  167. const year = now.getFullYear()
  168. const month = now.getMonth() + 1
  169. const day = now.getDate() > 10 ? now.getDate() : '0' + now.getDate()
  170. const filePath = '/attachment-file/assess/' + type + '/' + year + '/' + month + '/' + day + '/' + now.getTime()
  171. // console.log(filePath, '文件存储路径')
  172. const fileName = filePath + name + '.' + exname
  173. // console.log(fileName, '文件名')
  174. await client.multipartUpload(fileName, file.file, {
  175. // eslint-disable-next-line no-unused-vars
  176. progress: await function (p, checkpoint) {
  177. file.onProgress({percent: Math.floor(p * 100)}) // 触发el-upload组件的onProgress方法
  178. }
  179. // mime: type,
  180. }).then(await function (result) {
  181. // console.log(result)
  182. if (result.res.status === 200) {
  183. // file.onSuccess(result) // 触发el-upload组件的onSuccess方法
  184. file.file.url = fileName
  185. }
  186. // eslint-disable-next-line handle-callback-err,no-unused-vars
  187. }).catch(function (err) {
  188. // console.log(err)
  189. file.onError('上传失败') // 触发el-upload组件的onError方法,此方法会移除文件列表
  190. })
  191. }
  192. // eslint-disable-next-line no-unused-vars
  193. function getTemporaryByUrl (url) {
  194. return request({
  195. url: prefix + '/oss/file/getTemporaryUrl',
  196. method: 'get',
  197. params: {url: url}
  198. })
  199. }
  200. export async function openWindowOnUrl (row) {
  201. if (row.url === undefined || row.url === null || row.url === '') {
  202. // Message.error('没有获取到文件的url')
  203. return
  204. }
  205. let rowUrl = ''
  206. let suffix = row.name.substring(row.name.lastIndexOf('.') + 1)
  207. if (suffix === 'jpg' || suffix === 'png' || suffix === 'gif' || suffix === 'bmp' || suffix === 'jpeg') {
  208. await getTemporaryByUrl(row.url).then((data) => {
  209. // eslint-disable-next-line no-undef
  210. onPreview(data)
  211. })
  212. return
  213. }
  214. await getTemporaryByUrl(row.url).then((data) => {
  215. rowUrl = data
  216. })
  217. if (suffix === 'pdf') {
  218. window.open('https://view.xdocin.com/xdoc?_xdoc=' + encodeURIComponent(rowUrl), '_blank')
  219. } else if (suffix === 'rar' || suffix === 'zip' || suffix === 'jar' || suffix === '7z') {
  220. window.open('https://view.xdocin.com/xdoc?_xdoc=' + encodeURIComponent(rowUrl), '_blank')
  221. } else {
  222. window.open('https://view.officeapps.live.com/op/view.aspx?src=' + encodeURIComponent(rowUrl), '_blank')
  223. }
  224. }
  225. export async function toHref (row) {
  226. if (row.url === null || row.url === undefined || row.url === '') {
  227. // Message.error('没有获取到文件的url')
  228. return
  229. }
  230. const link = document.createElement('a')
  231. await getTemporaryByUrl(row.url).then((data) => {
  232. const url = data // 完整的url则直接使用
  233. // 这里是将url转成blob地址,
  234. fetch(url).then(res => res.blob()).then(blob => { // 将链接地址字符内容转变成blob地址
  235. link.href = URL.createObjectURL(blob)
  236. link.download = row.name || '' // 下载文件的名字
  237. // a.download = url.split('/')[url.split('/').length -1] // // 下载文件的名字
  238. document.body.appendChild(link)
  239. link.click()
  240. // 在资源下载完成后 清除 占用的缓存资源
  241. window.URL.revokeObjectURL(link.href)
  242. document.body.removeChild(link)
  243. })
  244. })
  245. }