1.在自己已经构建好的maven web项目中 pom.xml配置文件中添加上传下载所需要的jar包
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
2.在spring的applicationContext.xml配置文件中添加文件上传解析器
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="utf-8"></property>
<property name="maxUploadSize" value="5242440"></property>
</bean>
3.前台页面
<div class="form-row">
<div class="col-md-3 tar">
<span class="iconBtx">*</span>上传资源
</div>
<div class="col-md-9">
<input type="file" name="file" id="resource" />
</div>
</div>
<div class="form-row">
<div class="col-md-3 tar">
<span class="iconBtx">*</span>缩略图
</div>
<div class="col-md-9">
<input type="file" name="file" id="cover"
accept="image/jpg,image/jpeg,image/gif,image/png,image/bmp"/>
</div>
</div>
4.js
if ($("#resource").val() == "") {
swal({title: "请选择文件!", type: "info"});
return;
}
var formData = new FormData();
var resource = document.getElementById("resource");
formData.append("file", resource.files[0]);
var resource = $("#resource").val();
var resource_end =resource.split(".");
if( resource_end[1]=='bat'|| resource_end[1]=="exe"){
swal({title: "不可上传可执行文件!", type: "info"});
return;
}
var coverRemark = "false";
if(null == $("#cover").val() || $("#cover").val() == "" ){
formData.append("cover", resource.files[0]);
coverRemark = "false";
}else{
var cover = document.getElementById("cover");
formData.append("cover", cover.files[0]);
coverRemark = "true";
}
$.ajax({
url:'<%=request.getContextPath()%>/resourcePublic/addPublic' +
'?resourceName='+resourceName+
'&resourceType='+resourceType +'&resourceSubjectId='+resourceSubjectId +'&resourceMajorId='+resourceMajorId+
'&resourceCourseId='+resourceCourseId +'&resourceFormat='+resourceFormat +'&remark='+remark+'&coverRemark='+coverRemark,
type:"post",
processData:false,
contentType:false,
data:formData,
success:function(msg){
hideSaveLoading();
swal({
title: msg.msg,
type: "success"
});
$("#dialog").modal('hide');
$('#tableResource').DataTable().ajax.reload();
}
});
5.后台代码
@ResponseBody
@RequestMapping("/resourcePublic/addPublic")
public Message addPublic(@RequestParam("resourceName") String resourceName,
@RequestParam("resourceType") String resourceType,
@RequestParam("resourceSubjectId") String resourceSubjectId,
@RequestParam("resourceMajorId") String resourceMajorId,
@RequestParam("resourceCourseId") String resourceCourseId,
@RequestParam("resourceFormat") String resourceFormat,
@RequestParam("remark") String remark,
@RequestParam("coverRemark") String coverRemark,
@RequestParam(value = "file") CommonsMultipartFile file,
@RequestParam(value = "cover") CommonsMultipartFile coverfile) {
String resourceId = CommonUtil.getUUID();
String name = file.getFileItem().getName();
String type = name.substring(name.lastIndexOf(".") + 1);
try {
InputStream in = file.getInputStream();
byte[] buff = new byte[100]; //buff用于存放循环读取的临时数据
String uploadFilePath = new File(getClass().getResource("/").getPath()).getParentFile().getParent()
.toString();
Date date = new Date();
DateFormat format = new SimpleDateFormat("yyyyMMdd");
String time = format.format(date);
String Path = "/resourcefiles/ZYK_RESOURCE_PUBLIC/" + time + "/";
File tempFile = new File(uploadFilePath + Path);
if (!tempFile.exists()) {
tempFile.mkdirs();
}
FileOutputStream fos = new FileOutputStream(uploadFilePath + Path + resourceId + "." + type);
byte[] buffer = new byte[8192]; // 每次读8K字节
int count = 0;
// 开始读取上传文件的字节,并将其输出到服务端的上传文件输出流中
while ((count = in.read(buffer)) > 0) {
fos.write(buffer, 0, count); // 向服务端文件写入字节流
}
fos.close(); // 关闭FileOutputStream对象
in.close(); // InputStream对象
/* if (".avi.wmv.mpeg.mov.mkv.flv.f4v.m4v.rmvb.rm.3gp.dat.ts.mts.vob.".indexOf("." + type + ".") != -1) {
Transcoding.transcoding(uploadFilePath + Path + resourceId + "." + type, uploadFilePath + Path +
resourceId);
}*/
ResourceFiles uploadFiles = new ResourceFiles();
if (coverRemark.equals("true")) {
InputStream inCover = coverfile.getInputStream();
String nameCover = coverfile.getFileItem().getName();
String typeCover = nameCover.substring(nameCover.lastIndexOf(".") + 1);
FileOutputStream fosCover = new FileOutputStream(uploadFilePath + Path + resourceId + "Cover." +
typeCover);
byte[] bufferCover = new byte[8192]; // 每次读8K字节
int countCover = 0;
// 开始读取上传文件的字节,并将其输出到服务端的上传文件输出流中
while ((countCover = inCover.read(bufferCover)) > 0) {
fosCover.write(bufferCover, 0, countCover); // 向服务端文件写入字节流
}
fosCover.close(); // 关闭FileOutputStream对象
inCover.close(); // InputStream对象
uploadFiles.setCoverUrl(Path + resourceId + "Cover." + typeCover);
uploadFiles.setCoverType(typeCover);
} else {
uploadFiles.setCoverUrl( ResourcelibraryCommonUtil.getFilesThumbnailURL(resourceFormat, type) );
}
long fileSize = file.getSize();
uploadFiles.setFileSize(fileSize + "");
uploadFiles.setFileId(resourceId);
uploadFiles.setFileName(name);
uploadFiles.setFileType(type);
uploadFiles.setFileUrl(Path + resourceId + "." + type);
uploadFiles.setBusinessId(resourceId);
uploadFiles.setTablename("ZYK_RESOURCE_PUBLIC");
uploadFiles.setCreator(CommonUtil.getPersonId());
uploadFiles.setCreateDept(CommonUtil.getLoginUser().getDefaultDeptId());
resourceFilesService.saveResourceFiles(uploadFiles);
DateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");
String time1 = format1.format(date);
ResourcePublic resourcePublic = new ResourcePublic();
resourcePublic.setResourceName(resourceName);
resourcePublic.setResourceType(resourceType);
resourcePublic.setResourceSubjectId(resourceSubjectId);
resourcePublic.setResourceMajorId(resourceMajorId);
resourcePublic.setResourceCourseId(resourceCourseId);
resourcePublic.setResourceFormat(resourceFormat);
resourcePublic.setRemark(remark);
resourcePublic.setResourceId(resourceId);
CommonUtil.save(resourcePublic);
resourcePublic.setPublicPersonId(CommonUtil.getPersonId());
resourcePublic.setPublicDeptId(CommonUtil.getDefaultDept());
resourcePublic.setPublicTime(time1);
resourcePublic.setPublicFlag("1");
resourcePublic.setClassicFlag("0");
resourcePublicService.saveResourcePublic(resourcePublic);
ResourceOperateLog resourceOperateLog = new ResourceOperateLog();
resourceOperateLog.setResourceId(resourceId);
resourceOperateLog.setBusinessId(resourceId);
resourceOperateLog.setLogId(CommonUtil.getUUID());
CommonUtil.save(resourceOperateLog); // zyk_resource_public
resourceOperateLog.setResourceTablename("ZYK_RESOURCE_PUBLIC");
resourceOperateLog.setOperateType("1");
resourceOperateLogService.saveResourceOperateLog(resourceOperateLog);
return new Message(1, "上传成功!如果文件需要转码,请稍后查看。", resourceId);
} catch (IOException e) {
e.printStackTrace();
return new Message(0, "上传失败!", "error");
}
}