Expand my Community achievements bar.

SOLVED

Not able to insert attachment in Adaptive Form using FDM (Form Data Model)

Avatar

Level 1

Hi Team,

 

Currently we are developing Adaptive form has attachment fields in adaptative form not able to persist the attachment as Binary (ex: PDF) to Database using FDM (Form Data Model)


Adaptive form using FDM (Form Data Model)

vara_prasada_raoan1_0-1700449497147.png

 

 

 

Log Snippet:

 

19.11.2023 21:05:45.656 *INFO* [[0:0:0:0:0:0:0:1] [1700449545525] POST /content/forms/af/demoblogtest/jcr:content/guideContainer.af.internalsubmit.jsp HTTP/1.1] org.apache.sling.scripting.javascript.helper.SlingGlobal [ Envjs/1.6 (Rhino; U; Windows 10 amd64 10.0; en-US; rv:1.7.0.rc2) Resig/20070309 PilotFish/1.2.13 ]
19.11.2023 21:05:45.805 *INFO* [[0:0:0:0:0:0:0:1] [1700449545525] POST /content/forms/af/demoblogtest/jcr:content/guideContainer.af.internalsubmit.jsp HTTP/1.1] com.adobe.aemds.guide.internal.impl.utils.JsonSchemaUtils Value isn't compliant with JSON Schema. It should be string.
19.11.2023 21:05:45.805 *INFO* [[0:0:0:0:0:0:0:1] [1700449545525] POST /content/forms/af/demoblogtest/jcr:content/guideContainer.af.internalsubmit.jsp HTTP/1.1] com.adobe.aemds.guide.internal.impl.utils.JsonSchemaUtils Value isn't compliant with JSON Schema. It should be integer.
19.11.2023 21:05:45.805 *INFO* [[0:0:0:0:0:0:0:1] [1700449545525] POST /content/forms/af/demoblogtest/jcr:content/guideContainer.af.internalsubmit.jsp HTTP/1.1] com.adobe.aemds.guide.internal.impl.utils.JsonSchemaUtils Value isn't compliant with JSON Schema. It should be integer.
19.11.2023 21:05:45.999 *INFO* [[0:0:0:0:0:0:0:1] [1700449545869] POST /content/forms/af/demoblogtest/jcr:content/guideContainer.af.submit.jsp HTTP/1.1] org.apache.sling.scripting.javascript.helper.SlingGlobal [ Envjs/1.6 (Rhino; U; Windows 10 amd64 10.0; en-US; rv:1.7.0.rc2) Resig/20070309 PilotFish/1.2.13 ]
19.11.2023 21:05:46.223 *INFO* [[0:0:0:0:0:0:0:1] [1700449545869] POST /content/forms/af/demoblogtest/jcr:content/guideContainer.af.submit.jsp HTTP/1.1] org.apache.sling.scripting.javascript.helper.SlingGlobal [ Envjs/1.6 (Rhino; U; Windows 10 amd64 10.0; en-US; rv:1.7.0.rc2) Resig/20070309 PilotFish/1.2.13 ]
19.11.2023 21:05:46.452 *ERROR* [[0:0:0:0:0:0:0:1] [1700449545869] POST /content/forms/af/demoblogtest/jcr:content/guideContainer.af.submit.jsp HTTP/1.1] com.adobe.aem.dermis.util.ValueUtil Unexpected value found for type binary
19.11.2023 21:05:46.453 *ERROR* [[0:0:0:0:0:0:0:1] [1700449545869] POST /content/forms/af/demoblogtest/jcr:content/guideContainer.af.submit.jsp HTTP/1.1] com.adobe.aem.dermis.util.ValueUtil Unexpected value found for type binary
19.11.2023 21:05:46.461 *ERROR* [[0:0:0:0:0:0:0:1] [1700449545869] POST /content/forms/af/demoblogtest/jcr:content/guideContainer.af.submit.jsp HTTP/1.1] com.day.cq.wcm.core.impl.WCMDebugFilter Error during include of SlingRequestPathInfo: path='/content/forms/af/demoblogtest/jcr:content/guideContainer', selectorString='post', extension='jsp', suffix='null'



Database (table is inserted but not binary file i.e PDF)

vara_prasada_raoan1_1-1700449735190.png

 

Regards

Vara

1 Accepted Solution

Avatar

Correct answer by
Community Advisor

@vara_prasada_raoan1 

Though I am not 100% sure about the request body that you are sending to the db insertion service or if you are using anything custom, however it more depends how you are reading the data in the backend (byte array, InputStream etc.) before insertion. One example can be similar to the following (just to clarify understanding about your implementation): 

 

 

@WebServlet("/upload")
@MultipartConfig
public class FileUploadServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Part filePart = request.getPart("file"); // Assumes the form field is named "file"

        InputStream fileContent = filePart.getInputStream();
        byte[] fileBytes = fileContent.readAllBytes(); // Read the file content into a byte array

        try {
            Class.forName("com.mysql.cj.jdbc.Driver"); // Load the MySQL JDBC driver
            Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/your_database", "username", "password");

            String sql = "INSERT INTO files_table (file_data) VALUES (?)";
            PreparedStatement statement = conn.prepareStatement(sql);
            statement.setBytes(1, fileBytes); // Insert the file data as bytes

            statement.executeUpdate();
            conn.close();

            response.getWriter().println("File inserted into the database successfully");
        } catch (Exception e) {
            e.printStackTrace();
            response.getWriter().println("Error inserting file into the database");
        }
    }
}

 

you can share more insight about your current implementation for better assistance.

View solution in original post

4 Replies

Avatar

Correct answer by
Community Advisor

@vara_prasada_raoan1 

Though I am not 100% sure about the request body that you are sending to the db insertion service or if you are using anything custom, however it more depends how you are reading the data in the backend (byte array, InputStream etc.) before insertion. One example can be similar to the following (just to clarify understanding about your implementation): 

 

 

@WebServlet("/upload")
@MultipartConfig
public class FileUploadServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Part filePart = request.getPart("file"); // Assumes the form field is named "file"

        InputStream fileContent = filePart.getInputStream();
        byte[] fileBytes = fileContent.readAllBytes(); // Read the file content into a byte array

        try {
            Class.forName("com.mysql.cj.jdbc.Driver"); // Load the MySQL JDBC driver
            Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/your_database", "username", "password");

            String sql = "INSERT INTO files_table (file_data) VALUES (?)";
            PreparedStatement statement = conn.prepareStatement(sql);
            statement.setBytes(1, fileBytes); // Insert the file data as bytes

            statement.executeUpdate();
            conn.close();

            response.getWriter().println("File inserted into the database successfully");
        } catch (Exception e) {
            e.printStackTrace();
            response.getWriter().println("Error inserting file into the database");
        }
    }
}

 

you can share more insight about your current implementation for better assistance.

Avatar

Level 1

I am also facing this issue guys, i have a website https://sarkaribuzzer.com/ and now i want to have an app using firebase and due to some issue it still now working.

Avatar

Administrator

@vara_prasada_raoan1 Did you find the suggestions from users helpful? Please let us know if more information is required. Otherwise, please mark the answer as correct for posterity. If you have found out solution yourself, please share it with the community.



Kautuk Sahni