Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Download a string as .txt file in React

I have a string which needs to be downloaded in a txt file when click on a button. How can this be implemented using React?

like image 354
Akash Sateesh Avatar asked Jun 20 '17 14:06

Akash Sateesh


People also ask

How do I download text from react native?

Enter the text in the input field and click Download txt , this will download a txt with the contents you entered in the input. This solution creates a new Blob object of the text MIME type and attaches it to the href of a temporary anchor ( <a> ) element which is then triggered programmatically.

How do I download data from React?

Use the download Attribute to Download Files in React Typically, web developers use the anchor element <a> to navigate another page. The <a> element also accepts the download attribute. It tells the browser to save the file located at the specified URL instead of changing the URL.

How do I give a download option in React JS?

To download a file with React. js, we can add the download attribute to an anchor element. We just add the download prop to do the download. If we don't want to use an anchor element, we can also use the file-saver package to download our file.


1 Answers

Here's a working example. Enter the text in the input field and click Download txt, this will download a txt with the contents you entered in the input.

This solution creates a new Blob object of the text MIME type and attaches it to the href of a temporary anchor (<a>) element which is then triggered programmatically.

A Blob object represents a file-like object of immutable, raw data. Blobs represent data that isn't necessarily in a JavaScript-native format.


class MyApp extends React.Component {    downloadTxtFile = () => {      const element = document.createElement("a");      const file = new Blob([document.getElementById('myInput').value], {type: 'text/plain'});      element.href = URL.createObjectURL(file);      element.download = "myFile.txt";      document.body.appendChild(element); // Required for this to work in FireFox      element.click();    }        render() {      return (        <div>          <input id="myInput" />          <button onClick={this.downloadTxtFile}>Download txt</button>        </div>      );    }  }    ReactDOM.render(<MyApp />, document.getElementById("myApp"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>  <script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>  <div id="myApp"></div>

This answer was derived from thanhpk's post.

like image 160
Chris Avatar answered Sep 19 '22 19:09

Chris