使用ajax异步刷新文件的上传和下载

主要的JSP页面

<div id="light" class="white_content"> 
   <div class="uploader white">
<form action="" method="post" enctype="multipart/form-data">
<input type="text" name="upload" class="filename"  id="filename"/>
<input type="button" name="file" class="button" value="选择..." onClick="clic()"/>
<input type="file" size="30" name="upload" class="filename" id="file1"/>
<br>
<br>
<br>
<input type="text" class="filename" name="title" value="请输入文件名" id="title"
onFocus="if(value==defaultValue){this.value='';this.style.color='#000'}"
onBlur="if(!value){this.value=defaultValue;this.style.color='#999'}"
/>
<input type="button" name="file" class="button" value="上传..." onclick="getAjax()"/>

</form>

</div>

JS中异步刷新

function Onfist(){
var Lid=<%=Lid%>;
if(Lid=="1"){
var docum=document.getElementById("page21_jButton1");
$("#page21_jButton1").hide();
}
jQuery.ajax({
        url:"<%=path%>/defenseArrangePageAction.action",//通过ajax连接到指定的action将数据取出来
        type:"GET",
        cache: false,
        async:false,//false代表只有在等待ajax执行完毕后才执行

        dataType:'json',

                        //数据成功返回后怎么处理

        success:function(data){

                                           var arr=JSON.parse(data);

  $(".filename").val("");
  $('#page21_jDataGrid1_table').jqGrid('clearGridData');
  jQuery('#page21_jDataGrid1_table').jqGrid({
datatype: 'local',
viewrecords: true,
colNames:['答辩安排','上传人','操作'],
colModel:[
{name:'A0',index:'A0', width:260},
{name:'A1',index:'A1', width:64},
{name:'A2',index:'A2', width:64}
],
width: '100%',
height: '100%'

}).navGrid('#page21_jDataGrid1_pager',{edit:false,add:false,del:false});

                                                //将传过来的gson数据循环读取出来

  for( var o in arr) {
$('#page21_jDataGrid1_table').closest('.ui-jqgrid-bdiv').css({'overflow-y': 'auto'});
if(Lid=="1"){
$('#page21_jDataGrid1_table').jqGrid('addRowData',1,{A0:arr[o].title,A1:arr[o].tid,A2:'<a href="downFile?id='+arr[o].id+'">下载</a>'});
}else{
$('#page21_jDataGrid1_table').jqGrid('addRowData',1,{A0:arr[o].title,A1:arr[o].tid,A2:'<a href="">删除</a>&nbsp;|&nbsp;<a href="downFile?id='+arr[o].id+'">下载</a>'});
}

$('#page21_jDataGrid1_table').trigger('reloadGrid');
  }


        }
    });

}

Action中取数据的主要代码:

List<DefenseArrange>defensearrangelist;

Map map=null;

public String execute()throws Exception{
map=ActionContext.getContext().getSession();
String user=(String)map.get("user");
if(map.get("Lid").equals("1")){
T_sid t_sid=t_siddao.queryUserById(user);
System.out.println("学生的账号是:"+user);
defensearrangelist=defensearrangedao.queryTaskBookByTid(t_sid.getTid());
}else{
System.out.println("教师的账号是:"+user);
defensearrangelist=defensearrangedao.queryTaskBookByTid(user);
}
ArrayList alist=new ArrayList();
        //把数据打包起来
Gson gson = new Gson();
result=gson.toJson(defensearrangelist);
System.out.println("result之前:"+result);
return SUCCESS;

}

文件上传实现的JS:

function getAjax(){
var file1=$("#file1").val();
jQuery.ajax({
type:"post",
  url:"<%=path%>/defenseArrangeAction.action",//执行上传的Action
  async : false,
  cache: false,
  data:{
  "defensearrange.title":$("#title").val(),
  "defensearrange.downpath":file1
  },
  dataType:'json',
  success: function(data){ 
  $("#light").hide();
  $("#fade").hide();
  var arr=JSON.parse(data);
  $(".filename").val("");
  $('#page21_jDataGrid1_table').jqGrid('clearGridData');
  jQuery('#page21_jDataGrid1_table').jqGrid({
datatype: 'local',
viewrecords: true,
colNames:['答辩安排','上传人','操作'],
colModel:[
{name:'A0',index:'A0', width:260},
{name:'A1',index:'A1', width:64},
{name:'A2',index:'A2', width:64}
],
width: '100%',
height: '100%'

}).navGrid('#page21_jDataGrid1_pager',{edit:false,add:false,del:false});

                                    //上传完再从数据库读出来最新的

  for( var o in arr) {
  $('#page21_jDataGrid1_table').closest('.ui-jqgrid-bdiv').css({'overflow-y': 'auto'});
  $('#page21_jDataGrid1_table').jqGrid('addRowData',1,{A0:arr[o].title,A1:arr[o].tid,A2:'<a href="">删除</a>&nbsp;|&nbsp;<a href="downFile?id='+arr[o].id+'">下载</a>'});
  $('#page21_jDataGrid1_table').trigger('reloadGrid');
  }
  }
});

}

