本文實例為大家分享了SpringMvc3+extjs4實現上傳與下載的具體代碼,供大家參考,具體內容如下
最近生活過的很充實,人一直在不停的忙碌著學習新東西。這是我最近遇到的問題,我找度娘n了很久,終于找到了解決方案!
前臺代碼:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
<script> Ext.onReady( function () { Ext.create( 'Ext.form.Panel' , { title : '文件上傳' , width : 400, bodyPadding : 10, frame : true , renderTo : document.body, items : [ { xtype : 'filefield' , name : '文件' , fieldLabel : 'File' , labelWidth : 50, msgTarget : 'side' , allowBlank : false , anchor : '100%' , buttonText : '請選擇文件...' } ], buttons : [ { text : '上傳' , handler : function () { var form = this .up( 'form' ).getForm(); if (form.isValid()) { form.submit({ url : '根路徑/fileUploadDown/fileUpload' , waitMsg : '正在上傳文件中...' , success : function (fp, o) { Ext.Msg.alert( '上傳文件成功!' ); } }); } } } ] }); }); </script> |
后臺代碼:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
|
/** *記錄返回結果*/ class ExtJSFormResult { private boolean success; public boolean isSuccess() { return success; } public void setSuccess( boolean success) { } public String toString() { return "{success:" + this .success + "}" ; } } class FileUploadBean { private CommonsMultipartFile file; public CommonsMultipartFile getFile() { return file; } public void setFile(CommonsMultipartFile file) { this .file = file; } } /** * 文件的上傳與下載 * @author Administrator * */ @Controller @RequestMapping (value = "/fileUploadDown" ) public class FileUploadAndDownController { private static int countter= 1 ; //定義一個計數器,用于上傳文件的重命名 @Autowired private ProAnnexDao<ProAnnex> proAnnextDao; public void setProAnnextDao(ProAnnexDao<ProAnnex> proAnnextDao) { this .proAnnextDao = proAnnextDao; } @RequestMapping (value= "fileUpload" ,method = RequestMethod.POST) public @ResponseBody String create(RedirectAttributes redirectAttributes,FileUploadBean uploadItem, BindingResult result,HttpSession session){ //獲取根路徑 String uploadFolderPath = session.getServletContext().getRealPath( "/" ); ExtJSFormResult extjsFormResult = new ExtJSFormResult(); try { if (result.hasErrors()) { for (ObjectError error : result.getAllErrors()) { System.err.println( "Error: " + error.getCode() + " - " + error.getDefaultMessage()); } // 設置ExtJS返回 - error extjsFormResult.setSuccess( false ); return extjsFormResult.toString(); } MultipartFile file = uploadItem.getFile(); String fileName = null ; InputStream inputStream = null ; OutputStream outputStream = null ; if (file.getSize()> 0 ){ System.out.println( "File Size:::" + file.getSize()); if (file.getSize()> 5242880 ){ System.out.println( "File Size:::" + file.getSize()); extjsFormResult.setSuccess( false ); return "error" ; } inputStream = file.getInputStream(); File newFile = new File(uploadFolderPath + "fileUpload/" ); //如果文件路徑不存在就新建一個 if (!newFile.exists()){ newFile.mkdirs(); } //獲取文件名 String name=file.getOriginalFilename(); //從數據庫中查詢存在此類文件名否 Long count=proAnnextDao.isRepeatName(name); //如果存在一樣的文件名,就進行從命名 if (count> 0 ) { name=name.substring( 0 , name.lastIndexOf( "." ))+ "(" +(countter++)+ ")" +name.substring(name.lastIndexOf( "." )); } fileName = uploadFolderPath + "fileUpload/" + name; outputStream = new FileOutputStream(fileName); int readBytes = 0 ; byte [] buffer = new byte [ 10000 ]; while ((readBytes = inputStream.read(buffer, 0 , 10000 )) != - 1 ) { outputStream.write(buffer, 0 , readBytes); } outputStream.close(); inputStream.close(); } // 設置ExtJS返回 - sucsess extjsFormResult.setSuccess( true ); } catch (Exception e) { e.printStackTrace(); // 設置ExtJS返回 - error extjsFormResult.setSuccess( false ); } return extjsFormResult.toString(); } } |
springMvc.xml(此文件名可能跟項目的實際情況有區別)中的配置:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<!-- 上傳文件,限制大小的配置 --> < bean id = "multipartResolver" class = "org.springframework.web.multipart.commons.CommonsMultipartResolver" > <!--resolveLazily屬性啟用是為了推遲文件解析,以便在Upload中捕獲文件大小異常--> < property name = "resolveLazily" value = "true" /> < property name = "maxUploadSize" value = "5242880" /> </ bean > <!-- 將無法mapping到Controller的path交給default servlet handler處理 --> < mvc:default-servlet-handler /> <!-- 使用默認的servlet來響應靜態文件 --> <!-- 文件的上傳與下載 --> < mvc:view-controller path = "/" view-name = "redirect:/fileUploadDown" /> |
以上的就是上傳文件了。
那下載呢?
下載比較簡單,代碼如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
@RequestMapping ( "/downloadFile" ) public void download( @Valid @ModelAttribute ( "downLoadName" ) String downLoadName, HttpServletResponse response,HttpSession session,BindingResult result,HttpServletRequest request) throws IOException { response.setCharacterEncoding( "UTF-8" ); request.setCharacterEncoding( "UTF-8" ); //獲取文件的路徑 String url=session.getServletContext().getRealPath( "/" )+ "/fileUpload/" +downLoadName; System.out.println(url); File file= new File(url); InputStream input = FileUtils.openInputStream(file); byte [] data = IOUtils.toByteArray(input); //System.out.println("文件名:"+downLoadName); response.reset(); //設置響應的報頭信息(中文問題解決辦法) response.setHeader( "content-disposition" , "attachment;fileName=" +URLEncoder.encode(downLoadName, "UTF-8" )); response.addHeader( "Content-Length" , "" + data.length); response.setContentType( "application/octet-stream; charset=UTF-8" ); IOUtils.write(data, response.getOutputStream()); IOUtils.closeQuietly(input); } |
在界面上只要有一個連接地址:如:window.location.href="根路徑/fileUploadDown/downfile/downLoadName="+name;這樣就可以下載了.... 超連接的寫法基本一樣,這里就不多說了.
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。