首页 > 解决方案 > 生产问题 - 错误:由以下原因引起:org.apache.commons.fileupload.MultipartStream$MalformedStreamException:流意外结束

问题描述

我面临以下在生产服务器上上传文件的问题。以下是堆栈跟踪:

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.web.multipart.MultipartException: Could not parse multipart servlet request; nested exception is org.apache.commons.fileupload.FileUploadBase$IOFileUploadException: Processing of multipart/form-data request failed. Stream ended unexpectedly
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:943)
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:833)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:807)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
    at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85)
    at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:129)
    at com.ebuy.db.AddCustomHeader.doFilter(AddCustomHeader.java:50)
    at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
    at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
    at com.microsoft.applicationinsights.web.internal.WebRequestTrackingFilter.doFilter(WebRequestTrackingFilter.java:143)
    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.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
    at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
    at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131)
    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.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50)
    at io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43)
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
    at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
    at org.wildfly.extension.undertow.deployment.GlobalRequestControllerHandler.handleRequest(GlobalRequestControllerHandler.java:68)
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
    at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:292)
    at io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:81)
    at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:138)
    at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:135)
    at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48)
    at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)
    at org.wildfly.extension.undertow.security.SecurityContextThreadSetupAction.lambda$create$0(SecurityContextThreadSetupAction.java:105)
    at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1508)
    at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1508)
    at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1508)
    at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1508)
    at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:272)
    at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:81)
    at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:104)
    at io.undertow.server.Connectors.executeRootHandler(Connectors.java:326)
    at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:812)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
Caused by: org.springframework.web.multipart.MultipartException: Could not parse multipart servlet request; nested exception is org.apache.commons.fileupload.FileUploadBase$IOFileUploadException: Processing of multipart/form-data request failed. Stream ended unexpectedly
    at org.springframework.web.multipart.commons.CommonsMultipartResolver.parseRequest(CommonsMultipartResolver.java:165)
    at org.springframework.web.multipart.commons.CommonsMultipartResolver.resolveMultipart(CommonsMultipartResolver.java:142)
    at org.springframework.web.servlet.DispatcherServlet.checkMultipart(DispatcherServlet.java:1070)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:912)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:876)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:931)
    ... 50 more
Caused by: org.apache.commons.fileupload.FileUploadBase$IOFileUploadException: Processing of multipart/form-data request failed. Stream ended unexpectedly
    at org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:359)
    at org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(ServletFileUpload.java:126)
    at org.springframework.web.multipart.commons.CommonsMultipartResolver.parseRequest(CommonsMultipartResolver.java:158)
    ... 55 more
Caused by: org.apache.commons.fileupload.MultipartStream$MalformedStreamException: Stream ended unexpectedly
    at org.apache.commons.fileupload.MultipartStream$ItemInputStream.makeAvailable(MultipartStream.java:964)
    at org.apache.commons.fileupload.MultipartStream$ItemInputStream.read(MultipartStream.java:887)
    at java.io.InputStream.read(InputStream.java:101)
    at org.apache.commons.fileupload.util.Streams.copy(Streams.java:94)
    at org.apache.commons.fileupload.util.Streams.copy(Streams.java:64)
    at org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:354)
    ... 57 more

我已经使用 spring MVC CommonsMultipartResolver 来上传文件。Spring Framework 版本为 4.0.0.RELEASE 应用服务器:JBoss EAP 7.1

