Sending files from Micronaut applications

Intro

In this time, I will try sending files to my Micronaut application.

multipart/form-data

FileController.java

<span>...</span>
<span>@Get</span><span>(</span><span>"/send"</span><span>)</span>
<span>public</span> <span>String</span> <span>sendSample</span><span>()</span> <span>{</span>
<span>File</span> <span>file1</span> <span>=</span> <span>new</span> <span>File</span><span>(</span><span>"C:\\Files\\sample1.xlsx"</span><span>);</span>
<span>File</span> <span>file2</span> <span>=</span> <span>new</span> <span>File</span><span>(</span><span>"C:\\Files\\sample2.xlsx"</span><span>);</span>
<span>MultipartBody</span> <span>requestBody</span> <span>=</span> <span>MultipartBody</span><span>.</span><span>builder</span><span>()</span>
<span>.</span><span>addPart</span><span>(</span><span>"file1"</span><span>,</span> <span>file1</span><span>.</span><span>getName</span><span>(),</span> <span>MediaType</span><span>.</span><span>MICROSOFT_EXCEL_OPEN_XML_TYPE</span><span>,</span> <span>file1</span><span>)</span>
<span>.</span><span>addPart</span><span>(</span><span>"file2"</span><span>,</span> <span>file2</span><span>.</span><span>getName</span><span>(),</span> <span>MediaType</span><span>.</span><span>MICROSOFT_EXCEL_OPEN_XML_TYPE</span><span>,</span> <span>file2</span><span>).</span><span>build</span><span>();</span>
<span>HttpRequest</span><span><?></span> <span>req</span> <span>=</span> <span>HttpRequest</span><span>.</span><span>POST</span><span>(</span><span>"http://localhost:8086/files/sample"</span><span>,</span>
<span>requestBody</span><span>).</span><span>contentType</span><span>(</span><span>MediaType</span><span>.</span><span>MULTIPART_FORM_DATA</span><span>);</span>
<span>return</span> <span>Mono</span><span>.</span><span>from</span><span>(</span><span>httpClient</span><span>.</span><span>retrieve</span><span>(</span><span>req</span><span>)).</span><span>block</span><span>();</span>
<span>}</span>
<span>...</span>
<span>...</span>
    <span>@Get</span><span>(</span><span>"/send"</span><span>)</span>
    <span>public</span> <span>String</span> <span>sendSample</span><span>()</span> <span>{</span>
        <span>File</span> <span>file1</span> <span>=</span> <span>new</span> <span>File</span><span>(</span><span>"C:\\Files\\sample1.xlsx"</span><span>);</span>
        <span>File</span> <span>file2</span> <span>=</span> <span>new</span> <span>File</span><span>(</span><span>"C:\\Files\\sample2.xlsx"</span><span>);</span>
        <span>MultipartBody</span> <span>requestBody</span> <span>=</span> <span>MultipartBody</span><span>.</span><span>builder</span><span>()</span>
                <span>.</span><span>addPart</span><span>(</span><span>"file1"</span><span>,</span> <span>file1</span><span>.</span><span>getName</span><span>(),</span> <span>MediaType</span><span>.</span><span>MICROSOFT_EXCEL_OPEN_XML_TYPE</span><span>,</span> <span>file1</span><span>)</span>
                <span>.</span><span>addPart</span><span>(</span><span>"file2"</span><span>,</span> <span>file2</span><span>.</span><span>getName</span><span>(),</span> <span>MediaType</span><span>.</span><span>MICROSOFT_EXCEL_OPEN_XML_TYPE</span><span>,</span> <span>file2</span><span>).</span><span>build</span><span>();</span>
        <span>HttpRequest</span><span><?></span> <span>req</span> <span>=</span> <span>HttpRequest</span><span>.</span><span>POST</span><span>(</span><span>"http://localhost:8086/files/sample"</span><span>,</span>
                <span>requestBody</span><span>).</span><span>contentType</span><span>(</span><span>MediaType</span><span>.</span><span>MULTIPART_FORM_DATA</span><span>);</span>
        <span>return</span> <span>Mono</span><span>.</span><span>from</span><span>(</span><span>httpClient</span><span>.</span><span>retrieve</span><span>(</span><span>req</span><span>)).</span><span>block</span><span>();</span>
    <span>}</span>
