使用commons上传excel,电子表格commons-fileupload文件上传
1. commons-fileupload文件上传
importorg.apache.tomcat.util.http.fileupload.FileItem;importorg.apache.tomcat.util.http.fileupload.FileItemFactory;importorg.apache.tomcat.util.http.fileupload.FileUploadException;importorg.apache.tomcat.util.http.fileupload.disk.DiskFileItemFactory;importorg.apache.tomcat.util.http.fileupload.servlet.ServletFileUpload;就是下面出现红线,不知道如何导入
2. commons-fileUpload
Caused by: org.apachemons.fileupload.MultipartStream$MalformedStreamException: Stream ended unexpectedly 上传到一半,流被关系了。要么页面被关了。要么刷新了页面
3. uploadfile上传文件怎么上传
背景
在学习微信小程序的过程中,需要导出excel文件数据,可是却没有后台服务器,所以只能够想着使用纯前端去导出excel
使用插件:excel-export
导出思想
将数据封装成excel文件
将excel文件上传到云存储中
将云存储的excel文件以图片的格式下载到本地
修改图片文件后缀为xlsx,成为excel文件
操作
将数据封装成excel文件;将excel文件上传到云存储中
建立云函数(我的云函数名称:uploadexportfile),打开云函数终端,安装excel-export插件
// 云函数入口文件
const cloud = require('wx-server-sdk')
const nodeExcel = require('excel-export');
const path = require('path');
cloud.init()
// 云函数入口函数
exports.main = async (event, context) => {
var tableMap = {
styleXmlFile:path.join(__dirname,"styles.xml"),
name: Date.now()+"-export",
cols: [],
rows: [],
}
var tableHead = ["编号", "名称", "生日", "年龄"];
//添加表头
for(var i=0;i<tableHead.length;i++){
tableMap.cols[tableMap.cols.length]={
caption:tableHead[i],
type:'string'
}
}
//表体:伪数据
const tableList = [
{编号:0,名称:'张三',生日:'2019-5-1',年龄:20},
{编号:1,名称:'李四',生日:'2019-5-1',年龄:45}
]
//添加每一行数据
for(var i=0;i<tableList.length;i++){
tableMap.rows[tableMap.rows.length]=[
tableList[i].编号,
tableList[i].名称,
tableList[i].生日,
tableList[i].年龄
]
}
//保存excelResult到相应位置
var excelResult = nodeExcel.execute(tableMap);
var filePath = "outputExcels";
var fileName = cloud.getWXContext().OPENID + "-" + Date.now()/1000 + '.xlsx';
//图片上传到云存储
return await cloud.uploadFile({
cloudPath: path.join(filePath, fileName),
fileContent: new Buffer(excelResult,'binary')
}).then(res=>{
console.log(res.fileID);
return res;
}).catch(err=>{
});
}
DOWNLOAD
//导出excel
function exportFile(dataHeader,dataList){
wx.showLoading({
title: '正在导出',
});
console.log(dataHeader);
console.log(dataList);
wx.cloud.callFunction({
name:'uploadexportfile',
data:{
dataHeader:dataHeader,
dataList:dataList
}
}).then(res=>{
const fileID = res.result.fileID;
//下载文件
wx.cloud.downloadFile({
fileID: fileID
}).then(res1 => {
this.saveFileToPhotosAlbum(res1);//保存文件到相册
this.delCloudFile(fileID);//删除云存储文件
}).catch(error => {
// handle error
})
}).catch(err1=>{
});
}
//保存文件到本地相册
function saveFileToPhotosAlbum(res){
//授权
this.writePhotosAlbumAuth();
// 保存文件
var saveTempPath = wx.env.USER_DATA_PATH + "/exportFile"+new Date().getTime()+".jpg";
wx.saveFile({
tempFilePath: res.tempFilePath,
filePath: saveTempPath ,
success:res1=> {
//获取了相册的访问权限,使用 wx.saveImageToPhotosAlbum 将图片保存到相册中
wx.saveImageToPhotosAlbum({
filePath: saveTempPath ,
success: res2 => {
//保存成功弹出提示,告知一下用户
wx.hideLoading();
wx.showModal({
title: '文件已保存到手机相册',
content: '文件位于tencent/MicroMsg/WeiXin下 \r\n将保存的文件重命名改为[ .xlsx ]后缀即可正常打开',
confirmColor: '#0bc183',
confirmText: '知道了',
showCancel: false
});
},
fail(err2) {
console.log(err2)
}
})
}
});
}
//删除云存储文件
function delCloudFile(fileID){
const fileIDs=[];
fileIDs.push(fileID);
//删除云存储中的excel文件
wx.cloud.deleteFile({
fileList: fileIDs,
success: res4 => {
// handle success
console.log(res.fileList);
},
fail: console.error
})
}
//上传单个文件
function uploadSingleFile(cloudPath,filePath){
wx.cloud.uploadFile({
cloudPath: cloudPath, // 上传至云端的路径
filePath: filePath, // 小程序临时文件路径
success: res => {
// 返回文件 ID
console.log(res.fileID)
},
fail: console.error
})
}
//微信图片保存到本地相册授权
function writePhotosAlbumAuth(){
wx.getSetting({
success(res) {
if (!res.authSetting['scope.writePhotosAlbum']) {
wx.authorize({
scope:'scope.writePhotosAlbum',
success() {
console.log('授权成功')
}
})
}
}
})
}
module.exports={
uploadSingleFile:uploadSingleFile,
exportFile:exportFile,
saveFileToPhotosAlbum:saveFileToPhotosAlbum,
delCloudFile:delCloudFile,
writePhotosAlbumAuth:writePhotosAlbumAuth
}
4. fileupload多文件上传
给你些建议哦:
1.多文件上传没有必要动态添加FileUpLoad,因为这种工作并没有带来多大的收益,因为你完全可以放置4个到5个FileUpLoad控件,用户上传一般不会很多,假如超过5个也可以分多次上传。
2.如果想动态添加,你首先要判断用户还是否有下个文件上传,所以你必须添加一个BUTTON或者LABEL来让用户确认,比如:“上传下一个文件”,用户点击的事件里写:FileUpLoadFUL=newFileUpLoad();FUL.Name="FUL"+Convet.ToString(i);//这个i是你要定义的全局变量,用于记录用户在同一次上传中点击了几次控件。点一次自加1,初始为0this.Controls.Add(FUL);i++;获得路径就通过这个i,写个循环来获得,这样LZ应该思路很清楚了吧。
5. apache commons fileupload
在游戏中调出简体中文界面和字幕可选的方法:
1、等购买国区/亚版Uplay版的玩家分享上传\data_win32下的common.dat和common.fat两个文件
2、覆盖这2个文件到你的版本,如Steam版的\data_win32目录下(覆盖前注意备份原始文件,防止出错)
3、运行游戏这时进游戏就会变成国区/亚版的语言可选了。