当前位置:   article > 正文

uniapp微信小程序图片文件上传及获取文件对象等_uniapp微信小程序上传文件

uniapp微信小程序上传文件

1.前言-吐槽

        这几天遇到一个需求,在uniapp小程序中上传图片文件,但是要用base64格式数据,但是在csdn和百度上都没找到相应方法,千篇一律都是使用uni.chooseImage()得到文件临时路径,再通过uni.uploadFile()将路径放到files参数中进行formdata格式上传,这明显和想要的效果不一样。于是在网络海洋遨游了几天后终于在微信小程序官方文档找到了解决方法--调用getFileSystemManager().readFileSync()方法获取到文件 ArrayBuffer 二进制或base64等格式数据。

2.使用方法及代码

官方文档说明:

     1.readFileSync()方法的第一个参数是一个文件路径,我们可以通过uni.chooseImage()获取文件的临时路径:

  1. <template>
  2. <view class="content">
  3. <view class="text-area">
  4. <button @click="chooseImage">选择文件</button>
  5. </view>
  6. </view>
  7. </template>
  8. <script>
  9. export default {
  10. data() {
  11. return {
  12. }
  13. },
  14. methods: {
  15. // 选择文件获取文件临时路径
  16. chooseImage() {
  17. uni.chooseImage({
  18. count: 6, //默认9
  19. sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
  20. sourceType: ['album'], //从相册选择
  21. success: function(res) {
  22. console.log('这是选择文件的临时路径\n', JSON.stringify(res.tempFilePaths));
  23. }
  24. });
  25. }
  26. }
  27. }
  28. </script>
  29. <style>
  30. .content {
  31. display: flex;
  32. flex-direction: column;
  33. align-items: center;
  34. justify-content: center;
  35. }
  36. .text-area {
  37. display: flex;
  38. justify-content: center;
  39. }
  40. </style>

2.将得到的路径放入到 FileSystemManager.readFileSync()作为第一个参数,第二个参数可选,不填则默认返回 ArrayBuffer 格式数据,为了得到base64以便进行格式转换,我们这里将填入"base64"作为第二个参数:

  1. <template>
  2. <view class="content">
  3. <view class="text-area">
  4. <button @click="chooseImage">选择文件</button>
  5. </view>
  6. </view>
  7. </template>
  8. <script>
  9. export default {
  10. data() {
  11. return {}
  12. },
  13. methods: {
  14. // 选择文件获取文件临时路径
  15. chooseImage() {
  16. uni.chooseImage({
  17. count: 6, //默认9
  18. sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
  19. sourceType: ['album'], //从相册选择
  20. success: (res) => {
  21. console.log('这是选择文件的临时路径\n', JSON.stringify(res.tempFilePaths[0]));
  22. this.getBase64(res.tempFilePaths[0])
  23. }
  24. });
  25. },
  26. // 传入临时路径,获取到文件的base64格式数据.
  27. getBase64(fileTemppath) {
  28. let base64 = uni.getFileSystemManager().readFileSync(fileTemppath, 'base64')
  29. console.log("这是base64数据\n", base64);
  30. }
  31. }
  32. }
  33. </script>
  34. <style>
  35. .content {
  36. display: flex;
  37. flex-direction: column;
  38. align-items: center;
  39. justify-content: center;
  40. }
  41. .text-area {
  42. display: flex;
  43. justify-content: center;
  44. }
  45. </style>

3.通过转换得到更多文件格式数据:

可以看我的这一篇文章了解,这里就不多赘述。

3.额外一提-在uniapp中通过formData格式进行上传:

        在uniapp中进行formdat格式上传必须通过调用uni.uploadFile(OBJECT)方法:

  1. <template>
  2. <view class="content">
  3. <view class="text-area">
  4. <button @click="chooseImage">选择文件</button>
  5. </view>
  6. </view>
  7. </template>
  8. <script>
  9. export default {
  10. data() {
  11. return {}
  12. },
  13. methods: {
  14. // 选择文件获取文件临时路径
  15. chooseImage() {
  16. uni.chooseImage({
  17. count: 6, //默认9
  18. sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
  19. sourceType: ['album'], //从相册选择
  20. success: (res) => {
  21. console.log('这是选择文件的临时路径\n', JSON.stringify(res.tempFilePaths[0]));
  22. this.uploadImage(res.tempFilePaths[0])
  23. }
  24. });
  25. },
  26. // 上传
  27. uploadImage(filePath) {
  28. uni.uploadFile({
  29. url: 'https://www.example.com/upload', //仅为示例,非真实的接口地址
  30. filePath: filePath, //这里的参数可以填filePath和files,需要看文件传入的耽搁还是多个
  31. name: 'file', //上传图片文件中formData对应的key值
  32. formData: {
  33. 'user': 'test' //这里可以填写额外的forData数据
  34. },
  35. success: (uploadFileRes) => {
  36. console.log(uploadFileRes.data);
  37. }
  38. });
  39. }
  40. }
  41. }
  42. </script>
  43. <style>
  44. .content {
  45. display: flex;
  46. flex-direction: column;
  47. align-items: center;
  48. justify-content: center;
  49. }
  50. .text-area {
  51. display: flex;
  52. justify-content: center;
  53. }
  54. </style>

4.结语-吐槽

        在这里奉劝大家一句,要先想好产品的侧重端,要是想做小程序就直接尽量用原生好了,不然遇到bug半天解决不了,readFileSync()方法在uniapp的官方文档中根本一个字都找不到,也没有引导去微信文档查找,勾石。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/928208
推荐阅读
相关标签
  

闽ICP备14008679号