流程:

1.** 客户端将文件数据发送给服务器
2.** 服务器保存上传的文件数据到服务器端
3.** 服务器响应给客户端一个文件访问地址**

>** 测试地址:http://101.132.72.36:5100/api/upload
>** 键的名称(表单域名称):imagefile

请求方法:POST
请求的表单格式:multipart/form-data 这个格式上传需要格式 ,格式如下+
请求体中必须包含一个键值对,键的名称是服务器要求的名称,值是文件数据
image.png

>** HTML5中,JS仍然无法随意的获取文件数据,但是可以获取到input元素中,被用户选中的文件数据
>** 可以利用HTML5提供的FormData构造函数来创建请求体
**

  1. <body>
  2. <img src="" alt="" id="imgAvatar">
  3. <input type="file" id="avatar">
  4. <button>上传</button>
  5. <script>
  6. async function upload() {
  7. const inp = document.getElementById("avatar");
  8. if (inp.files.length === 0) {
  9. alert("请选择要上传的文件");
  10. return;
  11. }
  12. const formData = new FormData(); //构建请求体
  13. formData.append("imagefile", inp.files[0]);
  14. const url = "http://101.132.72.36:5100/api/upload"
  15. const resp = await fetch(url, {
  16. method: "POST",
  17. body: formData //自动修改请求头
  18. });
  19. const result = await resp.json();
  20. return result;
  21. }
  22. document.querySelector("button").onclick = async function() {
  23. const result = await upload();
  24. const img = document.getElementById("imgAvatar")
  25. img.src = result.path;
  26. }
  27. </script>
  28. </body>

使用原生的XMLHttpRequest实现图片上传

  1. <body>
  2. <input type="file" name="" id="file">
  3. <button id="btn" type="submit">上传</button>
  4. <img src="" id="img" alt="">
  5. <script>
  6. const url = "http://101.132.72.36:5100/api/upload";
  7. const inp = document.getElementById('file');
  8. const btn = document.getElementById('btn');
  9. const img = document.getElementById('img')
  10. btn.onclick = function (e) {
  11. if (inp.files.length === 0) {
  12. alert('错误')
  13. }
  14. const fromDate = new FormData()
  15. let fil = inp.files[0]
  16. console.log(fil)
  17. fromDate.append('imagefile', inp.files[0])
  18. const xhr = new XMLHttpRequest()
  19. xhr.open('POST', url);
  20. xhr.send(fromDate)
  21. xhr.onreadystatechange = function () {
  22. console.log(xhr.readyState)
  23. console.log(xhr.status)
  24. console.log(xhr.responseText)
  25. console.log(xhr.responseText.split('')[0])
  26. if (xhr.readyState == 4 && xhr.status == 200) {
  27. let data = JSON.parse(xhr.responseText);
  28. img.src = data.path;
  29. }
  30. }
  31. }
  32. </script>
  33. </body>