<span>...</span>
... @Get("/send") public String sendSample() { File file1 = new File("C:\\Files\\sample1.xlsx"); File file2 = new File("C:\\Files\\sample2.xlsx"); MultipartBody requestBody = MultipartBody.builder() .addPart("file1", file1.getName(), MediaType.MICROSOFT_EXCEL_OPEN_XML_TYPE, file1) .addPart("file2", file2.getName(), MediaType.MICROSOFT_EXCEL_OPEN_XML_TYPE, file2).build(); HttpRequest<?> req = HttpRequest.POST("http://localhost:8086/files/sample", requestBody).contentType(MediaType.MULTIPART_FORM_DATA); return Mono.from(httpClient.retrieve(req)).block(); } ...

Enter fullscreen mode Exit fullscreen mode

application/vnd.openxmlformats-officedocument.spreadsheetml.sheet

To send specific type files like spreadsheets(xlsx), I get a byte array from the file and set as the request body data.

FileController.java

<span>...</span>
<span>@Get</span><span>(</span><span>"/compute"</span><span>)</span>
<span>public</span> <span>Mono</span><span><</span><span>ComputeResult</span><span>></span> <span>compute</span><span>()</span> <span>{</span>
<span>File</span> <span>file</span> <span>=</span> <span>new</span> <span>File</span><span>(</span><span>"C:\\Files\\sample1.xlsx"</span><span>);</span>
<span>byte</span><span>[]</span> <span>fileData</span> <span>=</span> <span>Files</span><span>.</span><span>readAllBytes</span><span>(</span><span>file</span><span>.</span><span>toPath</span><span>());</span>
<span>HttpRequest</span><span><?></span> <span>req</span> <span>=</span> <span>HttpRequest</span><span>.</span><span>POST</span><span>(</span><span>"http://localhost:8086/compute"</span><span>,</span>
<span>fileData</span><span>)</span>
<span>.</span><span>contentType</span><span>(</span><span>MediaType</span><span>.</span><span>MICROSOFT_EXCEL_OPEN_XML_TYPE</span><span>);</span>
<span>return</span> <span>Mono</span><span>.</span><span>from</span><span>(</span><span>httpClient</span><span>.</span><span>retrieve</span><span>(</span><span>req</span><span>)).</span><span>map</span><span>(</span><span>result</span> <span>-></span> <span>{</span>
<span>// Converting the JSON value into a class what is named ComputeResult.</span>
<span>ObjectMapper</span> <span>mapper</span> <span>=</span> <span>new</span> <span>ObjectMapper</span><span>();</span>
<span>try</span> <span>{</span>
<span>return</span> <span>mapper</span><span>.</span><span>readValue</span><span>(</span><span>result</span><span>,</span> <span>ComputeResult</span><span>.</span><span>class</span><span>);</span>
<span>}</span> <span>catch</span> <span>(</span><span>JsonProcessingException</span> <span>e</span><span>)</span> <span>{</span>
<span>return</span> <span>null</span><span>;</span>
<span>}</span>
<span>});</span>
<span>...</span>
    <span>@Get</span><span>(</span><span>"/compute"</span><span>)</span>
    <span>public</span> <span>Mono</span><span><</span><span>ComputeResult</span><span>></span> <span>compute</span><span>()</span> <span>{</span>
        <span>File</span> <span>file</span> <span>=</span> <span>new</span> <span>File</span><span>(</span><span>"C:\\Files\\sample1.xlsx"</span><span>);</span>
        <span>byte</span><span>[]</span> <span>fileData</span> <span>=</span> <span>Files</span><span>.</span><span>readAllBytes</span><span>(</span><span>file</span><span>.</span><span>toPath</span><span>());</span>
        <span>HttpRequest</span><span><?></span> <span>req</span> <span>=</span> <span>HttpRequest</span><span>.</span><span>POST</span><span>(</span><span>"http://localhost:8086/compute"</span><span>,</span>
                <span>fileData</span><span>)</span>
                <span>.</span><span>contentType</span><span>(</span><span>MediaType</span><span>.</span><span>MICROSOFT_EXCEL_OPEN_XML_TYPE</span><span>);</span>
        <span>return</span> <span>Mono</span><span>.</span><span>from</span><span>(</span><span>httpClient</span><span>.</span><span>retrieve</span><span>(</span><span>req</span><span>)).</span><span>map</span><span>(</span><span>result</span> <span>-></span> <span>{</span>
            <span>// Converting the JSON value into a class what is named ComputeResult.</span>
            <span>ObjectMapper</span> <span>mapper</span> <span>=</span> <span>new</span> <span>ObjectMapper</span><span>();</span>
            <span>try</span> <span>{</span>
                <span>return</span> <span>mapper</span><span>.</span><span>readValue</span><span>(</span><span>result</span><span>,</span> <span>ComputeResult</span><span>.</span><span>class</span><span>);</span>
            <span>}</span> <span>catch</span> <span>(</span><span>JsonProcessingException</span> <span>e</span><span>)</span> <span>{</span>
                <span>return</span> <span>null</span><span>;</span>
            <span>}</span>
        <span>});</span>
... @Get("/compute") public Mono<ComputeResult> compute() { File file = new File("C:\\Files\\sample1.xlsx"); byte[] fileData = Files.readAllBytes(file.toPath()); HttpRequest<?> req = HttpRequest.POST("http://localhost:8086/compute", fileData) .contentType(MediaType.MICROSOFT_EXCEL_OPEN_XML_TYPE); return Mono.from(httpClient.retrieve(req)).map(result -> { // Converting the JSON value into a class what is named ComputeResult. ObjectMapper mapper = new ObjectMapper(); try { return mapper.readValue(result, ComputeResult.class); } catch (JsonProcessingException e) { return null; } });

Enter fullscreen mode Exit fullscreen mode

text/json

ComputingStatusRequest.java

<span>package</span> <span>jp.masanori.dto</span><span>;</span>
<span>import</span> <span>io.micronaut.serde.annotation.Serdeable</span><span>;</span>
<span>import</span> <span>com.fasterxml.jackson.databind.PropertyNamingStrategies</span><span>;</span>
<span>import</span> <span>com.fasterxml.jackson.databind.annotation.JsonNaming</span><span>;</span>
<span>@Serdeable</span>
<span>@JsonNaming</span><span>(</span><span>PropertyNamingStrategies</span><span>.</span><span>UpperCamelCaseStrategy</span><span>.</span><span>class</span><span>)</span>
<span>public</span> <span>class</span> <span>ComputingStatusRequest</span> <span>{</span>
<span>public</span> <span>String</span> <span>RequestID</span><span>;</span>
<span>}</span>
<span>package</span> <span>jp.masanori.dto</span><span>;</span>

<span>import</span> <span>io.micronaut.serde.annotation.Serdeable</span><span>;</span>

<span>import</span> <span>com.fasterxml.jackson.databind.PropertyNamingStrategies</span><span>;</span>
<span>import</span> <span>com.fasterxml.jackson.databind.annotation.JsonNaming</span><span>;</span>

<span>@Serdeable</span>
<span>@JsonNaming</span><span>(</span><span>PropertyNamingStrategies</span><span>.</span><span>UpperCamelCaseStrategy</span><span>.</span><span>class</span><span>)</span>
<span>public</span> <span>class</span> <span>ComputingStatusRequest</span> <span>{</span>
    <span>public</span> <span>String</span> <span>RequestID</span><span>;</span>    
<span>}</span>
package jp.masanori.dto; import io.micronaut.serde.annotation.Serdeable; import com.fasterxml.jackson.databind.PropertyNamingStrategies; import com.fasterxml.jackson.databind.annotation.JsonNaming; @Serdeable @JsonNaming(PropertyNamingStrategies.UpperCamelCaseStrategy.class) public class ComputingStatusRequest { public String RequestID; }

Enter fullscreen mode Exit fullscreen mode

FileController.java

<span>...</span>
<span>@Get</span><span>(</span><span>"/status"</span><span>)</span>
<span>public</span> <span>Mono</span><span><</span><span>ComputeResult</span><span>></span> <span>getStatus</span><span>()</span> <span>{</span>
<span>ComputingStatusRequest</span> <span>requestId</span> <span>=</span> <span>new</span> <span>ComputingStatusRequest</span><span>();</span>
<span>requestId</span><span>.</span><span>RequestID</span> <span>=</span> <span>startResult</span><span>.</span><span>getRequestId</span><span>();</span>
<span>ObjectMapper</span> <span>mapper</span> <span>=</span> <span>new</span> <span>ObjectMapper</span><span>();</span>
<span>HttpRequest</span><span><?></span> <span>req</span> <span>=</span> <span>HttpRequest</span><span>.</span><span>POST</span><span>(</span><span>"http://localhost:8086/status"</span><span>,</span>
<span>mapper</span><span>.</span><span>writeValueAsString</span><span>(</span><span>requestId</span><span>))</span>
<span>.</span><span>contentType</span><span>(</span><span>MediaType</span><span>.</span><span>TEXT_JSON_TYPE</span><span>);</span>
<span>return</span> <span>Mono</span><span>.</span><span>from</span><span>(</span><span>httpClient</span><span>.</span><span>retrieve</span><span>(</span><span>req</span><span>)).</span><span>map</span><span>(</span><span>result</span> <span>-></span> <span>{</span>
<span>ObjectMapper</span> <span>mapper</span> <span>=</span> <span>new</span> <span>ObjectMapper</span><span>();</span>
<span>try</span> <span>{</span>
<span>return</span> <span>mapper</span><span>.</span><span>readValue</span><span>(</span><span>result</span><span>,</span> <span>ComputeResult</span><span>.</span><span>class</span><span>);</span>
<span>}</span> <span>catch</span> <span>(</span><span>JsonProcessingException</span> <span>e</span><span>)</span> <span>{</span>
<span>return</span> <span>null</span><span>;</span>
<span>}</span>
<span>});</span>
<span>}</span>
<span>...</span>
<span>...</span>
    <span>@Get</span><span>(</span><span>"/status"</span><span>)</span>
    <span>public</span> <span>Mono</span><span><</span><span>ComputeResult</span><span>></span> <span>getStatus</span><span>()</span> <span>{</span>
        <span>ComputingStatusRequest</span> <span>requestId</span> <span>=</span> <span>new</span> <span>ComputingStatusRequest</span><span>();</span>
        <span>requestId</span><span>.</span><span>RequestID</span> <span>=</span> <span>startResult</span><span>.</span><span>getRequestId</span><span>();</span>
        <span>ObjectMapper</span> <span>mapper</span> <span>=</span> <span>new</span> <span>ObjectMapper</span><span>();</span>
        <span>HttpRequest</span><span><?></span> <span>req</span> <span>=</span> <span>HttpRequest</span><span>.</span><span>POST</span><span>(</span><span>"http://localhost:8086/status"</span><span>,</span> 
            <span>mapper</span><span>.</span><span>writeValueAsString</span><span>(</span><span>requestId</span><span>))</span>
            <span>.</span><span>contentType</span><span>(</span><span>MediaType</span><span>.</span><span>TEXT_JSON_TYPE</span><span>);</span>
        <span>return</span> <span>Mono</span><span>.</span><span>from</span><span>(</span><span>httpClient</span><span>.</span><span>retrieve</span><span>(</span><span>req</span><span>)).</span><span>map</span><span>(</span><span>result</span> <span>-></span> <span>{</span>
            <span>ObjectMapper</span> <span>mapper</span> <span>=</span> <span>new</span> <span>ObjectMapper</span><span>();</span>
            <span>try</span> <span>{</span>
                <span>return</span> <span>mapper</span><span>.</span><span>readValue</span><span>(</span><span>result</span><span>,</span> <span>ComputeResult</span><span>.</span><span>class</span><span>);</span>
            <span>}</span> <span>catch</span> <span>(</span><span>JsonProcessingException</span> <span>e</span><span>)</span> <span>{</span>
                <span>return</span> <span>null</span><span>;</span>
            <span>}</span>
        <span>});</span>
    <span>}</span>
<span>...</span>
... @Get("/status") public Mono<ComputeResult> getStatus() { ComputingStatusRequest requestId = new ComputingStatusRequest(); requestId.RequestID = startResult.getRequestId(); ObjectMapper mapper = new ObjectMapper(); HttpRequest<?> req = HttpRequest.POST("http://localhost:8086/status", mapper.writeValueAsString(requestId)) .contentType(MediaType.TEXT_JSON_TYPE); return Mono.from(httpClient.retrieve(req)).map(result -> { ObjectMapper mapper = new ObjectMapper(); try { return mapper.readValue(result, ComputeResult.class); } catch (JsonProcessingException e) { return null; } }); } ...

Enter fullscreen mode Exit fullscreen mode

原文链接:Sending files from Micronaut applications

© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享
Life is simple.You make choices and you don't look back.
人生很简单,做了决定就不要后悔
评论 抢沙发

请登录后发表评论

    暂无评论内容