npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

@oceans/transfer

v1.3.3

Published

big file transfer lib

Downloads

33

Readme

Transfer

用于文件上传下载

安装

使用 npm:

$ npm install @oceans/transfer

如何使用

先将 dist 目录中的 md5-worker.{flag}.js 和 spark-md5.js 两个文件放到可以通过网络可以访问到的地方,静态服务器或CDN

文件上传

步骤 1

// react
<input type="file" onCHange={(e) => { 
  const file = e.target.files[0]
  // todo... 继续下边的步骤   
}}/>

步骤 2

初始化 HttpClient(options)

import { HttpClient } from "@oceans/transfer"

const client = new HttpClient({
  file,
  uploadServer: 'https://xxx', 
  callbackURL: 'https://xxx', 
  getFilePath: 'https://xxx', 
})

步骤 3

form表单上传,适用于小文件上传

await client.formUpload()

大文件上传,将对文件进行分片上传(需要支持HTML5 File Api的浏览器)

await client.start()

文件下载

import { HttpClient } from "@oceans/transfer"
// downloadService 下载服务域名:https://xxx.xx.xx
// file 文件下载地址,可以传入获取文件地址接口,也可以是文件在服务器上的相对路径
HttpClient.download(downloadService, file)

接口参数说明

初始化时传入的参数为config对像

const client = new HttpClient(config)

1、上传

form表单上传,适用于小文件上传

await client.formUpload()

大文件上传,将对文件进行分片上传,一般情况下不论大小,使用此方法就好。

await client.start()

2、暂停或停止

await client.stop()

Config

{
  // 必须填写, 文件对象,像上面onChange之后可以取得一个文件对像
  file: '',

  // 必须填写,文件上传地址,写上服务器地址,如https://upload.xxx.com  
  uploadServer: '',

  // 必须填写,获取文件上传的地址,如果不是一个http链接,
  // 那么将使用服务器存放根路径加上此参数构成文件的绝对地址
  getFilePath: '',

  // 用户ID,传输任务会记录记录此ID,【可选】
  uId: '',

  // 文件上传下载过程会将进度信息发送到此接口
  callbackURL: '',
  
  // 可选,请求文件头,如果以【t-】开头,那么会将此参数传给 getFilePath, callbackURL
  // 这两个请求的请求头,并去掉【t-】
  headers: {
    't-xxx': 'xxxx' 
  },

  // 可选,可以将远程服务信息与传输服务信息进行绑定
  flag: '',

  // 可选,文件上传过程关闭了传输页,重新打开页面重传的时候,需要将传输服务的_id
  restoreId: '',
 
  // 可选,作用同上,可以传flag,此参数与restoreId两者传其一
  restoreFlag: '',
 
  // 必须填写,用于计算文件的MD5,此参数与文件重传有关,不正确配置将影响文件重传功能  
  md5Config: {
    // md5-worker.{flag}.js 文件的URL
    md5Worker: '',
 
    // spark-md5.js 文件的URL
    sparkMd5: '',

    // 可选,文件计算完md5值后回调
    onComplete: () => {  },

    // 文件md5计算方式,sample为局部计算方式,此方式计算速度很快,
    // all模式则计算整个文件,文件大时,会消耗很多时间,建议使用sample方式  
    type: 'sample'
  },

  // 可选,文件开始上传时回调
  onStart: (taskInfo) => {},

  // 可选,文件上传过程回调
  onProgress: (taskInfo) => {},

  // 可选,文件上传结束回调
  onComplete: (taskInfo) => {},

  // 可选,文件上传出错回调
  onError: (e, taskInfo) => {}  
}

3、获取任务列表

import { HttpClient } from "@oceans/transfer"

const rs = await HttpClient.listTaskAPI({
  status: '', // 任务状态,【可选】
  uId: '', // 用户ID,【可选】
  limit: 30, // 返回数据数量,每页数据条数
  page: 1, // 页码
  uploadServer: '', // 必填,服务地址 
  headers: {} // 可选,请求文件头
})

文件状态:

const TASK_STATUS = {
    WAITING: '0', // 等待
    READY: '1', // 准备接收数据
    RUNNING: '2', // 数据传输中
    SUCCESS: '3', // 任务完成
    ABORT: '4', // 目前当成暂停使用
    FAIL: '1000',
  };

4、删除任务

删除任务的同时也会将文件碎片删除

import { HttpClient } from "@oceans/transfer"

const rs = await HttpClient.deleteTaskAPI({
  id: '',
  uploadServer: '', // 必填,服务地址 
  headers: {} // 可选,请求文件头
})

5、删除文件碎片

只有在任务停止的时候才可以对文件碎片进行删除,删除文件碎片的同时也会将任务信息删除

import { HttpClient } from "@oceans/transfer"

const rs = await HttpClient.clearChunkFile({
  id: '',
  uploadServer: '', // 必填,服务地址 
  headers: {} // 可选,请求文件头
})

6、更新文件状态为停止

在上传过程中,如果页面刷新后上传实例丢失,需要重新上传,那么需要先将任务状态变更为停止后,再调用上传接口。

import { HttpClient } from "@oceans/transfer"

const rs = await HttpClient.stopTaskAPI({
  taskId: '', // 任务id
  flag: '', // 可选,如果任务ID不知道,可以使用此参数,作用见config配置参数说明
  headers: {}
  uploadServer: '', // 必填,服务地址 
  headers: {} // 可选,请求文件头
})