Spring Boot中如何实现文件分片上传功能?
- 内容介绍
- 文章标签
- 相关推荐
本文共计750个文字,预计阅读时间需要3分钟。
这篇文章主要介绍了Spring Boot如何实现文件上传切片上传,内容中通过示例代码进行了详细说明,对初学者或工作者具有一定的参考价值,需要的朋友可以参考学习。文件上传是Web开发中常见的功能,以下是一个简单的示例:
这篇文章主要介绍了spring boot如何实现切割分片上传,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
文件上传是web开发中经常会遇到的
springboot的默认配置为10MB,大于10M的是传不上服务器的,需要修改默认配置
但是如果修改支持大文件又会增加服务器的负担。
当文件大于一定程度时,不仅服务器会占用大量内存,而且github.com/fex-team/webuploader/releases
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="www.w3.org/1999/xhtml"> <head> <meta localhost:8080/api/upload/part', formData:{ guid : GUID }, pick: '#picker', chunked : true, // 分片处理 chunkSize : 1 * 1024 * 1024, // 每片1M, chunkRetry : false,// 如果失败,则不重试 threads : 1,// 上传并发数。允许同时最大上传进程数。 resize: false }); $("#startBtn").click(function () { uploader.upload(); }); //当文件上传成功时触发。 uploader.on( "uploadSuccess", function( file ) { $.post('localhost:8080/api/upload/merge', { guid: GUID, fileName: file.name}, function (data) { if(data.code == 200){ alert('上传成功!'); } }); }); </script> </html>
(2)不使用插件
直接用HTML5的File API
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="www.w3.org/1999/xhtml"> <head> <script src="jquery-1.10.1.min.js" type="text/javascript"> </script> <meta content="text/html; charset=utf-8" localhost:8080/api/upload/part", type: "POST", data: form, async: true, //异步 processData: false, //很重要,告诉jquery不要对form进行处理 contentType: false, //很重要,指定为false才能形成正确的Content-Type success: function(data){ status++; if(data.code == 200){ $("#output").html(status+ " / " + chunks); } if(status==chunks){ now.mergeFile(GUID,name); } } }); }, mergeFile:function(GUID,name){ var formMerge = new FormData(); formMerge.append("guid", GUID); formMerge.append("fileName", name); $.ajax({ url: "localhost:8080/api/upload/merge", type: "POST", data: formMerge, processData: false, //很重要,告诉jquery不要对form进行处理 contentType: false, //很重要,指定为false才能形成正确的Content-Type success: function(data){ if(data.code == 200){ alert('上传成功!'); } } }); }, guid:function(prefix){ var counter = 0; var guid = (+new Date()).toString( 32 ), i = 0; for ( ; i < 5; i++ ) { guid += Math.floor( Math.random() * 65535 ).toString( 32 ); } return (prefix || 'wu_') + guid + (counter++).toString( 32 ); } }; $(function(){ page.init(); }); </script> </html>
3.优化
springboot的默认配置为10MB,前端分片改为20M时,就会报错
org.apache.tomcat.util.http.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (10486839) exceeds the configured maximum (10485760)
解决方法:
在 src/main/resources 下的 application.properties里添加
spring.servlet.multipart.max-file-size=30MB spring.servlet.multipart.max-request-size=35MB
说明:
设置的数值虽好比前端传过来的大,要不容易报错
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持易盾网络。
本文共计750个文字,预计阅读时间需要3分钟。
这篇文章主要介绍了Spring Boot如何实现文件上传切片上传,内容中通过示例代码进行了详细说明,对初学者或工作者具有一定的参考价值,需要的朋友可以参考学习。文件上传是Web开发中常见的功能,以下是一个简单的示例:
这篇文章主要介绍了spring boot如何实现切割分片上传,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
文件上传是web开发中经常会遇到的
springboot的默认配置为10MB,大于10M的是传不上服务器的,需要修改默认配置
但是如果修改支持大文件又会增加服务器的负担。
当文件大于一定程度时,不仅服务器会占用大量内存,而且github.com/fex-team/webuploader/releases
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="www.w3.org/1999/xhtml"> <head> <meta localhost:8080/api/upload/part', formData:{ guid : GUID }, pick: '#picker', chunked : true, // 分片处理 chunkSize : 1 * 1024 * 1024, // 每片1M, chunkRetry : false,// 如果失败,则不重试 threads : 1,// 上传并发数。允许同时最大上传进程数。 resize: false }); $("#startBtn").click(function () { uploader.upload(); }); //当文件上传成功时触发。 uploader.on( "uploadSuccess", function( file ) { $.post('localhost:8080/api/upload/merge', { guid: GUID, fileName: file.name}, function (data) { if(data.code == 200){ alert('上传成功!'); } }); }); </script> </html>
(2)不使用插件
直接用HTML5的File API
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="www.w3.org/1999/xhtml"> <head> <script src="jquery-1.10.1.min.js" type="text/javascript"> </script> <meta content="text/html; charset=utf-8" localhost:8080/api/upload/part", type: "POST", data: form, async: true, //异步 processData: false, //很重要,告诉jquery不要对form进行处理 contentType: false, //很重要,指定为false才能形成正确的Content-Type success: function(data){ status++; if(data.code == 200){ $("#output").html(status+ " / " + chunks); } if(status==chunks){ now.mergeFile(GUID,name); } } }); }, mergeFile:function(GUID,name){ var formMerge = new FormData(); formMerge.append("guid", GUID); formMerge.append("fileName", name); $.ajax({ url: "localhost:8080/api/upload/merge", type: "POST", data: formMerge, processData: false, //很重要,告诉jquery不要对form进行处理 contentType: false, //很重要,指定为false才能形成正确的Content-Type success: function(data){ if(data.code == 200){ alert('上传成功!'); } } }); }, guid:function(prefix){ var counter = 0; var guid = (+new Date()).toString( 32 ), i = 0; for ( ; i < 5; i++ ) { guid += Math.floor( Math.random() * 65535 ).toString( 32 ); } return (prefix || 'wu_') + guid + (counter++).toString( 32 ); } }; $(function(){ page.init(); }); </script> </html>
3.优化
springboot的默认配置为10MB,前端分片改为20M时,就会报错
org.apache.tomcat.util.http.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (10486839) exceeds the configured maximum (10485760)
解决方法:
在 src/main/resources 下的 application.properties里添加
spring.servlet.multipart.max-file-size=30MB spring.servlet.multipart.max-request-size=35MB
说明:
设置的数值虽好比前端传过来的大,要不容易报错
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持易盾网络。

