上传报错Corrupt form data: premature ending

element-ui上传组件el-upload还是不行,报错:java.io.IOException: Corrupt form data: premature ending
请问那个大佬会解决,能否发发前端代码参考一下?(已解决)

1、更新升级:

<dependency>
  <groupId>com.jfinal</groupId>
  <artifactId>jfinal-undertow</artifactId>
  <version>3.4</version>
</dependency>


<!-- https://mvnrepository.com/artifact/com.jfinal/jfinal -->
<dependency>
  <groupId>com.jfinal</groupId>
  <artifactId>jfinal</artifactId>
  <version>5.0.8</version>
</dependency>

2、el-upload 加一个 name属性

vue代码:

<el-upload action="/admin/imgUpload" accept="image/jpeg,image/jpg,image/png" multiple
           list-type="picture-card" :file-list="fileImgList" :on-success="handleSuccess"
           :on-remove="handleRemove">
    <i class="el-icon-plus"></i>
</el-upload>
<el-dialog :visible.sync="bigImgVisible">
    <img style="width:100%;" :src="dialogImageUrl" alt="">
</el-dialog>
<el-dialog :visible.sync="dialogVisible">
    <img width="100%" :src="dialogImageUrl" alt="">
</el-dialog>


属性:
dialogImageUrl: null,//预览图片的地址
bigImgVisible: false,//预览图片是否展示
fileImgList: [],//上传的图片集合
eqForm:{
    imageUrl:'',//图片路径的拼接,是使用.逗号拼接成的字符串
},
//图片上传
//dialogImageUrl: '',
dialogVisible: false,
disabled: false,
//图片上传end

方法:
uploadFile(params){
    const file = params.file,
        fileType = file.type,
        isImage = fileType.indexOf("image") != -1,
        isLt2M = file.size / 1024 / 1024 < 2;
    // 这里常规检验,看项目需求而定
    if (!isImage) {
        this.$message.error("只能上传图片格式png、jpg、gif!");
        return;
    }
    if (!isLt2M) {
        this.$message.error("只能上传图片大小小于2M");
        return;
    }
    // 根据后台需求数据格式
    const form = new FormData();
    // 文件对象
    form.append("file", file);
    // 本例子主要要在请求时添加特定属性,所以要用自己方法覆盖默认的action
    form.append("enctype", 'multipart/form-data');//enctype="multipart/form-data"
    // 项目封装的请求方法,下面做简单介绍
    this.$axios({
        method: 'POST',
        url: '/admin/imgUpload',
        headers: {"content-type": "multipart/form-data"},
        data: form
    }).then((response) => {         //这里使用了ES6的语法
        if (response.status === 200) {
            console.log(response)
        }
    }).catch((error) => {
        console.log(error)
    });
},
//图片的预览方法:
onPreview(file){
    if (file.url) {
        this.dialogImageUrl = file.url;
        this.bigImgVisible = true;
    }
},
//图片的删除方法
handleRemove(file, fileList) {
    //注意图片删除时,会改变图片的Url格式,但是不影响具体的使用。
    this.fileImgList = fileList;
},
//图片上传成功的回调
handleSuccess(response, file, fileList) {
    this.fileImgList = fileList;
},
//执行提交图片拼接字段的方法
submitImg(){
    //在执行此方法时,可以对图片的路径进行拼接,最终拿到想要的数据
    if (this.fileImgList && this.fileImgList.length) {
        this.eqForm.imageUrl = '';
        this.fileImgList.forEach((file, fIndex) => {
            if (fIndex != this.fileImgList.length - 1) {
                this.eqForm.imageUrl += file.url + ',';
            } else {
                this.eqForm.imageUrl += file.url;
            }
        })
    }
},


报错:

