Stream & Blob

Upload

  • In order to pass the binary data to the server, the content type- multipart/form-data must be required

  • The multipart/form-data content type is designed to allow for the transmission of binary data, such as files, over HTTP. With this content type, the data in the request body is divided into multiple parts, each identified by a unique boundary string. Each part contains a header and a body, where the body contains the binary data of the file.

const url = `${process.env.REACT_APP_IMAGE_SERVICE_URL}/api/images`;
      const formData = new FormData();
      formData.append("file", file);
      formData.append("type", "hi");
      const { data } = await axios.post(url, formData);
<form action="/upload" method="post" enctype="multipart/form-data">
    <input type="text" name="text" value="text default" />
    <input type="file" name="file1" />
    <input type="file" name="file2" />
    <button type="submit">Submit</button>
</form>

Streaming

  • For handling stream, e.g: server sent event, it is needed to handle it chunk by chunk and monitor its progress

  • Here are examples of fetch and axios version of handling streaming

Blob / File

  • For handling file with authorization, there are several ways

  • Data Url

    • Can be used for download file without uploading to server

    • The format is

    • Media type: mime type, e.g: image/png

    • data: the encoded data in base64 format which is converted from file binary data

    Server Url

    • File url that uploaded to server

    • Streaming can be allowed when using server url to download file

    • If authentication is needed, the hash can be get from api firstly, and then combine with server url to obtain the file, e.g: https://backend.com/test.txt?code=xxxxxx

    Blob (Binary large object)

    • Blob data is a file-like object of immutable, raw data; they can be read as text or binary data, or converted into stream

    • When the server api return binary file (e.g: file), the endpoint is actually a file url

    • Sometimes, we need to fetch data instead of using a tag with server url to download file directly, for example: need to pass token into header

    • We need to get the blob data from response, make good use of blob data to create another url to new a tag to download file

  • Here is the download example

Last updated

Was this helpful?