el-upload上传图片的大小如何设置?

我是用el-upload实现上传图片的功能,目前可以上传较小的图片,但是当上传一幅20多M的图片时,大小根本没有任何数据传递到后端……请问应该如何设置?

上传大文件时,可能会出现连接超时、内存不足、上传失败等问题,因为默认情况下,服务器和客户端对上传文件的大小都有限制。为此,您可以尝试以下一些解决方案:

  1. 增加服务器的最大上传文件大小:在应用程序的配置文件中,您需要增加对应的配置项,以允许更大的上传文件大小。比如,在 Apache 的配置文件 httpd.conf 中,您可以增加以下内容:
LimitRequestBody 0  # 允许上传的最大文件大小,0表示无大小限制
  1. 增加客户端的最大上传文件大小:在客户端的配置中,您需要在上传组件中增加对应的属性,以允许更大的上传文件。比如,在 el-upload 中,您可以增加以下属性:
<el-upload
  ...
  :on-exceed="handleExceed"  # 限制文件上传大小
  :before-upload="handleBeforeUpload"  # 上传前的回调,可处理文件
  >
</el-upload>
methods: {
  handleBeforeUpload: function (file) {
    if (file.size > 1024 * 1024 * 20) {  // 限制文件上传大小为20M
      this.$message.error('上传文件大小不能超过20MB');
      return false;
    }
  },
  handleExceed: function (files, fileList) {
    this.$message.warning(`当前限制上传一张图片`);
  }
}
  1. 使用分块上传:对于大文件,您可以使用分块上传的方式,将文件分为多个块,并将每个块独立上传,以避免上传失败或超时等问题。Vue.js 有许多分块上传组件可供选择,比如 vue-simple-upload 等。您可以选择适合您应用场景的组件进行尝试。

希望这些解决方案对您有所帮助。如果您仍然无法解决问题,您可以提供更多的信息和代码,以便我们提供更具体的帮助。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7402602
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:使用el-upload多图片上传,通过后端保存到本地
  • 除此之外, 这篇博客: 使用el-upload进行文件上传,前后端实现中的大小问题中的 后端实现 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    后端直接在controller使用MultipartHttpServletRequest获取文件,转换成File保存和读取,实现如下:

        //上传文件
        @RequestMapping(value="upload2",method = RequestMethod.POST)
        public CommonVO upload2(MultipartHttpServletRequest  request){
            MultipartFile file = request.getFile("file");
            CommonVO cVo = new CommonVO();
            SimpleDateFormat sdf = new SimpleDateFormat("/yyyyMMdd/");
            String format = sdf.format(new Date());
            String realPath = request.getServletContext().getRealPath("/upload") + format;
            // 这是个目录
            File folder = new File(realPath);
            if (!folder.exists()) {
                folder.mkdirs();
            }
            String oldName = file.getOriginalFilename();
            String newName = UUID.randomUUID().toString() + oldName.substring(oldName.lastIndexOf("."));
    //         目录文件
            File tarFile = new File(folder,newName);
            try {
                file.transferTo(tarFile);
            } catch (Exception e) {
                e.printStackTrace();
            }
            CompareObject co = new CompareObject();
            // 获取excel文件内容
            co.init(ExcelReadUtil.getSheetByFile(tarFile));
            cVo.setCode(200);
            return cVo;
        }
    
  • 以下回答来自chatgpt:

    答案:

    在el-upload组件中,可以通过设置属性before-upload来对上传文件的大小进行限制。before-upload是一个函数类型的属性,函数的参数是上传的文件对象,需要返回一个布尔类型的值。如果返回true,则上传文件,如果返回false,则取消上传。

    以下是一个示例代码:

    <el-upload
      class="upload-demo"
      action="/uploadHandler"
      :before-upload="beforeUpload"
    >
      <el-button size="small" type="primary">点击上传</el-button>
      <div slot="tip">只能上传jpg/png文件,且不超过2MB</div>
    </el-upload>
    
    <script>
      export default {
        methods: {
          beforeUpload(file) {
            const isJPG = file.type === 'image/jpeg' || file.type === 'image/png';
            const isLt2M = file.size / 1024 / 1024 < 2;
    
            if (!isJPG) {
              this.$message.error('上传头像图片只能是 JPG/PNG 格式!');
            }
            if (!isLt2M) {
              this.$message.error('上传头像图片大小不能超过 2MB!');
            }
    
            return isJPG && isLt2M;
          }
        }
      }
    </script>
    

    在beforeUpload函数中,先判断上传的文件是否是jpg/png格式,如果不是,则弹出提示信息,并返回false。然后判断上传文件大小是否小于2MB,如果不是,则同样弹出提示信息,并返回false。如果都满足,则返回true,继续上传文件。

    在这个示例代码中,限制了上传文件的大小不超过2MB。需要注意的是,在设置上传文件大小限制时,需要考虑到前端和后端的限制,避免上传过大的文件导致服务器负担过重。同时,在前端进行的限制不是万无一失的,可能会被绕过,因此后端也需要对上传的文件进行大小限制。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^