jquery+java文件上传下载删除全代码
页面
<p class="text_essas">
<span>附件:</span>
<input type="file" name="file" id="file" class="inp_file" style="display:none" />
<#-- 文件名称保存到此标签 -->
<input type="hidden" id="fileinput" class="fileinput" name="fileinput" value="" />
<span id="yl_setfile" class="option_up"><font id="filename" onclick="setfile()" class="l_imgname" title="">添加附件+</font>附件大小不能超过1000.00MB</span>
</p>
js 上传文件
//<#-- 触发文件上传 -->
function setfile(){
$("#file").click();
}
//冒泡提示
function layertips(msg,obj){
layer.tips(msg, obj, {
tipsMore: true
});
}
//清空file
function delfile(file){
file.after(file.clone().val(""));
file.remove();
}
//<#-- 文件发生改变change方法 -->
$(document).ready(function(){
$("#file").live('change', function(){
var file = $('#'+this.id)
var fileName = file.val().split('\\'); //得到文件名数组
var fileSize = document.getElementById('file').files[0]; //获得文件大小;
filePath = file.val().toLowerCase().split(".");
fileType = filePath[filePath.length - 1]; //获得文件结尾的类型如 zip rar
if(!(fileType == "png" || fileType == "jpg")){
//layer的冒泡提示
layertips('附件格式不符合要求!',$("#filename"))
//清空file
delfile(file);
}else if(fileSize.size>1048576000){
layertips('错误!请上传不超过1000.00MB的附件',$("#filename"))
delfile(file);
}else{
//文件名回显到页面
//$("#filename").attr("title",file.val().substring(file.val().lastIndexOf("\\")+1))
//$("#filename").html(file.val().substring(file.val().lastIndexOf("\\")+1));
uploadFile(file,fileType)
}
});
});
//<#-- 文件上传 -->
function uploadFile(file,fileType){
var formData = new FormData();
var name = file.val().substring(file.val().lastIndexOf("\\")+1);
//uuid 在其他js文件内 后面会给出
var uuid1 = uuid(32, 16);
formData.append("file", file[0].files[0]);
formData.append("name", name);
formData.append("id",uuid1);
//动态加载上传的文件到页面,,无需刷新页面
$("#yl_setfile").before('<span class="option_up"><input type="hidden" name="fileuuid" fliename="'+name+'" value="'+uuid1+'"><font "delfile('+"'"+uuid1+"'"+',this,'+"'"+fileType+"'"+')" class="l_imgname" title="">删除</font><span class="l_imgname" title="'+name+'" "downloadfile('+"'"+uuid1+"'"+')">'+name+'</span></span><span style="margin-left: 4px;"></span>');
//文件是一个一个上传的,保存文件信息到数据库的方法可以批量也可以单条
$.ajax({
url : get_web_url()+'/api/apply/upload_auditFile.action',
type: 'POST',
// 告诉jQuery不要去处理发送的数据
processData: false,
// 告诉jQuery不要去设置Content-Type请求头
contentType: false,
data : formData,
beforeSend: function() {
console.log("正在进行,请稍候");
},
success: function(responseStr) {
if($("#id").val()!=''){
log($("#id").val())
//这里是单条的保存上传文件信息,也可以批量
saveoreditfile($("#id").val());
}
console.log("成功" + responseStr);
},
error: function(responseStr) {
console.log("error");
}
});
}
js 保存文件信息
//<#-- 获取所有上传文件ID,name -->
//之前动态加载到页面上的文件,不会获取到已经存在的文件,只会获取新上传的文件
function getfileId(){
//获取的是已经新上传的文件的全部信息,需要其他信息可以自己添加
var djs = [];
$("input[name='fileuuid']").each(function(){
var id = $(this).val();
var name = $(this).attr("fliename");//<#-- .split(".")[0] 纯名字 -->;
//这里的name,value和后台的实体类对应
djs.push({'name' : id,'value' : name});
log(djs)
});
return djs;
}
//<#-- 保存文件信息 approval:审批ID,可以批量可以单条,看你什么时候调用了。
//可以每上传一个文件调用一次(单条)、也可以全部上传完毕点击保存按钮调用(批量)-->
function saveoreditfile(approval){
//获取一下页面的关于文件的信息
var djs = getfileId();
$.ajax({
type:'post',
url : get_web_url()+'/api/apply/saveoreditfile.action',
data : {"djs":JSON.stringify(djs),"approval":approval},
success : function(data){
//这里的resultVO 内的方法不用在意 自用的方法
resultVO.checkCode(data, function (data) {
if(data){
log(data);
}else{
log("凉凉");
}
});
},
error : function(){
layeropen('2','发生意外错误!');
}
});
}
//<#-- 删除文件 id 文件信息ID(数据库表ID)、obj当前删除文件,fileType 文件后缀-->
function delfile (id,obj,fileType){
var conlay = layer.confirm('确定要删除文件吗?', {
btn: ['确定','取消'] //按钮
}, function(){
$.ajax({
type:'post',
url : get_web_url()+'/api/apply/delfile.action',
data : {"id":id,"fileType":fileType},
success : function(data){
resultVO.checkCode(data, function (data) {
if(data){
//删除一些页面关联标签,因人而异
$(obj).parent().next().remove();
$(obj).parent().remove();
log(data);
layer.close(conlay);
}else{
log("凉凉");
}
});
},
error : function(){
layeropen('2','发生意外错误!');
}
});
},function(){
});
}
//<#-- 文件下载 -->
function downloadfile(id){
log(id);
location.href=get_web_url()+'/apply/ResponseEntity.action?id='+id;
}
java 保存文件信息、删除、下载
action
/**
* 上传文件
* @param file 文件流
* @param id 文件随机ID
* @param response
* @throws Exception
*/
//这里因为框架内置 不需要加@ResponseBody,正常需要加的
@RequestMapping("/upload_auditFile")
public void upload_auditFile(MultipartFile file,String id,HttpServletRequest request,HttpServletResponse response) throws Exception{
SysUser sysUser = (SysUser) request.getSession().getAttribute("sysUser");
String result = applyService.upload_auditFile(file,id,sysUser.getId());
JSONObject obj = new JSONObject();
if(!"error".equals(result)&&!"fileMax".equals(result)){
obj.put("result", "ok");
}else{
obj.put("result", result);
}
PrintWriter out = response.getWriter();
obj.put("fileName", file.getOriginalFilename());
obj.put("filePath", result);
response.setStatus(HttpServletResponse.SC_OK);
response.setContentType("text/html");
out.print(obj.toString());
}
/**
* 保存文件信息
* @param request
* @param djs 文件信息
* @param filestepid 步骤ID
* @param approval 审批流程ID
* @return
*/
@RequestMapping("/saveoreditfile")
public ResultVO saveoreditfile(HttpServletRequest request,String djs,String filestepid, String approval) {
SysUser sysUser = (SysUser) request.getSession().getAttribute("sysUser");
// html字符转义 import org.apache.commons.text.StringEscapeUtils;
djs = StringEscapeUtils.unescapeHtml4(djs);
List<jsonbean> arrayList = (List<jsonbean>) JSON.parseArray(djs, jsonbean.class);
System.out.println(arrayList);
return new ResultVO(applyService.saveoreditfile(arrayList, filestepid, approval,sysUser));
}
/**
* JSON转换实体类
* @author XNYLH
*
*/
public class jsonbean {
private String name;
private String value;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
@Override
public String toString() {
return "jsonbean [name=" + name + ", value=" + value + "]";
}
}
/**
* 删除文件
* @param request
* @param djs
* @param filestepid
* @param approval
* @return
*/
@RequestMapping("/delfile")
public ResultVO delfile(HttpServletRequest request,String id,String fileType) {
return new ResultVO(applyService.delfile(id,fileType));
}
/**
* 文件下载
* @return
*/
@RequestMapping("/ResponseEntity")
public ResponseEntity<byte[]> ResponseEntity(String id) throws IOException{
//获取文件信息
OaFlowFile oaFlowFile = applyService.getOaFlowFile(id);
System.out.println(id+oaFlowFile);
if(oaFlowFile!=null) {
//这里就是文件路径
String webPath = Platform.getInstance().getGlobal().get("attachPath");
String filePath = webPath + oaFlowFile.getFileUrl();
String realFileName;
File file = new File(filePath);
HttpHeaders headers = new HttpHeaders();
realFileName = new String(oaFlowFile.getFileName().getBytes("ISO-8859-1"),"utf-8");
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
//realFileName = URLEncoder.encode(realFileName, "UTF-8");
headers.setContentDispositionFormData("attachment", realFileName);
//import org.springframework.http.ResponseEntity;
//import org.springframework.http.HttpHeaders;
//import org.springframework.http.HttpStatus;
//import org.springframework.http.MediaType;
return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),
headers, HttpStatus.OK);
}
return null;
}
serverImpl
//文件上传
@Override
public String upload_auditFile(MultipartFile file, String id, String userid) throws IOException {
String fileName = file.getOriginalFilename();
String filePath = id + fileName.substring(fileName.lastIndexOf("."), fileName.length());
String webPath = Platform.getInstance().getGlobal().get("attachPath");
filePath = File.separator +/*userid*/"apply" + File.separator + filePath;
String path = webPath + filePath;
File f = new File(path);
if (!f.exists()) {
f.getParentFile().mkdirs();
f.createNewFile();
}
File fileUpload = new File(path);
file.transferTo(fileUpload);
return filePath;
}
//保存文件信息
@Override
public boolean saveoreditfile(final List<jsonbean> arrayList, final String filestepid, final String approval, SysUser sysUser) {
//arrayList 获取的总是页面当前新添加的文件,最新的
//所以修改即为保存,先删除再重新添加(我就是个小机灵鬼)因为使用批量所以性能不会有问题,很快
String sql = "DELETE FROM OA_FLOW_FILE WHERE id = ? ";
final String sysuserid = sysUser.getId();
if(arrayList!=null&&arrayList.size()>0) {
jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
@Override
public void setValues(PreparedStatement ps, int i) throws SQLException {
ps.setString(1, arrayList.get(i).getName());
}
@Override
public int getBatchSize() {
return arrayList.size();
}
});
String sql1 = "INSERT INTO OA_FLOW_FILE (ID,FILE_URL,FLOW_TABLE_ID,USER_ID,SETP_ID,FILE_NAME) VALUES (?,?,?,?,?,?) ";
jdbcTemplate.batchUpdate(sql1, new BatchPreparedStatementSetter() {
@Override
public void setValues(PreparedStatement ps, int i) throws SQLException {
ps.setString(1, arrayList.get(i).getName());
ps.setString(2, File.separator +"apply" + File.separator + arrayList.get(i).getName() + arrayList.get(i).getValue().substring(arrayList.get(i).getValue().lastIndexOf("."), arrayList.get(i).getValue().length()));
ps.setString(3, approval);
ps.setString(4, sysuserid);
ps.setString(5, filestepid);
ps.setString(6, arrayList.get(i).getValue());
}
@Override
public int getBatchSize() {
return arrayList.size();
}
});
return true;
}
return false;
}
//删除文件
@Override
public boolean delfile(String id,String fileType) {
String path;
String webPath = Platform.getInstance().getGlobal().get("attachPath");
//获取文件信息
OaFlowFile oaFlowFile = get_oaflow_file(id);
if(oaFlowFile!=null) {
//如果文件信息是空的,就没有文件路径了
path = webPath + oaFlowFile.getFileUrl();
}else {
//所以这里拼出路径
path = webPath + File.separator +/*userid*/"apply" + File.separator + id + "."+fileType;
}
File file = new File(path);
if (file.exists() && file.isFile()) {
if (file.delete()) {
System.out.println("删除文件成功!");
if(oaFlowFile!=null) {
//没有信息自然不需要清空信息
baseTransaction.deleteById(OaFlowFile.class, id);
}
return true;
} else {
System.out.println("删除文件失败!");
return false;
}
} else {
System.out.println("删除文件失败:不存在!");
return false;
}
}
好啦!差不多到这啦!QAQ 这里uuid的百度云链接 ~~ 我才不告诉你密码是 smn6 呢!!!