自定义上传图片(自定义上传input样式)

灰太狼 2022-12-20 03:11 241阅读 0赞
  1. ## 1.Html文件
  2. <!DOCTYPE html>
  3. <html lang="en">
  4. <head>
  5. <meta charset="UTF-8">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. <style>
  9. img {
  10. width: 100px;
  11. height: 100px;
  12. }
  13. .btn {
  14. position: relative;
  15. display: inline-block;
  16. width: 75px;
  17. height: 25px;
  18. overflow: hidden;
  19. line-height: 25px;
  20. text-align: center;
  21. vertical-align: middle;
  22. background-color: #f90;
  23. border: 1px solid #f90;
  24. border-radius: 5px;
  25. font-size: 14px;
  26. color: #fff;
  27. }
  28. .btn:hover {
  29. background-color: rgba(255, 153, 0, 0.822);
  30. border: 1px solid rgba(255, 153, 0, 0.822);
  31. }
  32. .btn input {
  33. position: absolute;
  34. left: 0;
  35. top: 0;
  36. opacity: 0;
  37. }
  38. </style>
  39. </head>
  40. <body>
  41. <img src="" alt="">
  42. <div class="customUpload">
  43. <label class="btn">
  44. <span>选择图片</span>
  45. <input type="file">
  46. </label>
  47. </div>
  48. <script src="https://cdn.bootcdn.net/ajax/libs/axios/0.21.0/axios.min.js"></script>
  49. <script>
  50. const input = document.querySelector('input')
  51. input.onchange = async function (e) {
  52. const files = e.target.files[0]
  53. const name = files.name
  54. const res = await upload({ name, files })
  55. const url = res.data.url
  56. getImgUrl(url)
  57. }
  58. function upload({ name, files }) {
  59. const formData = new FormData()
  60. formData.append('name', name)
  61. formData.append('file', files)
  62. return axios({
  63. method: 'POST',
  64. url: 'http://localhost:3000/upload',
  65. data: formData
  66. })
  67. }
  68. function getImgUrl(src) {
  69. const img = document.querySelector('img')
  70. img.src = src
  71. }
  72. </script>
  73. </body>
  74. </html>
  75. ## 2. 服务端代码 server.js中
  76. const express = require('express')
  77. const cors = require('cors')
  78. const multer = require('multer')
  79. const uploadRouter = require('./routers')
  80. const path = require('path')
  81. const storage = multer.diskStorage({
  82. // 输出的目录
  83. destination (req, file, cb) {
  84. cb(null, 'uploads/')
  85. },
  86. // 文件名重写,因为默认multer生成的文件是没有扩展名的
  87. filename (req, file, cb) {
  88. cb(null, Date.now() + file.originalname)
  89. }
  90. })
  91. // 自定义控制
  92. const upload = multer({ storage })
  93. const app = express()
  94. // 暴露静态资源
  95. app.use(express.static(path.resolve(__dirname, './uploads')))
  96. // 解决跨域
  97. app.use(cors())
  98. // 应用中间件
  99. app.use(upload.any(), uploadRouter)
  100. // 监听的端口
  101. app.listen(3000, err => {
  102. if (err) {
  103. console.log(err)
  104. return
  105. }
  106. console.log('success')
  107. })
  108. ## 3. routers/index.js
  109. const express = require('express')
  110. const upload = require('./upload')
  111. const router = express.Router()
  112. router.post('/upload', upload)
  113. module.exports = router
  114. ## 4. routers/upload.js
  115. module.exports = function (req, res) {
  116. const filename = req.files[0].filename
  117. const url = 'http://localhost:3000/' + filename
  118. res.send({
  119. status: 200,
  120. url
  121. })
  122. }
  123. ## 5. 新建一个uploads空目录即可

发表评论

表情:
评论列表 (有 0 条评论,241人围观)

还没有评论,来说两句吧...

相关阅读

    相关 springboot 定义路径

    项目中涉及上传文件时,如果将文件保存到项目路径,一旦重新部署项目就会出现之前上传的文件找不到的情况;因此我们需要将文件保存到项目以外的绝对路径,或者使用单独的服务保存文件,本文