JSP 代码:

          <form name="fnm" method="post" action="" enctype="multipart/form-data">
             
            <input type=hidden name="bt_logistic_company" value="<%=billTracker.getBt_logistic_company()%>">                                                                
            <%-- <input type=hidden name="bt_material_contract" value="<%=billTracker.getBt_material_contract()%>"> --%>
            <input type=hidden name="bt_file_name1" value="<%=Utility.blankIfEmpty(billTracker.getBt_file_name1())%>">
            <input type=hidden name="bt_files1_binary" value="<%=Utility.blankIfEmpty(billTracker.getBt_files1_binary())%>">
            
            <input type=hidden name="bt_file_name2" value="<%=Utility.blankIfEmpty(billTracker.getBt_file_name2())%>">
            <input type=hidden name="bt_files2_binary" value="<%=Utility.blankIfEmpty(billTracker.getBt_files2_binary())%>">
            
            <input type=hidden name="bt_file_name3" value="<%=Utility.blankIfEmpty(billTracker.getBt_file_name3())%>">
            <input type=hidden name="bt_files3_binary" value="<%=Utility.blankIfEmpty(billTracker.getBt_files3_binary())%>">
            
            <input type=hidden name="bt_file_name4" value="<%=Utility.blankIfEmpty(billTracker.getBt_file_name4())%>">
            <input type=hidden name="bt_files4_binary" value="<%=Utility.blankIfEmpty(billTracker.getBt_files4_binary())%>">
            
            <input type=hidden name="bt_file_name5" value="<%=Utility.blankIfEmpty(billTracker.getBt_file_name5())%>">
            <input type=hidden name="bt_files5_binary" value="<%=Utility.blankIfEmpty(billTracker.getBt_files5_binary())%>">
            
            <table border="0" cellpadding="0" cellspacing="0" width="70%" align=center>
                <tr>
                    <td width="100%" bgcolor="#000000">
                        <table border="0" cellspacing="1" width="100%">
                            
                            <tr>
                                <td width="25%" class="greentitle" nowrap> &nbsp;Vendor Code</td>
                                <td width="25%" class=data colspan="1" >&nbsp;<input type="text" name="bt_sup_code" size="20" maxlength="50" value="<%=bt_sup_code%>" readOnly>&nbsp;</td>
                                <td width="25%"  class="greentitle" nowrap> &nbsp;Vendor Name</td>
                                <td width="25%" class=data colspan="1" >&nbsp;<input type="text" name="bt_sup_name" size="26" maxlength="50" value="<%=bt_sup_name%>" readOnly>&nbsp;</td>
                            </tr>
                            <tr>
                                <td  width="25%" class="greentitle" nowrap> &nbsp;Bills Tracker ID</td>
                                <td width="25%" class=data colspan="1" >&nbsp;<input type="text" name="bt_bill_tracker_id" size="20" maxlength="50" value="<%=billTracker.getBt_bill_tracker_id()%>" readOnly>&nbsp;</td>   
                                <td  width="25%" class="greentitle" nowrap> &nbsp;Invoice Number</td>
                                <td width="25%" class=data colspan="1" >&nbsp;<input type="text" name="bt_invoice_no" size="20" maxlength="50" value="<%=billTracker.getBt_invoice_no()%>" readOnly>&nbsp;</td>                                                             
                            </tr>
                            <tr>
                                <td  width="25%" class="greentitle" nowrap> &nbsp;Credit Invoice Number</td>
                                <td width="75%" class=data colspan="3" >&nbsp;<input type="text" name="bt_credit_invoice" size="20" maxlength="50" value="<%=Utility.blankIfEmpty(billTracker.getBt_credit_invoice())%>" readOnly>&nbsp;</td>
                            </tr>
                            <tr>
                                <td  width="25%" class="greentitle" nowrap> &nbsp;Purchase Order No.</td>
                                <td width="25%" class=data colspan="1" >&nbsp;<input type="text" name="bt_purchase_order_no" size="20" maxlength="50" value="<%=Utility.blankIfEmpty(billTracker.getBt_purchase_order_no())%>" readOnly><a href="javascript:windowOpener_getOrderDetails();"><img src='../images/pick1.gif' alt="purchaseorderno" width="15" height="15" border=0></a>&nbsp;</td>   
                                <td  width="25%" class="greentitle" nowrap> &nbsp;Project No.</td>
                                <td width="25%" class=data colspan="1" >&nbsp;<input type="text" name="bt_project_number" size="20" maxlength="50" value="<%=Utility.blankIfEmpty(billTracker.getBt_project_number())%>" readOnly>&nbsp;</td>                                                               
                            </tr>
                            <tr>
                                <td  width="25%" class="greentitle" nowrap> &nbsp;Warehouse Code</td>
                                <td width="25%" class=data colspan="1" >&nbsp;<input type="text" name="bt_warehouse_code" size="20" maxlength="50" value="<%=Utility.blankIfEmpty(billTracker.getBt_warehouse_code())%>" readOnly>&nbsp;</td>
                                <td  width="25%" class="greentitle" nowrap> &nbsp;Warehouse Name</td>
                                <td width="25%" class=data colspan="1" >&nbsp;<input type="text" name="bt_warehouse_name" size="20" maxlength="50" value="<%=Utility.blankIfEmpty(billTracker.getBt_warehouse_name())%>" readOnly>&nbsp;</td>                                                               
                            </tr>
                            <!-- <tr>
                                <td width="25%" class="greentitle" nowrap> &nbsp;Material/Contract</td> 
                                <td width="25%" class="data" colspan="1">&nbsp;<input type="text" name="bt_material_contract" size="20" maxlength="50" value=""></td>
                                <td width="25%"  class="greentitle" nowrap> &nbsp;Invoice No</td>
                                <td width="25%" class="data" colspan="1">&nbsp;<input type="text" name="bt_invoice_no" size="20" maxlength="50" value=""></td>                                                              
                            </tr>   -->
                            <tr>
                                <td  width="25%" class="greentitle" nowrap> &nbsp;Invoice Date</td>
                                <!-- <td width="25%" class="data" colspan="1">&nbsp;<input type="text" name="bt_invoice_date" size="20" maxlength="50" value=""></td>  -->
                                <td width="25%" class=data colspan="1">&nbsp;<input type=text name="bt_invoice_date" size=10 maxlength=15 value="<%=Utility.blankIfEmpty(billTracker.getBt_invoice_date())%>" ><a href="javascript:show_calendar('fnm.bt_invoice_date');" ><img src='/EBUY/gif/pick1.gif' alt="invoicedate" width="15" height="15" border=0></a></td>   
                                <td  width="25%" class="greentitle" nowrap> &nbsp;Invoice Amount</td>
                                <td width="25%" class="data" colspan="1">&nbsp;<input type="text" name="bt_invoice_amount" size="20" maxlength="50" value="<%=Utility.blankIfEmpty(billTracker.getBt_invoice_amount())%>" ></td>                                                            
                            </tr>
                            <tr>
                                <td  width="25%" class="greentitle" nowrap> &nbsp;Credit Invoice Date</td>
                                <td width="25%" class=data colspan="1"><input type=text name="bt_credit_invoice_date" size=10 maxlength=15 value="<%=Utility.blankIfDate(billTracker.getBt_credit_invoice_date())%>" ><a href="javascript:show_calendar('fnm.bt_credit_invoice_date');" ><img src='/EBUY/gif/pick1.gif' alt="creditinvoicedate" width="15" height="15" border=0></a></td>
                                <!-- <td width="25%" class="data" colspan="1">&nbsp;<input type="text" name="bt_credit_invoice_date" size="20" maxlength="50" value=""></td>  -->
                                <td  width="25%" class="greentitle" nowrap> &nbsp;Credit Invoice Amount</td>
                                <td width="25%" class="data" colspan="1">&nbsp;<input type="text" name="bt_credit_invoice_amount" size="20" maxlength="50" value="<%=Utility.blankIfEmpty(billTracker.getBt_credit_invoice_amount())%>"></td>                                                               
                            </tr>
                            <tr>
                                    
                                <td  width="25%" class="greentitle" nowrap> &nbsp;Total No. of pages</td>
                                <td width="25%" class="data" colspan="1">&nbsp;<input type="text" name="bt_total_pages" size="20" maxlength="50" value="<%=Utility.blankIfEmpty(billTracker.getBt_total_pages())%>"></td>
                                <td  width="25%" class="greentitle" nowrap> &nbsp;Contact Person</td>
                                <td width="25%" class="data" colspan="1">&nbsp;<input type="text" name="bt_contact_person" size="20" maxlength="50" value="<%=Utility.blankIfEmpty(billTracker.getBt_contact_person())%>"></td>                                                             
                            </tr>
                            <tr>                                        
                                <td  width="25%" class="greentitle" nowrap> &nbsp;Contact Number</td>
                                <td width="25%" class="data" colspan="1">&nbsp;<input type="text" name="bt_contact_number" size="20" maxlength="50" value="<%=Utility.blankIfEmpty(billTracker.getBt_contact_number())%>"></td> 
                                <td  width="25%" class="greentitle" nowrap> &nbsp;Contact Email ID</td>
                                <td width="25%" class="data" colspan="3">&nbsp;<input type="text" name="bt_contact_email" size="20" maxlength="50" value="<%=Utility.blankIfEmpty(billTracker.getBt_contact_email())%>"></td>                                                           
                            </tr>
                            <tr>                                    
                                <td  width="25%" class="greentitle" nowrap>&nbsp;<span style="color: red;font-size: 13px;">*</span>&nbsp;Order Type</td>                
                                <td  class=data colspan=1 width="25%">&nbsp;
                                    <select id="bt_material_contract" name="bt_material_contract" onchange="getOrderTypeDetails('','')" value="<%=Utility.blankIfEmpty(billTracker.getBt_material_contract())%>">
                                    </select>
                                </td>
                                <td width="25%" class="greentitle" nowrap>&nbsp;&nbsp;Order Type Details</td> 
                                <td  class=data colspan=1 width="25%">&nbsp;
                                    <select id="bt_order_type_details" name="bt_order_type_details" value="<%=Utility.blankIfEmpty(billTracker.getBt_order_type_details())%>">
                                    </select>
                                </td>
                            </tr>
                            <tr>
                                <td  width="25%" class="greentitle" nowrap> &nbsp;File Upload 1</td>
                                <td class="data" colspan="3"><input type = file name = "bt_files1"><a href='javascript:downloadFile("1","<%=billTracker.getBt_file_name1()%>","<%=billTracker.getBt_sup_code()%>","<%=billTracker.getBt_bill_tracker_id()%>","<%=billTracker.getBt_invoice_no()%>");'><%=Utility.blankIfEmpty(billTracker.getBt_file_name1())%></td>                                                                                        
                            </tr>
                            <tr>
                                <td  width="25%" class="greentitle" nowrap> &nbsp;File Upload 2</td>
                                <td class="data" colspan="3"><input type = file name = "bt_files2"><a href='javascript:downloadFile("2","<%=billTracker.getBt_file_name2()%>","<%=billTracker.getBt_sup_code()%>","<%=billTracker.getBt_bill_tracker_id()%>","<%=billTracker.getBt_invoice_no()%>");'><%=Utility.blankIfEmpty(billTracker.getBt_file_name2())%></td>                                                                
                            </tr>
                            <tr>
                                <td  width="25%" class="greentitle" nowrap> &nbsp;File Upload 3</td>
                                <td class="data" colspan="3"><input type = file name = "bt_files3"><a href='javascript:downloadFile("3","<%=billTracker.getBt_file_name3()%>","<%=billTracker.getBt_sup_code()%>","<%=billTracker.getBt_bill_tracker_id()%>","<%=billTracker.getBt_invoice_no()%>");'><%=Utility.blankIfEmpty(billTracker.getBt_file_name3())%></td>
                            </tr>
                            <tr>
                                <td  width="25%" class="greentitle" nowrap> &nbsp;File Upload 4</td>
                                <td class="data" colspan="3"><input type = file name = "bt_files4"><a href='javascript:downloadFile("4","<%=billTracker.getBt_file_name4()%>","<%=billTracker.getBt_sup_code()%>","<%=billTracker.getBt_bill_tracker_id()%>","<%=billTracker.getBt_invoice_no()%>");'><%=Utility.blankIfEmpty(billTracker.getBt_file_name4())%></td>
                            </tr>
                            <tr>
                                <td  width="25%" class="greentitle" nowrap> &nbsp;File Upload 5</td>
                                <td class="data" colspan="3"><input type = file name = "bt_files5"><a href='javascript:downloadFile("5","<%=billTracker.getBt_file_name5()%>","<%=billTracker.getBt_sup_code()%>","<%=billTracker.getBt_bill_tracker_id()%>","<%=billTracker.getBt_invoice_no()%>");'><%=Utility.blankIfEmpty(billTracker.getBt_file_name5())%></td>
                            </tr>
                            
                            <tr>
                                <td width="100%" bgcolor="#FFFFFF" colspan="4" align=right>
                                    <strong><a href="javascript:get('Save');" style="text-decoration: none; color: rgb(0,0,255); font-family: Verdana; font-size: 8pt">Update</a></strong>
                                </td>
                            </tr>
                        </table>
                    </td>
                </tr>
                
                </table>
                <br><br>
                                
        <input type=hidden name=mode>
        <input type=hidden name=hidden>
        
        <!-- Parameters for Session - Start -->
                <input type="hidden" name="userId" value="<%=userId%>">
                <input type="hidden" name="bizId" value="<%=bizId%>">
                <input type="hidden" name="supId" value="<%=supId%>">
                <input type="hidden" name="BizCode" value="<%=bizId%>">
                <input type="hidden" name="userName" value="<%=userName%>">
                <input type="hidden" name="role" value="<%=role%>">
                <input type="hidden" name="userReference" value="<%=userReference%>">

                <input type="hidden" name="module" value="<%=module%>" >
                <input type="hidden" name="gRoleId" value="<%=gRoleId%>">
                <input type="hidden" name="ErrorCode" value="" >
        <!-- Parameters for Session - End -->
