DZone
Thanks for visiting DZone today,
Edit Profile
  • Manage Email Subscriptions
  • How to Post to DZone
  • Article Submission Guidelines
Sign Out View Profile
  • Post an Article
  • Manage My Drafts
Newsletter
Log In / Join
Refcards Trend Reports
Events Video Library
Refcards
Trend Reports

Events

View Events Video Library

Related

  • Spring Boot - How To Use Native SQL Queries | Restful Web Services
  • Develop a Spring Boot REST API in AWS: PART 4 (CodePipeline / CI/CD)
  • RESTful Web Services: How To Create a Context Path for Spring Boot Application or Web Service
  • How To Validate HTTP Post Request Body - Restful Web Services With Spring Framework | Spring Boot

Trending

  • Idempotency Under Concurrency: Why Your Application Check Isn't the Last Line of Defense
  • Java 27 Makes G1 the Default Everywhere: How to Test Your Small Containers Before You Upgrade
  • How to Migrate From C/C++ to Rust: A Practical Guide for Embedded IoT Systems
  • PII Detection Before RAG Ingestion: Screening Documents in C#

Draft This article hasn't been published, so readers can't see it.

In moderation This article is waiting for review, so readers can't see it yet.

Deleted This article has been deleted, so readers can't see it.

  1. DZone
  2. Coding
  3. Frameworks
  4. Spring Boot REST Service: Download Files

Spring Boot REST Service: Download Files

See how to download files from a Spring Boot REST service.

By 
Damodhara Reddy Palavali
·
Apr. 05, 19 · Code Snippet
Post on X (opens in a new tab) Share on LinkedIn (opens in a new tab)
56.8K Views

Join the DZone community Save articles, join the discussion, and download Refcards and Trend Reports with a free account.

Join for free Already a member? Log in

Image title

Download a File From a Spring Boot REST Service

On HBase, I was working on a REST API that could download an ingested file from a table with a JSON response. It needs to be downloaded as a JSON file from the UI. I created a REST service that downloads single and selected multiple files as ZIP files.

Below is my input, and I need to download it as a JSON file.

Image title

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

import javax.servlet.http.HttpServletResponse;

import org.apache.commons.io.IOUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
public class HbaseRestController {
 @RequestMapping(value = “/files/ {
  file_name
 }”, method = RequestMethod.GET)
 public void getFile(
  @PathVariable(“file_name”) String fileName,
  HttpServletResponse response) {
  String testJson = ” {
   \\
   r\\ n\\\” name\\\”: \\\”Jungle Gym\\\”,
   \\r\\ n\\\” age\\\”: 25\\ r\\ n
  }”;
  try {
   // get your file as InputStream
   InputStream is = new ByteArrayInputStream(testJson.getBytes());
   // copy it to response’s OutputStream
   org.apache.commons.io.IOUtils.copy(is, response.getOutputStream());
   String filename = ”attachment;” + ”filename = ”+fileName;
   response.setContentType(“application / json”);
   response.setHeader(“Content - Disposition”, “attachment; filename = ”+filename + ”.json”);
   response.flushBuffer();
   System.out.println(“Filename————— -> ”+fileName);
  } catch (IOException ex) {
   System.out.println(“Error writing file to output stream.Filename was“ + fileName + ” == > ”+ex);
   throw new RuntimeException(“IOError writing file to output stream”);
  }

 }

 @RequestMapping(value = ”/downLoadZIPFile”, method = RequestMethod.GET)
  public void downLoadSearchFiles(HttpServletResponse response) {

   Map < String, String > jsonList = new HashMap < > ();
   jsonList.put(“F101”, “ {
    \\
    r\\ n\\\” name\\\”: \\\”TEst\\\”,
    \\r\\ n\\\” age\\\”: 25\\ r\\ n
   }”);
   jsonList.put(“F102”, “ {
    \\
    r\\ n\\\” name\\\”: \\\”Jungle Gym\\\”,
    \\r\\ n\\\” age\\\”: 26\\ r\\ n
   }”);
   jsonList.put(“F103”, “ {
    \\
    r\\ n\\\” name\\\”: \\\”Jungle Gym\\\”,
    \\r\\ n\\\” age\\\”: 27\\ r\\ n
   }”);

   try {
    response.setHeader(“Pragma”, “public”);
    response.setHeader(“Expires”, “0”);
    response.setHeader(“Cache - Control”, “must - revalidate, post - check = 0, pre - check = 0”);
    response.setHeader(“Content - type”, “application - download”);
    response.setHeader(“Content - Disposition”, “attachment; filename = -JSONSearchResultsData - ” +new SimpleDateFormat(“yyyyMMdd”).format(new Date()) + ”.zip”);
    response.setHeader(“Content - Transfer - Encoding”, “binary”);
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    ZipOutputStream zipOutputStream = new ZipOutputStream(baos);
    for (Entry < String, String > entry: jsonList.entrySet()) {
     ZipEntry e = new ZipEntry(entry.getKey() + new SimpleDateFormat(“yyyyMMdd”).format(new Date()) + ”.” + ”json”);
     e.setSize(entry.getValue().length());
     e.setTime(System.currentTimeMillis());
     zipOutputStream.putNextEntry(e);

     InputStream is = new ByteArrayInputStream(entry.getValue().getBytes());
     IOUtils.copy(is, zipOutputStream);
     is.close();
     zipOutputStream.closeEntry();
    }
    zipOutputStream.close();

    byte[] zipBytes = baos.toByteArray();
    OutputStream outStream = response.getOutputStream();
    outStream.write(zipBytes);
    outStream.close();
    response.flushBuffer();
   } catch (Exception e) {}
  }
 }

Image title

Image title

Please share your comments and reviews!

REST Web Protocols Spring Framework Spring Boot Download

Opinions expressed by DZone contributors are their own.

Related

  • Spring Boot - How To Use Native SQL Queries | Restful Web Services
  • Develop a Spring Boot REST API in AWS: PART 4 (CodePipeline / CI/CD)
  • RESTful Web Services: How To Create a Context Path for Spring Boot Application or Web Service
  • How To Validate HTTP Post Request Body - Restful Web Services With Spring Framework | Spring Boot

Partner Resources

×

Comments

Loading comments

The comments didn't load

Please try again in a moment.

Likes

Loading

The next likes didn't load. Please try again.

The likes didn't load

Please try again in a moment.

See who liked this

Log in or join DZone for free to see who liked this article.

Log in Join for free
  • RSS
  • X
  • Facebook

ABOUT US

  • About DZone
  • Support and feedback
  • Community research

ADVERTISE

  • Advertise with DZone

CONTRIBUTE ON DZONE

  • Article Submission Guidelines
  • Become a Contributor
  • Core Program
  • Visit the Writers' Zone

LEGAL

  • Terms of Service
  • Privacy Policy

CONTACT US

  • 3343 Perimeter Hill Drive
  • Suite 215
  • Nashville, TN 37211
  • [email protected]

Let's be friends:

  • RSS
  • X
  • Facebook