本文實例為大家分享了java文件上傳下載的具體代碼,供大家參考,具體內容如下
文件上傳
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
|
@requestmapping (value= "/uploadfile" ,method=requestmethod.post) public resultobject uploadfiles( @requestparam ( "file" )multipartfile file,httpservletrequest request){ resultobject rs = null ; //返回上傳完成信息 string uploaddir = "files" ; //上傳目錄,文件保存在webapp下的files文件中 if (!file.isempty()) { //可以對user做一些操作如存入數據庫 //以下的代碼是將文件file重新命名并存入tomcat的webapp目錄下項目的下級目錄 string filerealname = file.getoriginalfilename(); //獲得原始文件名; /*int pointindex = filerealname.indexof("."); //點號的位置 string filesuffix = filerealname.substring(pointindex); //截取文件后綴 uuid fileid = uuid.randomuuid(); //生成文件的前綴包含連字符 string savedfilename = fileid.tostring().replace("-", "").concat(filesuffix); //文件存取名 */ string saveddir = request.getsession().getservletcontext().getrealpath(uploaddir); //獲取服務器指定文件存取路徑 file savedfile = new file(saveddir, filerealname); boolean iscreatesuccess; try { iscreatesuccess = savedfile.createnewfile(); if (iscreatesuccess) { file.transferto(savedfile); //轉存文件 rs = resultobject.getsuccessresult( "上傳文件成功" ); long size = file.getsize(); //獲取文件大小 rs.setdata(uploaddir+filerealname); } else { rs = resultobject.getfailresult( "請修改文件名,重新上傳" ); } } catch (ioexception e) { e.printstacktrace(); } } else { rs = resultobject.getfailresult( "文件不能為空" ); } return rs; } |
文件下載
1
2
3
4
5
|
@requestmapping (value = "/filterpermission/appdownload" , method = requestmethod.get) public void appdownload(httpservletrequest request, httpservletresponse response) { //url是上面文件上傳的url download(url,request,response); } |
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
|
public string download(string filepath, httpservletrequest request, httpservletresponse response) { bufferedinputstream bis = null ; bufferedoutputstream bos = null ; try { //獲取文件名 string filename = filepath.substring(filepath.lastindexof( "/" )+ 1 ); response.setcharacterencoding( "utf-8" ); response.setcontenttype( "application/octet-stream" ); //response.setcontenttype("application/force-download"); //處理下載彈出框名字的編碼問題 response.setheader( "content-disposition" , "attachment;filename=" + new string( filename.getbytes( "gb2312" ), "iso8859-1" )); //獲取文件的下載路徑 string path = request.getsession().getservletcontext().getrealpath(filepath); //利用輸入輸出流對文件進行下載 inputstream inputstream = new fileinputstream( new file(path)); //設置文件大小 response.setheader( "content-length" , string.valueof(inputstream.available())); bis = new bufferedinputstream(inputstream); //構造讀取流 bos = new bufferedoutputstream(response.getoutputstream()); //構造輸出流 byte [] buff = new byte [ 1024 ]; int bytesread; //每次讀取緩存大小的流,寫到輸出流 while (- 1 != (bytesread = bis.read(buff, 0 , buff.length))) { bos.write(buff, 0 , bytesread); } response.flushbuffer(); //將所有的讀取的流返回給客戶端 } catch (filenotfoundexception e) { e.printstacktrace(); } catch (ioexception e) { e.printstacktrace(); } finally { try { if ( null != bis){ bis.close(); } if ( null != bos){ bos.close(); } } catch (ioexception e){ system.out.println( "下載文件失敗," + "文件路徑:" +filepath+e); logger.error( "文件下載失敗!" , e); } } // 返回值要注意,要不然就出現下面這句錯誤! //java+getoutputstream() has already been called for this response return null ; } |
以上所述是小編給大家介紹的java文件上傳下載詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!
原文鏈接:https://www.cnblogs.com/gczmn/p/9921479.html