image-path.uvue 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. <template>
  2. <!-- #ifdef APP -->
  3. <scroll-view style="flex: 1;">
  4. <!-- #endif -->
  5. <view>
  6. <page-head :title="title"></page-head>
  7. <view class="uni-padding-wrap uni-common-mt">
  8. <view class="uni-title">
  9. <text class="uni-title-text">图片路径示例</text>
  10. </view>
  11. <view v-for="(item,index) in data" :key="index">
  12. <text class="uni-subtitle-text">{{item.description}}</text>
  13. <view class="uni-center" style="background:#FFFFFF;">
  14. <image class="image" mode="widthFix" :src="item.errorImage == null ? item.src : item.errorImage"
  15. @error="imageErrorEvent(index, $event as ImageErrorEvent)"></image>
  16. </view>
  17. </view>
  18. <test-image-path />
  19. <view>
  20. <text class="uni-subtitle-text">非static目录的src静态路径:./logo.png</text>
  21. <view class="uni-center" style="background:#FFFFFF;">
  22. <image class="image" mode="widthFix" src="./logo.png"></image>
  23. </view>
  24. </view>
  25. </view>
  26. </view>
  27. <!-- #ifdef APP -->
  28. </scroll-view>
  29. <!-- #endif -->
  30. </template>
  31. <script>
  32. import logo from './logo.png';
  33. const appid = uni.getAppBaseInfo().appId;
  34. export default {
  35. data() {
  36. return {
  37. title: 'image-path',
  38. outsideStaticPath: './logo.png' as string.ImageURIString,
  39. outsideStaticErrorPath: null as string | null,
  40. data: [
  41. {
  42. src: '/static/test-image/logo.png',
  43. description: '本地路径:/static方式'
  44. },
  45. {
  46. src: '../../../static/test-image/logo.png',
  47. description: '本地路径:../static/'
  48. },
  49. {
  50. src: '../../../static/Test-Image/Logo.png',
  51. description: '本地相对路径忽略大小写(需注意iOS平台不支持,Android平台云端打包后无效)'
  52. },
  53. {
  54. src: logo,
  55. description: 'import方式'
  56. },
  57. {
  58. src: `file:///android_asset/apps/${appid}/www/static/test-image/logo.png`,
  59. description: '本地绝对路径file://方式(仅限Android平台,云端打包后生效)'
  60. },
  61. {
  62. src: 'testerror.jpg',
  63. description: '错误的本地路径'
  64. },
  65. {
  66. src: 'data:image/*;base64,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',
  67. description: 'Base64'
  68. },
  69. {
  70. src: 'https://request.dcloud.net.cn/api/http/contentType/image/png',
  71. description: '正确网络路径'
  72. },
  73. {
  74. src: 'https://request.dcloud.net.cn/api/http/contentType/wrongImage/gif',
  75. description: '错误网络格式,假gif实为jpeg'
  76. },
  77. {
  78. src: 'https://request.dcloud.net.cn/api/http/contentType/wrongImage/jpeg',
  79. description: '错误网络格式,假jpg实为png'
  80. },
  81. {
  82. src: 'https://request.dcloud.net.cn/api/http/contentType/wrongImage/png',
  83. description: '错误网络格式,假png实为gif'
  84. },
  85. {
  86. src: 'https://request.dcloud.net.cn/api/http/contentType/404',
  87. description: '错误网络地址404接口'
  88. },
  89. {
  90. src: 'https://request.dcloud.net.cn/api/http/contentType/404.png',
  91. description: '错误网络地址,不存在的图片'
  92. },
  93. {
  94. src: './logo.png',
  95. description: '非static目录的动态路径(不显示是对的)'
  96. },
  97. // #ifdef APP-ANDROID || APP-IOS || APP-HARMONY || MP-WEIXIN
  98. {
  99. src: uni.env.USER_DATA_PATH+'/uni.png',
  100. description: 'uni.env.USER_DATA_PATH 路径'
  101. },
  102. // #endif
  103. // #ifdef APP-ANDROID || APP-IOS || APP-HARMONY
  104. {
  105. src: uni.env.CACHE_PATH+'/uni.png',
  106. description: 'uni.env.CACHE_PATH 路径'
  107. },
  108. {
  109. src: uni.env.SANDBOX_PATH+'/uni.png',
  110. description: 'uni.env.SANDBOX_PATH 路径'
  111. },
  112. // #endif
  113. // #ifdef APP-HARMONY
  114. {
  115. src: `$uni.env.TEMP_PATH/uni.png`,
  116. description: 'uni.env.TEMP_PATH 路径'
  117. },
  118. // #endif
  119. // #ifdef APP-ANDROID
  120. {
  121. src: uni.env.ANDROID_INTERNAL_SANDBOX_PATH+'/uni.png',
  122. description: 'uni.env.ANDROID_INTERNAL_SANDBOX_PATH 路径'
  123. },
  124. // #endif
  125. ] as Array<ImagePath>
  126. }
  127. },
  128. onLoad() {
  129. let fileManager = uni.getFileSystemManager()
  130. // #ifdef APP-ANDROID || APP-HARMONY || MP-WEIXIN
  131. try{
  132. fileManager.accessSync(`${uni.env.USER_DATA_PATH}/uni.png`)
  133. } catch (e) {
  134. fileManager.copyFileSync("/static/uni.png", `${uni.env.USER_DATA_PATH}/uni.png`)
  135. }
  136. // #endif
  137. // #ifdef APP-IOS
  138. fileManager.copyFileSync("/static/uni.png", `${uni.env.USER_DATA_PATH}/uni.png`)
  139. // #endif
  140. // #ifdef APP-ANDROID || APP-HARMONY
  141. try{
  142. fileManager.accessSync(`${uni.env.CACHE_PATH}/uni.png`)
  143. fileManager.accessSync(`${uni.env.SANDBOX_PATH}/uni.png`)
  144. } catch (e) {
  145. console.log("CACHE_PATH error")
  146. fileManager.copyFileSync("/static/uni.png", `${uni.env.CACHE_PATH}/uni.png`)
  147. fileManager.copyFileSync("/static/uni.png", `${uni.env.SANDBOX_PATH}/uni.png`)
  148. }
  149. // #endif
  150. // #ifdef APP-IOS
  151. fileManager.copyFileSync("/static/uni.png", `${uni.env.CACHE_PATH}/uni.png`)
  152. fileManager.copyFileSync("/static/uni.png", `${uni.env.SANDBOX_PATH}/uni.png`)
  153. // #endif
  154. // #ifdef APP-HARMONY
  155. try{
  156. fileManager.accessSync(`${uni.env.TEMP_PATH}/uni.png`)
  157. } catch (e) {
  158. fileManager.copyFileSync("/static/uni.png", `${uni.env.TEMP_PATH}/uni.png`)
  159. }
  160. // #endif
  161. // #ifdef APP-ANDROID
  162. try{
  163. fileManager.accessSync(`${uni.env.ANDROID_INTERNAL_SANDBOX_PATH}/uni.png`)
  164. } catch (e) {
  165. fileManager.copyFileSync("/static/uni.png", `${uni.env.ANDROID_INTERNAL_SANDBOX_PATH}/uni.png`)
  166. }
  167. // #endif
  168. },
  169. methods: {
  170. imageErrorEvent(index : number, e : ImageErrorEvent) {
  171. console.log("图片加载错误", e.detail.errMsg);
  172. // 图片加载失败,加载本地占位图
  173. this.data[index].errorImage = '/static/template/drop-card/dislike.png'
  174. }
  175. },
  176. }
  177. type ImagePath = {
  178. src : string.ImageURIString
  179. errorImage ?: string.ImageURIString | null
  180. description : string
  181. }
  182. </script>
  183. <style>
  184. .image {
  185. margin: 20px auto;
  186. width: 100px;
  187. }
  188. </style>