Giter Club home page Giter Club logo

vue-uploader-solutions's Introduction

Vue uploader solutions

Vue上传的解决方案

目前主要处理 vue-simple-uploader 的方案,基于 vue-simple-uploader 封装了可以分片、秒传及断点续传的上传插件

预览:https://shady-xia.github.io/vue-uploader-solutions

基于vue3的版本:https://github.com/shady-xia/vue-uploader-solutions-next

文章

该仓库有对应的文章进行分析:

基于vue-simple-uploader封装文件分片上传、秒传及断点续传的全局上传插件

vue-simple-uploader 常见问题整理

本地调试

前端服务

npm install

npm start
# or
npm run serve

前端服务默认打开8080端口

node服务端

cd server
npm install
npm run server

node服务会打开3000端口,临时文件存在 tmp 目录下,上传成功的文件存在 uploads 目录下

插件的封装及使用

GlobalUploader

GlobalUploader.vue 为基于 vue-simple-uploader 二次封装的上传插件,源码路径为 /vue-simple-uploader/GlobalUploader.vue

它有两种使用方式:

通过bus作为全局组件使用

作为全局上传组件使用时,将组件注册在App.vue中,通过 Event Bus 的方式调用插件。

使用场景为:上传器为整个网站级别的,切换路由时不打断上传流程,上传窗口始终存在于网站右下角。

打开上传器

调用Bus.$emit('openUploader'),打开上传器,弹出选择文件窗口,该函数有两个参数:

  • params:传给服务端的额外参数
  • options:上传选项,目前支持 target、testChunks、mergeFn、accept
Bus.$emit('openUploader', {
  params: {
    page: 'home'
  },
  options: {
    target: 'http://10.0.0.10'
  }
})

Bus Events

  • fileAdded:文件选择后的回调
  • fileSuccess:文件上传成功的回调
// 文件选择后的回调
Bus.$on('fileAdded', () => {
  console.log('文件已选择')
})

// 文件上传成功的回调
Bus.$on('fileSuccess', () => {
  console.log('文件上传成功')
})

作为普通组件在单个页面中使用

使用场景为:在单个页面中使用上传器

props:

  • global:请务必设置为 false,代表非全局
  • params:(同用法一)传给服务端的额外参数
  • options:(同用法一)上传选项,目前支持 target、testChunks、mergeFn、accept

events:

  • fileAdded:文件选择后的回调
  • fileSuccess:文件上传成功的回调
 <global-uploader
    :global="false"
    :params="{page: 'home'}"
    :options="{target: 'http://10.0.0.10'}"
    @fileAdded="fileAdded"
 />

其他上传器

vue-webuploader(已不推荐)

见文章: Vue2.0结合webuploader实现文件分片上传

License

请捍卫自己作为劳动者的权利

LICENSE 996.icu

vue-uploader-solutions's People

Contributors

shady-xia avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

vue-uploader-solutions's Issues

关于上传状态

项目中如何修改上传状态值 例如一开始是暂停了文件上传是校验MD5而不是暂停

萌新求教

大佬。我现在在使用vue-simple-uploader。我是萌新,求帮忙
1.options里我想带参传输,所以我用了data,但是我想在data中引用现在文件对象里的id,我应该怎么设置?
2.每次我发送请求的时候,
image都会有个chunk分片,我怎么能阻止这个请求的发送?
3.为了解决问题1,我尝试在@file-added里添加方法,在方法中动态设置options,但是没有成功,请求的时候,file流变成了一个对象,请问我应该怎么办~~

辛苦大佬,我好苦恼啊

请问一下,文件上传失败后再点击重试,文件状态为何是等待中

版本信息:
"vue": "^2.5.17",
"vue-simple-uploader": "^0.7.6",

// 每个文件传输给后端之后,返回的信息
onFileSuccess(rootFile, file, response, chunk) {
let res = JSON.parse(response)
if (res.code == 10000) {
// 服务端自定义的错误(即http状态码为200,但是是错误的情况),这种错误是Uploader无法拦截的
this.error(res.message)
// 文件状态设为“失败”
// this.statusSet(file.id, 'failed')
file.completed = false
file.error = true
file.waiting = false
file.chunks = []
file.testChunks = false
}
this.fileList = this.$refs['uploader'].fileList
},

image
点击重试后,文件状态变为等待中而不是上传失败
image