java.lang.RuntimeException: java.io.IOException: Corrupt form data: premature ending
	at com.jfinal.upload.MultipartRequest.wrapMultipartRequest(MultipartRequest.java:126)
	at com.jfinal.upload.MultipartRequest.<init>(MultipartRequest.java:58)
	at com.jfinal.core.Controller.getFiles(Controller.java:872)
	at com.jfinal.core.Controller.getFile(Controller.java:877)
	at com.l2qq.qiniu.ImgUploadController.index(ImgUploadController.java:13)
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
	at java.base/java.lang.reflect.Method.invoke(Method.java:578)
	at com.jfinal.aop.Invocation.invoke(Invocation.java:97)
	at com.jfinal.admin.auth.AdminAuthInterceptor.intercept(AdminAuthInterceptor.java:50)
	at com.jfinal.aop.Invocation.invoke(Invocation.java:91)
	at com.jfinal.admin.auth.IsInitialPwInterceptor.intercept(IsInitialPwInterceptor.java:17)
	at com.jfinal.aop.Invocation.invoke(Invocation.java:91)
	at com.jfinal.admin.common.CommonLogInterceptor.intercept(CommonLogInterceptor.java:45)
	at com.jfinal.aop.Invocation.invoke(Invocation.java:91)
	at com.jfinal.admin.login.LoginSessionInterceptor.intercept(LoginSessionInterceptor.java:59)
	at com.jfinal.aop.Invocation.invoke(Invocation.java:91)
	at com.jfinal.core.ActionHandler.handle(ActionHandler.java:110)
	at com.jfinal.core.JFinalFilter.doFilter(JFinalFilter.java:90)
	at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
	at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
	at io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84)
	at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)
	at io.undertow.servlet.handlers.ServletChain$1.handleRequest(ServletChain.java:68)
	at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
	at io.undertow.servlet.handlers.RedirectDirHandler.handleRequest(RedirectDirHandler.java:68)
	at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:117)
	at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
	at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)
	at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64)
	at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60)
	at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77)
	at io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43)
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
	at io.undertow.servlet.handlers.SendErrorPageHandler.handleRequest(SendErrorPageHandler.java:52)
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
	at io.undertow.servlet.handlers.SessionRestoringHandler.handleRequest(SessionRestoringHandler.java:119)
	at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:275)
	at io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:79)
	at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:134)
	at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:131)
	at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48)
	at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)
	at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:255)
	at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:79)
	at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:100)
	at io.undertow.server.Connectors.executeRootHandler(Connectors.java:387)
	at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:852)
	at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
	at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:2019)
	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1558)
	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1449)
	at org.xnio.XnioWorker$WorkerThreadFactory$1$1.run(XnioWorker.java:1280)
	at java.base/java.lang.Thread.run(Thread.java:1589)
Caused by: java.io.IOException: Corrupt form data: premature ending
	at com.oreilly.servlet.multipart.MultipartParser.<init>(MultipartParser.java:207)
	at com.oreilly.servlet.MultipartRequest.parse(MultipartRequest.java:242)
	at com.oreilly.servlet.MultipartRequest.<init>(MultipartRequest.java:180)
	at com.jfinal.upload.MultipartRequest.wrapMultipartRequest(MultipartRequest.java:107)
	... 53 more


评论区

JFinal

2023-01-30 22:07

前端的东东不太熟,我们公司用 element ui 做的文件上传直接指定了 action 就行了:

《el-upload
:action="actionUrl"
:headers="headers"
:class="form.businessLicenseFile ? 'hide':''"
list-type="picture-card"
:on-preview="handlePictureCardPreview"
:on-success="handleSuccess"
:on-remove="handleRemove"
accept="image/jpg,image/jpeg,image/png"
:before-upload="beforeUpload"
:file-list="businessLicenseList"

注意看上面的 :action="actionUrl"

其中的 actionUrl 数据如下:
export default {
data() {
return {
actionUrl: process.env.VUE_APP_BASE_API + '/system/upload?type=customer',
....
}
}
}

fmpoffice

2023-01-30 22:10

@JFinal 已解决,并更新了本文解决办法

ipan

2023-11-13 22:23

这是怎么解决的?

ipan

2023-11-13 22:37

解决了
HttpEntity entity = builder.setCharset(CharsetUtils.get("UTF-8")).build();
使用apache http改成HttpEntity entity = builder.build(); 就正常了

ipan

2023-11-13 22:37

解决了
HttpEntity entity = builder.setCharset(CharsetUtils.get("UTF-8")).build();
使用apache http改成HttpEntity entity = builder.build(); 就正常了

热门反馈

扫码入社