java jsp Struts2.X 文件上传
/**
*
*操作系統:WIN-XP
*后臺程序:Java
*前端腳本:JavaScript/ExtJs/Html
*?
*做過的嘗試:用form的submit方式提交,在后臺request.getInputStream()取到的值*為null,而*request.getContentLength()是可以正常取值的。用request.getRead()拋出錯誤,request has been *called 網查之后得知,似乎是Struts過濾掉了。另尋他法于是便有了下面代碼。 ? ?
*/
@ParentPackage(StrutsNamespace.PP_JSON)?
@Namespace("")
@Action("savebillfile")?
public class SaveBillFileAction extends SDBaseAction { ?
??
private static final long serialVersionUID = 5156288255337069381L;?
??
? ? private ?String msg;?
? ? private int ErrNo;
? ? private String contentType;?
? ? private File docmentFile;?
? ? private String fileName;?
? ? private Boolean success = false;
? ? private String billtype;
? ? private String billid;
? ?
public String upload() throws Exception {?
? ? Connection con =null;
? ? Statement stm =null;
? ? PreparedStatement pst=null;
? ? ErrNo=0;
? ? msg="";
? ? if(!checkFile())
? ? {
? ? return SUCCESS;
? ? }
? ? if(docmentFile.isFile())
? ? {
? ? FileInputStream in = new FileInputStream(docmentFile);
? ? try{
? ? ? con=ConnectPools.getConnection(getSession());
? ? ? Date dt=new Date();
? ? ? String date = DateFormat.getDateInstance().format(dt);
? ? ? String sSql = "insert into billfiles(billtype,billid,filename,fileext,uploaddate,filesize,opid,filedata)values(?,?,?,?,?,?,?,?)";
? ? ? pst = con.prepareStatement(sSql);
? ? ? pst.setString(1, billtype);
? ? ? pst.setString(2, billid);
? ? ? pst.setString(3, fileName);
? ? ? pst.setString(4, fileName.substring(fileName.indexOf("."), fileName.length()));
? ? ? pst.setString(5, date);
? ? ? pst.setLong(6, in.available());
? ? ? pst.setInt(7, ((EmployInfo)this.getSession().getAttribute("employ")).getId());
? ? ? pst.setBinaryStream(8,in,in.available());
? ? ? pst.executeUpdate(); ? ?
? ? }
? ? catch(Exception e){
? ? ErrNo=1;
? ? ? ?msg=e.getMessage();
? ? }
? ? finally{
? ? try{
? ? pst.close();
? ? stm.close();
? ? con.close();
? ? }catch(Exception e)
? ? {
? ? ErrNo=1;
? ? msg=e.getMessage();
? ? }
? ? }
? ? }
? ?
? ? setSuccess(true);
? ? ? ? return SUCCESS;?
? ? }?
? ? private boolean checkFile() {
// TODO Auto-generated method stub
? ? //檢查文件
? ? ? ? return true;
? ? }
? ? public void setFileName(String fileName) {?
? ? ? ? this.fileName = fileName;?
? ? }?
? ? public void setUploadFileName(String fileName) {?
? ? ? ? this.fileName = fileName;?
? ? }?
? ? public void setUploadContentType(String contentType) {?
? ? ? ? this.contentType = contentType;?
? ? }?
? ? public void setUpload(File docmentFile) {?
? ? ? ? this.docmentFile = docmentFile;?
? ? }?
? ?
? ? public String getMsg() {?
? ? ? ? return msg;?
? ? }?
? ?
? ? public void setSuccess(Boolean success) {
this.success = success;
}
public Boolean getSuccess() {
return success;
}
public void setBilltype(String billtype) {
this.billtype = billtype;
}
public void setBillid(String billid) {
this.billid = billid;
}
public int getErrNo() {
return ErrNo;
}
public void setMsg(String msg) {?
? ? ? ? this.msg = msg;?
? ? }
? ? public void setContentType(String contentType) {?
? ? ? ? this.contentType = contentType;?
? ? }?
}
//到此java代碼全了。。
//接下來是腳本submit之后發現上傳的進度條一直在那里走來走去,我滴個腎,又是一番百度。由于我這不要跳轉,百度上許多方法在我這似乎行不通。。只好改用了Ajax。。
/*
* ?ajax那部分腳本如下
*/
var params={};
Ext.apply(params,{billtype:this.billType});
Ext.apply(params,{billid:this.billId});
Ext.Ajax.request({
? ? ? ? ?url : 'savebillfile!upload.action',
? ? ? ? ?timeout : 10000,
? ? ? ? ?scope : this,
? ? ? ? ?params:params,
? ? ? ? ?isUpload:true,
? ? ? ? ?form:"ufile",/*發現這個form好像有點不一樣。。。ExtJs直接寫出來的form好像有問題?*/
? ? ? ? ?success : function(response)
? ? ? ? ?{
? ? ? ? ? ? ?var str = ???????????? ? ? ? ? ? ? ? ? ? ?response.responseText.substring(response.responseText.indexOf('{'),response.responseText.indexOf('}')+1);//前臺腳本返回來的竟然被<pre>框起來了。好吧,為了正常使用,就手動把json找出來。
? ? ? ? ? ? ??var objFormData = Ext.util.JSON.decode(str);
? ? ? ? ? ? ? ? if(objFormData.ErrNo==0)
? ? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Ext.Msg.show({
? ? ? ? ? ? ? ? ??title:'提示',
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?buttons:Ext.MessageBox.OK,
? ? ? ? ? ? ? ?msg: '上傳成功!',
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??fn:function(button,e)
? ? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? //上傳成功關閉上傳附件窗口
? ? ? ? ? ? ? ? var window = Ext.getCmp('selectfileid');
? ? ? ? ? ? ? ? window.close();
? ? ? ? ? ? ? ? //刷新列表
? ? ? ? ? ? ? ? var win= Ext.getCmp('billfileid');
? ? ? ? ? ? ? ? var grid = win.findById('billfile_grid');
? ? ? ? ? ? ? ? ? ? ? ?var store = grid.store;
? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ?store.load({
? ? ? ? ? ? ? ? ? ? ? ? ? ?params:params
? ? ? ? ? ? ? ? ? ? ? ?});
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? });
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? });
/*
* 最后貼出form的代碼
*/
var fPanel=new Ext.Panel({
? ? ? ? ? ? layout : 'form',
? ? ? ? ? ? height:40,
? ? ? ? ? ? html:'<form id="ufile" enctype="multipart/form-data">請選擇附件<input type="file" name="upload" size="50"></form>'
? ? ? ? });
轉載于:https://blog.51cto.com/bogy324/1602335
總結
以上是生活随笔為你收集整理的java jsp Struts2.X 文件上传的全部內容,希望文章能夠幫你解決所遇到的問題。