</form>  

JavaScript:

    document.fnm.action = "../updateBillTracker";
    document.fnm.submit();

在控制器类中:

@RequestMapping(value="/updateBillTracker")
    public String updateBillTracker(BillTracker  billTracker, HttpServletRequest request, Model model) throws WriterException, IOException
    {
        
.....       
                ArrayList <BillTracker> al = new ArrayList<BillTracker>();
                al.add(billTracker);
                BillTracker a = billTrackerService.insertBillsTracker(al, request);

.....
    }

在服务类中:

@Override
public BillTracker insertBillsTracker(ArrayList<BillTracker> al, HttpServletRequest request) {
    return billTrackerDao.insertBillsTracker(al, request);
}

在 DAO 类中:

public BillTracker insertBillsTracker(ArrayList<BillTracker> al, HttpServletRequest request) {

.....


if(al.get(i).getBt_files1() == null || al.get(i).getBt_files1().isEmpty())
                {   
                    System.out.println("if...file 1");
                    st.setString(19, al.get(i).getBt_file_name1());
                    try
                    {
                        st.setBinaryStream(20, Utility.base64ToInputStream(al.get(i).getBt_files1_binary()), Utility.base64ToInputStream(al.get(i).getBt_files1_binary()).available());
                    }
                    catch(Exception e)
                    {
                        st.setNull(20, java.sql.Types.VARBINARY);
                    }
                }               
                else 
                { 
                    System.out.println("else... file1");
                    al.get(i).setBt_file_name1(al.get(i).getBt_files1().getOriginalFilename());
                    st.setString(19, al.get(i).getBt_file_name1());
                    st.setBinaryStream(20, al.get(i).getBt_files1().getInputStream(), al.get(i).getBt_files1().getInputStream().available());
                    al.get(i).setBt_files1_binary(Utility.convertToBase64String(al.get(i).getBt_files1().getInputStream()));
                }
                if(al.get(i).getBt_files2() == null || al.get(i).getBt_files2().isEmpty())
                {
                    System.out.println("if...file 2");
                    st.setString(21, al.get(i).getBt_file_name2());
                    try
                    {
                        st.setBinaryStream(22, Utility.base64ToInputStream(al.get(i).getBt_files2_binary()), Utility.base64ToInputStream(al.get(i).getBt_files2_binary()).available());
                    }
                    catch(Exception e)
                    {
                        st.setNull(22, java.sql.Types.VARBINARY);
                    }
                }               
                else
                { 
                    System.out.println("else... file2");
                    al.get(i).setBt_file_name2(al.get(i).getBt_files2().getOriginalFilename());
                    st.setString(21, al.get(i).getBt_file_name2());
                    st.setBinaryStream(22, al.get(i).getBt_files2().getInputStream(), al.get(i).getBt_files2().getInputStream().available());
                    al.get(i).setBt_files2_binary(Utility.convertToBase64String(al.get(i).getBt_files2().getInputStream()));
                }

实用方法:

    public static String convertToBase64String(InputStream inputStream) throws IOException {
    
            try {
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                int reads = inputStream.read();
    
                while (reads != -1) {
                      baos.write(reads);
                      reads = inputStream.read();
                }
    
                byte[] decodedBytes = baos.toByteArray();
                String encodedString = DatatypeConverter.printBase64Binary(decodedBytes);
                return encodedString;
          } catch (Exception ex) {
              log.error("Exception in convertToBase64String", ex);
                return null;
          }
    
        }

public static String convertToBase64String(InputStream inputStream) throws IOException {

        try {
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            int reads = inputStream.read();

            while (reads != -1) {
                  baos.write(reads);
                  reads = inputStream.read();
            }

            byte[] decodedBytes = baos.toByteArray();
            String encodedString = DatatypeConverter.printBase64Binary(decodedBytes);
            return encodedString;
      } catch (Exception ex) {
          log.error("Exception in convertToBase64String", ex);
            return null;
      }

    }

它在测试和开发环境中运行良好,仅在生产服务器上抛出错误。

我该如何调试这个问题?

注意:它仅在更新时产生问题。在插入时,它工作正常。

标签: javaspringjspmultipartform-data

解决方案


推荐阅读