<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <title>JsonAPI for file Upload with Flutter</title>
  <link rel="self" href="https://liferay.dev/c/message_boards/find_thread?p_l_id=119785294&amp;threadId=122775034" />
  <subtitle>JsonAPI for file Upload with Flutter</subtitle>
  <id>https://liferay.dev/c/message_boards/find_thread?p_l_id=119785294&amp;threadId=122775034</id>
  <updated>2026-04-03T18:52:18Z</updated>
  <dc:date>2026-04-03T18:52:18Z</dc:date>
  <entry>
    <title>RE: JsonAPI for file Upload with Flutter</title>
    <link rel="alternate" href="https://liferay.dev/c/message_boards/find_message?p_l_id=119785294&amp;messageId=122775907" />
    <author>
      <name>Yan Paing</name>
    </author>
    <id>https://liferay.dev/c/message_boards/find_message?p_l_id=119785294&amp;messageId=122775907</id>
    <updated>2024-07-13T14:42:14Z</updated>
    <published>2024-07-13T14:40:23Z</published>
    <summary type="html">&lt;p&gt;Finally, successfully upload the file with flutter remote call to
  xxxxserviceImpl.java. Following is the code.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;static Future&amp;lt;dynamic&amp;gt; sendMessageToSchoolForSingleStudent({&lt;/p&gt;
&lt;p&gt;required int userId,&lt;/p&gt;
&lt;p&gt;required String title,&lt;/p&gt;
&lt;p&gt;required String messageBody,&lt;/p&gt;
&lt;p&gt;required File? file,&lt;/p&gt;
&lt;p&gt;}) async {&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;final String authenString = await SMPSession.getStringValue(userCredential);&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;var formData = FormData.fromMap(&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;'userId': '$userId',&lt;/p&gt;
&lt;p&gt;'title': title,&lt;/p&gt;
&lt;p&gt;'messageBody': messageBody,&lt;/p&gt;
&lt;p&gt;'file': await MultipartFile.fromFile(file!.path),&lt;/p&gt;
&lt;p&gt;},&lt;/p&gt;
&lt;p&gt;);&lt;/p&gt;
&lt;p&gt;Dio dio = Dio();&lt;/p&gt;
&lt;p&gt;var response = await dio.post(&lt;/p&gt;
&lt;p&gt;'https://yourserver/api/jsonws/customizedliferayapi.serviceimplapi/method-from-serviceimpljava',&lt;/p&gt;
&lt;p&gt;data: formData,&lt;/p&gt;
&lt;p&gt;options: Options(&lt;/p&gt;
&lt;p&gt;headers: {&lt;/p&gt;
&lt;p&gt;'Content-Type': contentTypeFile,&lt;/p&gt;
&lt;p&gt;'Charset': 'utf-8',&lt;/p&gt;
&lt;p&gt;'Authorization': '$smpAuthorizationType$authenString',&lt;/p&gt;
&lt;p&gt;},&lt;/p&gt;
&lt;p&gt;),&lt;/p&gt;
&lt;p&gt;);&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</summary>
    <dc:creator>Yan Paing</dc:creator>
    <dc:date>2024-07-13T14:40:23Z</dc:date>
  </entry>
  <entry>
    <title>JsonAPI for file Upload with Flutter</title>
    <link rel="alternate" href="https://liferay.dev/c/message_boards/find_message?p_l_id=119785294&amp;messageId=122775033" />
    <author>
      <name>Yan Paing</name>
    </author>
    <id>https://liferay.dev/c/message_boards/find_message?p_l_id=119785294&amp;messageId=122775033</id>
    <updated>2024-07-13T04:11:10Z</updated>
    <published>2024-07-13T04:06:46Z</published>
    <summary type="html">&lt;p&gt;Dear All,&lt;/p&gt;
&lt;p&gt;I am working on flutter calling liferay JsonAPI xxxxxServiceImpl.java
  Our code works for without file attachment, however if we attached
  file then it is fail and following errors are showing in log. Please
  suggest. Thank you&lt;/p&gt;