处理上传的Action的主要代码:

List<DefenseArrange>defensearrangelist;

Map map1=null;

        public String execute() throws Exception{
System.out.println("downpath:"+defensearrange.getDownpath()+",title:"+defensearrange.getTitle());
map1=ActionContext.getContext().getSession();
String user=(String)map1.get("user");
Date d = new Date();   
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
                String dateNowStr = sdf.format(d);  
                ArrayList alist=new ArrayList();
                defensearrange.setSave_time(dateNowStr);
                defensearrange.setTid(user);
File file=new File(defensearrange.getDownpath());
String name=defensearrange.getDownpath();
String name1=name.substring(name.indexOf("."),name.length());
String fileName1=defensearrange.getTitle()+name1;
defensearrange.setTitle(fileName1);
String fileName="E:\\workspace\\BYSJ\\WebContent\\DefenseArrangefiles\\"+fileName1;
System.out.println("文件存储路径是:"+fileName);
defensearrange.setDownpath(fileName);
FileOutputStream fos = new FileOutputStream(fileName);//先用文件储存的路径打开输出流,将文件输出到输出流
FileInputStream fis = new FileInputStream(file);//再用输入流写入到新的文件中去
byte[] buffer = new byte[1024];
int len = 0;
while ((len = fis.read(buffer)) > 0)
{
fos.write(buffer , 0 , len);
}
fos.close();

if(defensearrangedao.addTaskBook(defensearrange)){
System.out.println("上传成功");
defensearrangelist=defensearrangedao.queryTaskBookByTid(defensearrange.getTid());
System.out.println(defensearrangelist.size());
//JsonObject jObject=new JsonObject();
Gson gson = new Gson();
result=gson.toJson(defensearrangelist);
System.out.println("result之前:"+result);
    return SUCCESS;
}
return INPUT;

}

Struts中的上传下载配置:

//上传配置

<action name="defenseArrangeAction" class="defenseArrangeAction">
<!-- 配置fileUpload的拦截器 -->
<interceptor-ref name="fileUpload">
<!-- 配置允许上传的文件类型 -->
<!--
<param name="allowedTypes">image/png
,image/gif,image/jpg</param>
-->
<param name="allowedTypes">application/msword</param>
<!-- 配置允许上传的文件大小 -->
<param name="maximumSize">2000000</param> 
</interceptor-ref> 
<!-- 配置系统默认的拦截器 -->
<interceptor-ref name="defaultStack"/>
<result name="success" type="json">
<param name="root">result</param>
</result>
<result name="input">/login.jsp</result>
</action> 

//下载配置

<action name="downFile" class="downFile">
<!-- 配置结果类型为stream的结果 -->
<result type="stream">
<!-- <param name="contentType">image/jpg</param> -->
<param name="contentType">application/msword</param>
<!-- 指定由getFileInput()方法返回被下载文件的InputStream -->
<param name="inputName">targetFile</param>
<param name="contentDisposition">attachment;filename="${fileName}"</param>
</result>
<result name="login">/content/loginForm.jsp</result>

</action>


下载的主要Action:

//注意TargetFile这个名字要和struts配置中的名字要一致

public InputStream getTargetFile()throws Exception{
InputStream inputstream;
Map map=ActionContext.getContext().getSession();
String Down=(String)map.get("Down");
if(Down.equals("00")){
TaskBook taskbook;
taskbook=filedao.queryTaskBook(id).get(0);
if(taskbook!=null){
this.setDownpath(taskbook.getDownpath());
this.setFileName(taskbook.getTitle());
System.out.println("downpath:"+downpath+",title:"+fileName);
}
}
if(Down.equals("01")){
FilePath path;
filelist=filedao.queryFile(id);
path=filelist.get(0);
if(path!=null){
this.setDownpath(path.getDownpath());
this.setFileName(path.getTitle());
System.out.println("downpath:"+downpath+",title:"+fileName);
}
}
OpenReport openreport;
openreport=filedao.queryOpenReport(id).get(0);
//path=filedao.queryFileById(id);
if(openreport!=null){
this.setDownpath(openreport.getDownpath());
this.setFileName(openreport.getTitle());
}

                File file = new File(this.getDownpath());
inputstream=new FileInputStream(file);
return inputstream;
}
public String execute()throws Exception{
System.out.println("id:"+id);
return SUCCESS;
}

猜你喜欢

转载自blog.csdn.net/qq_38634142/article/details/80864932
今日推荐