文件压缩接口

接口描述

本接口用于上传单张图片并进行压缩处理,支持质量调整、尺寸修改、格式转换等操作,返回压缩后的文件URL或文件流。

请求信息

URL/compress
方法POST
Content-Typemultipart/form-data

请求参数

参数名类型必填默认值描述
fileFile-要压缩的文件(通过表单上传)
qualityNumber75压缩质量(0-100)
formatString目标格式(如:png/jpeg)
widthNumber目标宽度(像素)
heightNumber目标高度(像素)
rotateNumber旋转角度(0-360)
colorsNumber256颜色数量限制
responseTypeStringblob返回类型:json返回URL,其他值返回文件流

响应参数(当responseType=json时)

参数名类型描述
codeNumber状态码(0表示成功)
messageString状态描述
data.urlString压缩后的文件访问地址

请求示例


const form = new FormData();
form.append('file', fileInput.files[0]);
form.append('quality', 80);
form.append('width', 800);
form.append('responseType', 'json');
const xhr = new XMLHttpRequest();
xhr.open('POST', '/compress', true);

// 监听上传进度
xhr.upload.onprogress = (event) => {
  if (event.lengthComputable) {
    const percent = (event.loaded / event.total) * 100;
    console.log(`上传进度: ${Math.floor(percent)}%`);
  }
};

xhr.onload = () => {
  if (form.get('responseType') === 'json') {
    const res = JSON.parse(xhr.response)
    if (res.code === 0 ) {
      downloadFile(res.data.url)
    }
  } else {
    let fileName = ''
    // 获取文件名
    const contentDisposition = xhr.getResponseHeader('Content-Disposition');
    if (contentDisposition) {
      const fileNameMatch = contentDisposition.match(/filename="(.+)"/);
      if (fileNameMatch && fileNameMatch[1]) {
        fileName = decodeURIComponent(fileNameMatch[1]);
      }
    }
    // 下载blob文件
    const blob = new Blob([xhr.response], { type: 'application/octet-stream' });
    const url = URL.createObjectURL(blob);
    downloadFile(url, fileName)
  }
};
xhr.send(form);

// 下载文件
function downloadFile(url, name) {
  if (window.navigator && window.navigator.msSaveOrOpenBlob) {
    window.navigator.msSaveOrOpenBlob(url, name)
  } else {
    const a = document.createElement('a')
    a.href = url
    // 去掉url中?及?后的参数
    url= url.split('?')[0]
    if (!name) {
      name = url.split('\\').pop().split('/').pop()
    }
    // 解析文件名称,兼容中文,去除多余路径,windows路径以“\\”分隔,linux路径以“/”分隔
    a.download = name
    console.log(a.download)
    a.click()
  }
}

响应示例


{
    "code": 0,
    "message": "success",
    "data": {
        "url": "/compressed/file_123.jpg"
    }
}

注意事项