yylib-quick-mobile
Version:
yylib-quick-mobile
324 lines (296 loc) • 11.7 kB
JavaScript
import {ADDR} from '../common/RestUrl'
//import AuthToken from './authToken'
import {Toast} from 'antd-mobile';
import {isFunction} from './FunctionUtil';
import attachImg from '../common/img/icon-wenjian.png';
/**
* 文件上传工具
*/
var downloadUrl = '/icop-file/file/download?id='
//获取附件列表的url
var listUrl = '/icop-file/file/list'
//上传url
var uploadUrl = '/icop-file/file/muploadx'
//上传base64数据url
var uploadBase64Url = '/icop-file/file/uploadBase64'
var delUrl = '/icop-file/file/del'
var maxSize = 200 * 1024 //200KB
//根据附件id获取纯附件列表
var getFileListByFileIdsUrl = '/icop-file/file/getFileListByFileIds'
/**
* 文件上传
* @param itemData
* @param obj
* @param billType
* @param source
*/
function multiFilesUpLoad(obj, billType, source, callback) {
var ajax=window.YYUtils.Ajax;
var loginContext = window.YYUtils.AuthToken.getContext()
var files = []
var imgPics = []
var fileList = []
var source = source || {
sourceId: '',
sourceType: ''
}
if (obj.file) {
Toast.loading('正在上传...', 1)
var reader = new FileReader()
reader.readAsDataURL(obj.file)
reader.onload = function (e) {
var imgInfo = {}, result = this.result;
imgInfo.src = result;
imgPics.push(imgInfo);
var img = new Image();
img.src = result;
var fileContent = result;
img.onload = function () {
var singleFile = {};
singleFile.fileName = obj.file.name;
if (fileContent.length > maxSize)
fileContent = compress(this); //图片压缩
singleFile.fileSize = fileContent.length;
singleFile.fileContent = fileContent.substring(fileContent.indexOf(',') + 1);
files.push(singleFile);
var params = {
billType: billType,
sourceId: source.sourceId,
sourceType: source.sourceType,
userId: loginContext.userId,
userName: loginContext._A_P_userName,
files: files
}
ajax.postJSON(ADDR + uploadUrl, params, function (data) {
if (data.success) {
var backData = data.backData;
if (backData.length) {
for (var i = 0; i < backData.length; i++) {
var item = backData[i];
var thumbUrl = ADDR + '/' + zoomImgPath(item.filePath, '_100x100');
var originalUrl = ADDR + '/' + zoomImgPath(item.filePath);
var fileUrl = ADDR + '/' + item.filePath;
let filetype = getFileType(item.fileName);
if (['jpg', 'png', 'gif', 'jpeg', 'PNG', 'JPG', 'GIF'].indexOf(filetype) < 0){
thumbUrl = attachImg;
}
var file = {
gid: item.gid,
name: item.fileName,
url: thumbUrl,
originalUrl: originalUrl,
fileUrl: fileUrl,
status: 'done',
backData: item,
}
fileList.push(file);
}
}
Toast.success(data.backMsg ? data.backMsg : '上传成功!', 1);
if (callback && isFunction(callback)) {
callback(fileList);
}
} else {
Toast.info(data.backMsg ? data.backMsg : '上传失败!', 1);
}
})
}
}
}else if(obj.files){
Toast.loading('正在上传...', 1)
let params = {};
params.files = obj.files;
params.billType = billType;
params.sourceId = source.sourceId;
params.sourceType = source.sourceType;
ajax.postJSON(ADDR + uploadUrl, params, function (data) {
if (data.success) {
var backData = data.backData;
if (backData.length) {
for (var i = 0; i < backData.length; i++) {
var item = backData[i];
var thumbUrl = ADDR + '/' + zoomImgPath(item.filePath, '_100x100');
var originalUrl = ADDR + '/' + zoomImgPath(item.filePath);
var fileUrl = ADDR + '/' + item.filePath;
let filetype = getFileType(item.fileName);
if (['jpg', 'png', 'gif', 'jpeg', 'PNG', 'JPG', 'GIF'].indexOf(filetype) < 0){
thumbUrl = attachImg;
}
var file = {
gid: item.gid,
name: item.fileName,
url: thumbUrl,
originalUrl: originalUrl,
fileUrl: fileUrl,
status: 'done',
backData: item
}
fileList.push(file);
}
}
Toast.success(data.backMsg ? data.backMsg : '上传成功!', 1);
if (callback && isFunction(callback)) {
callback(fileList);
}
} else {
Toast.info(data.backMsg ? data.backMsg : '上传失败!', 1);
}
})
}
}
/**
* 图片压缩
* @param img
* @returns {string}
*/
function compress(img) {
var canvas = document.createElement('canvas'),
ctx = canvas.getContext('2d')
ctx.clearRect(0, 0, canvas.width, canvas.height)
canvas.width = img.naturalWidth
canvas.height = img.naturalHeight
//利用canvas进行绘图
ctx.drawImage(img, 0, 0, canvas.width, canvas.height)
//将原来图片的质量压缩到原先的0.2倍。
var data = canvas.toDataURL('image/jpeg', 0.2) //data url的形式
return data
}
function delAttach(params, onSuccess, onFail) {
var ajax=window.YYUtils.Ajax;
ajax.getJSON(ADDR + delUrl, params, function (data) {
if (data.success) {
Toast.success(data.backMsg ? data.backMsg : '删除成功!', 1)
if (onSuccess && isFunction(onSuccess)) {
onSuccess()
}
} else {
Toast.info(data.backMsg ? data.backMsg : '删除失败!', 1)
if (onFail && isFunction(onFail)) {
onFail()
}
}
}, function (error) {
Toast.info('服务器请求失败!', 1)
})
}
//获取缩略图路径
/**
*
* @param filePath
* @param dimension //缩略图尺寸 置空表示原图 格式: '_100x100'
* @returns {*}
*/
function zoomImgPath(filePath, dimension) {
if (!filePath) return filePath
var idx = filePath.lastIndexOf('.')
if (idx > -1) {
var ext = filePath.substr(idx)
return filePath.substr(0, idx) + (dimension || '') + ext
} else {
return filePath
}
}
//获取文件类型
function getFileType(filename){
var type=";"
if(filename){
var lastKIndex=filename.lastIndexOf(".");
if(lastKIndex>-1){
type = filename .substring(lastKIndex + 1, filename .length);
}
}
return type;
}
function loadAttachList(params, callback) {
var ajax=window.YYUtils.Ajax;
var fileList = []
ajax.getJSON(ADDR + listUrl, params, function (data) {
if (data.success) {
var backData = data.backData
if (backData != null) {
for (var i = 0; i < backData.length; i++) {
var item = backData[i]
var thumbUrl = ADDR + '/' + zoomImgPath(item.filePath, '_100x100');
var originalUrl = ADDR + '/' + zoomImgPath(item.filePath);
var fileUrl = ADDR + '/' + item.filePath;
let filetype = getFileType(item.fileName);
if (['jpg', 'png', 'gif', 'jpeg', 'PNG', 'JPG', 'GIF'].indexOf(filetype) < 0){
thumbUrl = attachImg;
}
var file = {
gid: item.gid,
name: item.fileName,
url: thumbUrl,
originalUrl: originalUrl,
fileUrl: fileUrl,
status: 'done',
backData: item,
}
fileList.push(file)
}
}
if (callback && isFunction(callback)) {
callback(fileList)
}
} else {
Toast.info(data.backMsg ? data.backMsg : '加载附件失败!', 1)
}
})
}
/**
* ajax上传base64图片数据,上传成功后返回url
* @param imgData base64图片数据
* @param params 扩展参数
* @param callback 数据处理回调
*/
function uploadBase64Img(imgData, params, callback) {
var ajax=window.YYUtils.Ajax;
var data = Object.assign({}, params, {content: imgData.replace('data:image/png;base64,', '').replace('data:image/jpeg;base64,', '')})
ajax.postJSON(ADDR + uploadBase64Url, data, (result) => {
if (result.success) {
Toast.info(result.backMsg ? result.backMsg : '上传成功!', 1)
if (callback && isFunction(callback)) {
callback()
}
} else {
Toast.info(result.backMsg ? result.backMsg : '上传失败!', 1)
}
}, (error) => {
})
}
function zipImg(imgBase64, options, callback) {
console.log('原始大小:' + imgBase64.length)
var img = new Image()
img.src = imgBase64
img.onload = function () {
var canvas = document.createElement('CANVAS')
var ctx = canvas.getContext('2d')
var width = img.width
var height = img.height
// 按比例压缩4倍
//var rate = (width<height ? width/height : height/width)/4;
var rate = 0.3
if (width > 800 && height > 480) rate = 0.8
if (width > 900 && height > 600) rate = 0.75
if (width > 960 && height > 720) rate = 0.7
if (width > 1024 && height > 768) rate = 0.65
if (width > 1280 && height > 768) rate = 0.6
if (options && options.rate) rate = options.rate
canvas.width = width * rate
canvas.height = height * rate
ctx.drawImage(img, 0, 0, width, height, 0, 0, width * rate, height * rate)
var dataURL = canvas.toDataURL('image/png', 0.1)
// var dataURL = canvas.toDataURL("image/jpeg", 0.8);
console.log('压缩后大小:' + dataURL.length)
if (typeof callback == 'function') callback(dataURL)
canvas = null
}
}
export default {
multiFilesUpLoad,
delAttach,
loadAttachList,
uploadBase64Img,
zipImg,
getFileType
}