&lt;p&gt;1. Unable to deserialize object error is showing in log if we use
  blue color highlighted line
  cmdSb.write('"file":$file');&amp;nbsp;&lt;br&gt; ERROR
  [http-nio-8080-exec-30][JSONWebServiceServiceAction:126] Unable to
  deserialize object&lt;br&gt;
  &lt;br&gt; 2.&amp;nbsp;Conversion failed error is showing if we use&amp;nbsp;red color
  highlighted line cmdSb.write('"file":$filebyte');&amp;nbsp;&lt;br&gt; ERROR
  [http-nio-8080-exec-31][JSONWebServiceServiceAction:126] Conversion
  failed: [255, 216, 255, 224, 0, 16, 74, 70, 73, 70, 0, 1, 1, 0, 0, 72,
  0, 72, 0, 0, 255, 225, 4, 76, 69, 120, 105, 102, 0, 0, 77, 77, 0, 42,
  0, 0, 0, 8, 0, 12, 1, 15..............&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;class JsonSendMessageService {&lt;/p&gt;
&lt;p&gt;JsonSendMessageService();&lt;/p&gt;
&lt;p&gt;static String jsonString = '[{"/abc.messagesend/';&lt;/p&gt;
&lt;p&gt;static Future&amp;lt;dynamic&amp;gt;
  sendMessageToSchoolForSingleStudent({&lt;br&gt; &amp;nbsp; &amp;nbsp; required int
  schoolId,&lt;br&gt; &amp;nbsp; &amp;nbsp; required String title,&lt;br&gt; &amp;nbsp; &amp;nbsp; required String
  messageBody,&lt;br&gt; &amp;nbsp; &amp;nbsp; required File? file,&lt;br&gt; &amp;nbsp; }) async {&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; final StringBuffer cmdSb = StringBuffer(jsonString);&lt;br&gt; &amp;nbsp; &amp;nbsp;
  cmdSb.write('send-message":');&lt;br&gt; &amp;nbsp; &amp;nbsp;
  cmdSb.write('{"schoolId":$schoolId,');&lt;br&gt; &amp;nbsp; &amp;nbsp;
  cmdSb.write('"title":"$title",');&lt;br&gt; &amp;nbsp; &amp;nbsp;
  cmdSb.write('"messageBody":"$messageBody",');&lt;br&gt; &amp;nbsp;&lt;/p&gt;
&lt;p&gt;
  &lt;strong style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; cmdSb.write('"file":$file');&amp;nbsp;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;var fileByte = await file!.readAsBytes().then((value) {&lt;/p&gt;
&lt;p&gt;return value.cast();&lt;/p&gt;
&lt;p&gt;});&lt;/p&gt;
&lt;p&gt;
  &lt;strong style="color: red;"&gt;cmdSb.write('"file":$fileByte');&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; cmdSb.write('}}]');&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; return await SMPHttpHelper(starJsonRequest:
  cmdSb.toString()).getBody();&lt;br&gt; &amp;nbsp; }&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;class SMPHttpHelper {&lt;/p&gt;
&lt;p&gt;SMPHttpHelper({required this.starJsonRequest});&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;String starJsonRequest;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Uri getSMPUrl() {&lt;/p&gt;
&lt;p&gt;return Uri.https(smpServer, jsonInvoke);&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Future&amp;lt;dynamic&amp;gt; getBody() async {&lt;/p&gt;
&lt;p&gt;final String authenString = await SMPSession.getStringValue(userCredential);&lt;/p&gt;
&lt;p&gt;final response = await http.post(&lt;/p&gt;
&lt;p&gt;getSMPUrl(),&lt;/p&gt;
&lt;p&gt;headers: {&lt;/p&gt;
&lt;p&gt;'Content-Type': contentTypeJson,&lt;/p&gt;
&lt;p&gt;'Charset': 'utf-8',&lt;/p&gt;
&lt;p&gt;'Authorization': '$smpAuthorizationType$authenString',&lt;/p&gt;
&lt;p&gt;},&lt;/p&gt;
&lt;p&gt;body: starJsonRequest,&lt;/p&gt;
&lt;p&gt;);&lt;/p&gt;
&lt;p&gt;return await json.decode(response.body);&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Future&amp;lt;int&amp;gt; getResponseStatus() async {&lt;/p&gt;
&lt;p&gt;final String authenString = await SMPSession.getStringValue(userCredential);&lt;/p&gt;
&lt;p&gt;final response = await http.post(&lt;/p&gt;
&lt;p&gt;getSMPUrl(),&lt;/p&gt;
&lt;p&gt;headers: {&lt;/p&gt;
&lt;p&gt;'Content-Type': contentTypeJson,&lt;/p&gt;
&lt;p&gt;'Charset': 'utf-8',&lt;/p&gt;
&lt;p&gt;'Authorization': '$smpAuthorizationType$authenString',&lt;/p&gt;
&lt;p&gt;},&lt;/p&gt;
&lt;p&gt;body: starJsonRequest,&lt;/p&gt;
&lt;p&gt;);&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;return response.statusCode;&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;</summary>
    <dc:creator>Yan Paing</dc:creator>
    <dc:date>2024-07-13T04:06:46Z</dc:date>
  </entry>
</feed>
