我是用el-upload实现上传图片的功能,目前可以上传较小的图片,但是当上传一幅20多M的图片时,大小根本没有任何数据传递到后端……请问应该如何设置?
上传大文件时,可能会出现连接超时、内存不足、上传失败等问题,因为默认情况下,服务器和客户端对上传文件的大小都有限制。为此,您可以尝试以下一些解决方案:
LimitRequestBody 0 # 允许上传的最大文件大小,0表示无大小限制
<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(`当前限制上传一张图片`);
}
}
希望这些解决方案对您有所帮助。如果您仍然无法解决问题,您可以提供更多的信息和代码,以便我们提供更具体的帮助。
不知道你这个问题是否已经解决, 如果还没有解决的话:后端直接在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;
}
答案:
在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。需要注意的是,在设置上传文件大小限制时,需要考虑到前端和后端的限制,避免上传过大的文件导致服务器负担过重。同时,在前端进行的限制不是万无一失的,可能会被绕过,因此后端也需要对上传的文件进行大小限制。