Upload examples

Basic CLI upload

curl \
  -F 'files=@./photo.png' \
  -F 'retention=24h' \
  {{ origin }}/upload

Multiple files with password

curl \
  -F 'files=@./one.png' \
  -F 'files=@./two.zip' \
  -F 'retention=1h' \
  -F 'password=secret-pass' \
  {{ origin }}/upload

Go

package main

import (
  "bytes"
  "fmt"
  "io"
  "mime/multipart"
  "net/http"
  "os"
)

func main() {
  file, err := os.Open("photo.png")
  if err != nil { panic(err) }
  defer file.Close()

  var body bytes.Buffer
  writer := multipart.NewWriter(&body)
  part, err := writer.CreateFormFile("files", "photo.png")
  if err != nil { panic(err) }
  if _, err := io.Copy(part, file); err != nil { panic(err) }
  _ = writer.WriteField("retention", "1h")
  writer.Close()

  req, err := http.NewRequest("POST", "{{ origin }}/upload", &body)
  if err != nil { panic(err) }
  req.Header.Set("Content-Type", writer.FormDataContentType())

  resp, err := http.DefaultClient.Do(req)
  if err != nil { panic(err) }
  defer resp.Body.Close()
  out, _ := io.ReadAll(resp.Body)
  fmt.Println(string(out))
}

Java 11+ HttpClient

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.file.Files;
import java.nio.file.Path;

public class UploadWarpBox {
  public static void main(String[] args) throws Exception {
    String boundary = "----WarpBoxBoundary" + System.currentTimeMillis();
    Path file = Path.of("photo.png");
    byte[] prefix = ("--" + boundary + "\r\n" +
      "Content-Disposition: form-data; name=\"retention\"\r\n\r\n" +
      "1h\r\n" +
      "--" + boundary + "\r\n" +
      "Content-Disposition: form-data; name=\"files\"; filename=\"photo.png\"\r\n" +
      "Content-Type: application/octet-stream\r\n\r\n").getBytes();
    byte[] suffix = ("\r\n--" + boundary + "--\r\n").getBytes();
    byte[] fileBytes = Files.readAllBytes(file);
    byte[] body = new byte[prefix.length + fileBytes.length + suffix.length];
    System.arraycopy(prefix, 0, body, 0, prefix.length);
    System.arraycopy(fileBytes, 0, body, prefix.length, fileBytes.length);
    System.arraycopy(suffix, 0, body, prefix.length + fileBytes.length, suffix.length);

    HttpRequest request = HttpRequest.newBuilder()
      .uri(URI.create("{{ origin }}/upload"))
      .header("Content-Type", "multipart/form-data; boundary=" + boundary)
      .POST(HttpRequest.BodyPublishers.ofByteArray(body))
      .build();
    HttpResponse<String> response = HttpClient.newHttpClient()
      .send(request, HttpResponse.BodyHandlers.ofString());
    System.out.println(response.body());
  }
}

JavaScript Node.js

import { openAsBlob } from 'node:fs';

const file = await openAsBlob('./photo.png');
const form = new FormData();
form.append('files', file, 'photo.png');
form.append('retention', '1h');

const res = await fetch('{{ origin }}/upload', {
  method: 'POST',
  body: form
});

console.log(await res.text());