如何禁用拖拽文件夹

最近收到禁用拖拽文件夹的需求,没有找到对应的api可以禁用;然后我发现,这边默认上传文件夹也是上传的文件夹内部的文件,那么我现在的做法是判断path;如果path内有‘/',我会视为文件夹,然后忽略内部的file;在fileAdded的时候
if (file.relativePath.indexOf('/') != '-1') {
// 存在'/'说明是文件夹
file.ignored = true;
} else {
}
那么我在想,可能是因为我对这个不熟悉,不知道作者大大有没有比较优雅的解决方式

关于总之上传

请教下 我在一个页面调用这个组件,如果在跳到其他页面,上传还在继续,但是上传了多少那个进度条没有了,怎么处理

有没有关闭分片上传的option?

目前初始阶段不用做分片上传,后续可能会做,但是想用这个组件的话,好像没有找到关闭分片上传的选项?请问怎么操作?

Property or method "attrs" is not defined on the instance but referenced during render

这个怎么解决? 那些值都提示出来了
Property or method "attrs" is not defined on the instance but referenced during render

Property or method "panelShow" is not defined on the instance but referenced during render. Make sure that this property is reactive, either in the data option, or for class-based components, by initializing the property. See: https://vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.

关于demo的问题

你好,首先,这个写的很好,有没有一个完整的demo可以参考一下,觉得这样描写有点乱,请教一下,这个多文件上传是怎么分片上传的?谢谢!

文件预览

您好,请问一下,插件里有预览文件的功能吗?

关于分块上传

你的代码中没有写到什么获取文件md5字符串,什么时候通知后台合并文件,是怎么做到分块上传的。在后台接口做的处理么

调用上传接口动态传参没有生效

image

image

image
你好,如上代码,我在file.params那里已经赋值了从服务端api接口返回的参数,但是在进行上传的接口那里一直没有获取到对应的参数,请问是否哪里写错了?

如果上传的文件小于chunkSize,

如果上传的文件小于chunkSize,
例如参数情况:
chunkNumber: 1
chunkSize: 5242880
currentChunkSize: 28999
totalSize: 28999
identifier: 487f7b22f68312d2c1bbc93b1aea445b
filename: 文档.xlsx
relativePath: 文档.xlsx
totalChunks: 1
id: 1111

每次上传过程的最开始,vue-simple-uploader会发送一个get请求,来问服务器我哪些分片已经上传过了,
现在问题是get请求完成了,并不会执行Post上传文件的api了,如果大文件没有问题。

How to run?

Hi, thanks for your work! But I am not familiar with how to run this project, can you help me?

关于demo中断网重传的问题

上传过程中如果出现断网情况,在上传报错的情况后连接上网络再点击《retry》会出现文件上传完成,实际上文件还在上传。。。不知道作者的项目里有没有这种情况

同文件上传无效

您好:
首先非常感谢你的案例,对我的帮助很大。
在使用中我遇到了一下问题。在文件计算MD5中,再次选择该文件上传,会没有反应。只有在计算MD5结束后才能再次选择成功。猜测是因为计算MD5在不停得读取文件导致input 读取file失败。不知道您 是否遇到过?有解决思路吗?谢谢

如果用element-admin,怎么携带token

如果用element-admin,怎么携带token?
用element-admin,它所有请求都会被request.js拦截,并添加上token,这个发送请求不是用request,怎么带token呢?

请问是否有分片上传完成的回掉函数

在分片上传时,网络错误是能够通过.fileError(rootFile, file, message, chunk)捕捉从而终止。
也有看到针对整个文件的 success 函数 .fileSuccess(rootFile, file, message, chunk)
但是好像找不到单个分片上传完成的回调函数。
也就是说分片接口正常返回200,实际上因为其他验证问题出错的时候无法拿到 res 终止上传。
求助~

关于api和demo的问题

因为百度网盘限速太厉害,所以准备自己做一个文件上传下载的可以存一些文件,以前没有接触过VUE所以很多东西不是很明白,作者提供的这三个文件我丢到了我创建的新的VUE项目里面,可以是提示APi那个文件引用错误,但似乎下面也用到了这个引用,然后我也没找到APi的相关文件,后来看到是作者没有公开,不知道作者是否可以公开一下你封装的的那个APi和那个UI的,看到你发的文章上面可以清晰的显示上传进度,但是demo里面只有一个按钮

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.