webuploader是不是我的接收代码有问题麻烦看一下

southrex 2018-12-16 10:21:52
使用webuploader分片上传,但是后台只收到一次上传结果,只会生成一个临时文件“File tempPartFile = new File(parentFileDir, fileName + "_" + chunk+ ".part");”,有时候上传还没有反应,多点几下才能上传,麻烦帮我看一下是什么问题

java:

package com.dist.caseVideo.servlet;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.math.NumberUtils;


@MultipartConfig
public class AddCaseServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
System.out.println("被调用get");
}

@SuppressWarnings("unchecked")
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
response.setCharacterEncoding("UTF-8");
request.setCharacterEncoding("UTF-8");

try {
boolean isMultipart = ServletFileUpload.isMultipartContent(request);

if (isMultipart) {
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);

// 得到所有的表单域,它们目前都被当作FileItem
List<FileItem> fileItems = upload.parseRequest(request);

String id = "";
String fileName = "";
// 如果大于1说明是分片处理
int chunks = 1;
int chunk = 0;
FileItem tempFileItem = null;

for (FileItem fileItem : fileItems) {
if (fileItem.getFieldName().equals("id")) {
id = fileItem.getString();
} else if (fileItem.getFieldName().equals("name")) {
fileName = new String(fileItem.getString().getBytes("ISO-8859-1"), "UTF-8");
} else if (fileItem.getFieldName().equals("chunks")) {
chunks = NumberUtils.toInt(fileItem.getString());
} else if (fileItem.getFieldName().equals("chunk")) {
chunk = NumberUtils.toInt(fileItem.getString());
} else if (fileItem.getFieldName().equals("file")) {
tempFileItem = fileItem;
}
}
File destTempFile = new File(getTempFilePath(), fileName);

// 临时目录用来存放所有分片文件
String tempFileDir = getTempFilePath() + File.separator + id;
File parentFileDir = new File(tempFileDir);
if (!parentFileDir.exists()) {
parentFileDir.mkdirs();
}
// 分片处理时,前台会多次调用上传接口,每次都会上传文件的一部分到后台(默认每片为5M)
File tempPartFile = new File(parentFileDir, fileName + "_" + chunk+ ".part");
FileUtils.copyInputStreamToFile(tempFileItem.getInputStream(),
tempPartFile);

// 是否全部上传完成
// 所有分片都存在才说明整个文件上传完成
boolean uploadDone = true;
for (int i = 0; i < chunks; i++) {
File partFile = new File(parentFileDir, fileName + "_" + i + ".part");
System.out.println("i: "+i);
System.out.println("partFile: "+partFile);
if (!partFile.exists()) {
uploadDone = false;
}
}

// 所有分片文件都上传完成
// 将所有分片文件合并到一个文件中
if (uploadDone) {
//File destTempFile = new File(getTempFilePath(), fileName);
for (int i = 0; i < chunks; i++) {
File partFile = new File(parentFileDir, fileName + "_"
+ i + ".part");

FileOutputStream destTempfos = new FileOutputStream(destTempFile, true);

FileUtils.copyFile(partFile, destTempfos);

destTempfos.close();
}
// 得到 destTempFile 就是最终的文件
// 添加到文件系统或者存储中

// 删除临时目录中的分片文件(临时文件夹路径)
//FileUtils.deleteDirectory(parentFileDir);
// 删除上传的文件(上传的文件路径)
//destTempFile.delete();

} else {
// 临时文件创建失败
if (chunk == chunks -1) {
FileUtils.deleteDirectory(parentFileDir);
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}

private String getTempFilePath() {
String dd=new SimpleDateFormat("yyyyMMdd").format(Calendar.getInstance().getTime());
return "d:\\filetemp\\" + dd;
}

}




web:

<div id="uploader" class="wu-example">
<!--用来存放文件信息-->
<div id="thelist" class="uploader-list"></div>
<div class="btns">
<div id="picker">选择文件</div>
</div>
</div>
<button id="ctlBtn" type="submit" class="btn btn-success">上传</button>
<button id="goBack" type="reset" class="btn btn-default">重置</button>${result1}
</form>
<!--------------------------------省略了一部分-------------------------------------------->
<!-- JS Scripts-->
<!-- jQuery Js -->
<script src="assets/js/jquery-3.3.1.min.js"></script>
<!-- Bootstrap Js -->
<script src="assets/js/bootstrap.min.js"></script>
<!-- Metis Menu Js -->
<script src="assets/js/jquery.metisMenu.js"></script>
<!-- Custom Js -->
<script src="assets/js/custom-scripts.js"></script>
<!--引入JS-->
<script type="text/javascript" src="assets/webuploader/webuploader.js"></script>

<script type="text/javascript">
//文件上传
jQuery(function() {
var $ = jQuery,
$list = $('#thelist'),
$btn = $('#ctlBtn'),
state = 'pending',
uploader;

uploader = WebUploader.create({



// swf文件路径
swf: 'assets/webuploader/Uploader.swf',
// 文件接收服务端。
server: 'http://localhost:8080/dist/AddCaseServlet',
// 不压缩image
resize: false,

// 内部根据当前运行是创建,可能是input元素,也可能是flash.
pick: '#picker' ,
chunked: true,
chunkSize: 1 * 1014 * 1024,
threads: true,
fileNumLimit: 3,
fileSingleSizeLimit: 1000 * 1024 * 1024,
duplicate: true

});

// 当有文件添加进来的时候
uploader.on( 'fileQueued', function( file ) {
$list.append( '<div id="' + file.id + '" class="item">' +
'<h4 class="info">' + file.name + '</h4>' +
'<p class="state">等待上传...</p>' +
'</div>' );
});

// 文件上传过程中创建进度条实时显示。
uploader.on( 'uploadProgress', function( file, percentage ) {
var $li = $( '#'+file.id ),
$percent = $li.find('.progress .progress-bar');

// 避免重复创建
if ( !$percent.length ) {
$percent = $('<div class="progress progress-striped active">' +
'<div class="progress-bar" role="progressbar" style="width: 0%">' +
'</div>' +
'</div>').appendTo( $li ).find('.progress-bar');
}

$li.find('p.state').text('上传中');

$percent.css( 'width', percentage * 100 + '%' );
});

uploader.on( 'uploadSuccess', function( file,response ) {
$( '#'+file.id ).find('p.state').text('已上传');
});

uploader.on( 'uploadError', function( file,reason ) {
$( '#'+file.id ).find('p.state').text('上传出错');
});

uploader.on( 'uploadComplete', function( file ) {
$( '#'+file.id ).find('.progress').fadeOut();
});

uploader.on( 'all', function( type ) {
if ( type === 'startUpload' ) {
state = 'uploading';
} else if ( type === 'stopUpload' ) {
state = 'paused';
} else if ( type === 'uploadFinished' ) {
state = 'done';
}

if ( state === 'uploading' ) {
$btn.text('暂停上传');
} else {
$btn.text('开始上传');
}
});

$btn.on( 'click', function() {
if ( state === 'uploading' ) {
uploader.stop();
} else {
uploader.upload();
}
});
});
</script>
...全文
9 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

87,904

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