返回

网络文件分片断点续传,公众号素材管理,H5分享标题及图片配置杂记

前端

前言

本文将记录前端及后端是如何配合,来实现功能的demo。(代码是基于一些业务要求,所以并不适用于大众。)

正文

大文件分片

相信网上能找到很多的解决方案,大部分都是借用HTML5 File API,将大文件分成小块,然后逐块上传。

前端

// 大文件分片
function sliceFile(file, size) {
  const chunks = [];
  let start = 0;
  while (start < file.size) {
    const end = Math.min(start + size, file.size);
    chunks.push(file.slice(start, end));
    start = end;
  }
  return chunks;
}

后端

// 断点续传
function resumeUpload(Request $request) {
  $file = $request->files->get('file');
  $chunk = $request->input('chunk');
  $chunks = $request->input('chunks');
  $identifier = $request->input('identifier');

  // 将文件块存储到临时目录
  $chunkFile = fopen(sys_get_temp_dir() . '/' . $identifier . '_' . $chunk, 'wb');
  fwrite($chunkFile, $file->getContents());
  fclose($chunkFile);

  // 检查所有文件块是否都已上传
  if ($chunk == $chunks - 1) {
    // 将临时文件块合并为一个完整的文件
    $mergedFile = fopen(sys_get_temp_dir() . '/' . $identifier, 'wb');
    for ($i = 0; $i < $chunks; $i++) {
      $chunkFile = fopen(sys_get_temp_dir() . '/' . $identifier . '_' . $i, 'rb');
      fwrite($mergedFile, fread($chunkFile, filesize(sys_get_temp_dir() . '/' . $identifier . '_' . $i)));
      fclose($chunkFile);
      unlink(sys_get_temp_dir() . '/' . $identifier . '_' . $i);
    }
    fclose($mergedFile);

    // 将合并后的文件移动到指定位置
    rename(sys_get_temp_dir() . '/' . $identifier, 'uploads/' . $file->getClientOriginalName());

    // 返回成功信息
    return response()->json(['success' => true]);
  } else {
    // 返回继续上传的指示
    return response()->json(['success' => false, 'chunk' => $chunk + 1]);
  }
}

公众号素材管理

前端

// 获取公众号素材管理
function getMaterialList() {
  wx.request({
    url: 'https://api.weixin.qq.com/cgi-bin/material/batchget_material',
    data: {
      type: 'image',
      offset: 0,
      count: 20
    },
    success: function(res) {
      console.log(res.data);
    }
  });
}

后端

// 配置H5分享图片标题
function configShareImageTitle(Request $request) {
  $imageTitle = $request->input('imageTitle');
  // 将图片标题存储到数据库
  // ...

  // 返回成功信息
  return response()->json(['success' => true]);
}

结语

这就是本文档记录的内容,希望对您有所帮助。