Administrator
2022-09-14 58d006e05dcf2a20d0ec5367dd03d66a61db6849
提交 | 用户 | 时间
58d006 1 package com.mandi.servlet.file.impl;
A 2
3 import java.io.BufferedInputStream;
4 import java.io.File;
5 import java.io.FileInputStream;
6 import java.io.IOException;
7 import java.io.OutputStream;
8 import java.net.URLEncoder;
9 import java.nio.file.Files;
10 import java.nio.file.Path;
11 import java.nio.file.Paths;
12 import java.util.ArrayList;
13 import java.util.HashMap;
14 import java.util.Iterator;
15 import java.util.List;
16 import java.util.Map;
17 import java.util.Map.Entry;
18 import java.util.UUID;
19
20 import javax.servlet.http.HttpServletRequest;
21 import javax.servlet.http.HttpServletResponse;
22
23 import org.apache.commons.fileupload.FileItem;
24 import org.apache.commons.fileupload.disk.DiskFileItemFactory;
25 import org.apache.commons.fileupload.servlet.ServletFileUpload;
26 import org.apache.log4j.Logger;
27 import org.springframework.stereotype.Service;
28 import org.springframework.web.multipart.MultipartFile;
29 import org.springframework.web.multipart.MultipartHttpServletRequest;
30
31 import com.mandi.servlet.file.FileLoad;
32 @Service
33 public class FileLoadImpl implements FileLoad{
34     private Logger log=Logger.getLogger(FileLoadImpl.class);
35     @SuppressWarnings("unchecked")
36     @Override
37     public String uploadFile(String dest/*相对位置*/, HttpServletRequest request,boolean randname) {
38         String directory="";
39         String filenames="";//
40         if(dest==null)
41             directory=request.getSession().getServletContext().getRealPath("");
42         else
43             directory=request.getSession().getServletContext().getRealPath(dest);
44         
45         File file=new File(directory);
46         if(!file.exists())
47         {
48             file.mkdirs();
49         }
50         DiskFileItemFactory dfif=new DiskFileItemFactory(); 
51         ServletFileUpload  sf=new ServletFileUpload(dfif);
52         sf.setHeaderEncoding("utf-8");
53         List<FileItem> list=null;
54         try{
55             list=sf.parseRequest(request);
56             Iterator<FileItem> it=list.iterator();
57             while(it.hasNext())
58             {
59                 FileItem fi=it.next();
60                 if(fi.isFormField())
61                     continue;
62                 String name1=fi.getName();
63                 if(randname==true)
64                 {
65                     int point=name1.lastIndexOf(".");
66                     if(point>0 && name1.length()>(point+1))
67                     {
68                         name1=name1.substring(point);
69                     }
70                     name1=UUID.randomUUID()+name1;
71                 }
72                 String filename="";//file.getPath();
73                 if(directory.endsWith(File.separator))
74                     filename=directory+name1;
75                 else
76                     filename=directory+File.separator+name1;
77                 File file1=new File(filename);
78                 fi.write(file1);
79                 filenames=dest.endsWith(File.separator)?(dest+name1):(dest+"/"+name1);//file relative path
80                 filenames=request.getServletContext().getContextPath()+filenames;
81             }
82         }catch (Exception e) {
83             log.error("uploadFile error");
84         }
85         
86         return filenames;
87     }
88     /**
89      * 
90      * @return 
91      * @author mengly 
92      * @version 创建时间:2016年8月6日 下午5:42:49
93      */
94     public Map<String, Object> uploadFileRP(String dir,MultipartHttpServletRequest request,boolean randname){
95         if(dir==null)
96             dir=request.getSession().getServletContext().getRealPath("");
97         Path p=Paths.get(dir);
98         if(!Files.exists(p))
99             try {
100                 Files.createDirectories(p);
101             } catch (IOException e) {
102                 e.printStackTrace();
103                 return null;
104             }
105         if(!dir.endsWith(File.separator))
106             dir+=File.separator;
107         Map<String,MultipartFile> mpfs=request.getFileMap();
108         for (Entry<String,MultipartFile> en : mpfs.entrySet()) {
109             MultipartFile mf=en.getValue();
110             if(mf.isEmpty())
111                 continue;
112             Map<String, Object> mp=new HashMap<String, Object>();
113             String uuid=UUID.randomUUID().toString();
114             mp.put("name", mf.getOriginalFilename());
115             mp.put("size", mf.getSize());
116             mp.put("uuid", uuid);
117             
118             String fullp=dir+uuid+mf.getOriginalFilename();
119             Path pf=Paths.get(fullp);
120             try {
121                 Files.copy(mf.getInputStream(), pf);
122                 mp.put("url", fullp);
123                 return mp;
124             } catch (IOException e) {
125                 e.printStackTrace();
126             }
127         }
128         return null;
129     }
130     
131     @SuppressWarnings("unchecked")
132     @Override
133     public List<Object> uploadFile_map(String dest,HttpServletRequest request,boolean randname){
134         List<Object> list1=new ArrayList<Object>();
135         String directory="";
136         String filenames="";//
137         
138         if(dest==null)
139             directory=request.getSession().getServletContext().getRealPath("");
140         else
141             directory=request.getSession().getServletContext().getRealPath(dest);
142         
143         File file=new File(directory);
144         if(!file.exists())
145         {
146             file.mkdirs();
147         }
148         DiskFileItemFactory dfif=new DiskFileItemFactory(); 
149         ServletFileUpload  sf=new ServletFileUpload(dfif);
150         sf.setHeaderEncoding("utf-8");
151         List<FileItem> list=null;
152         try{
153             list=sf.parseRequest(request);
154             Iterator<FileItem> it=list.iterator();
155             while(it.hasNext())
156             {
157                 Map<String, Object> mp=new HashMap<String, Object>();
158                 FileItem fi=it.next();
159                 mp.put("name", fi.getName());
160                 mp.put("size", fi.getSize());
161                 if(fi.isFormField())
162                     continue;
163                 String name1=fi.getName();
164                 if(randname==true)
165                 {
166                     int point=name1.lastIndexOf(".");
167                     if(point>0 && name1.length()>(point+1))
168                     {
169                         name1=name1.substring(point);
170                     }
171                     name1=UUID.randomUUID()+name1;
172                 }
173                 String filename="";//file.getPath();
174                 if(directory.endsWith(File.separator))
175                     filename=directory+name1;
176                 else
177                     filename=directory+File.separator+name1;
178                 File file1=new File(filename);
179                 fi.write(file1);
180                 filenames=dest.endsWith(File.separator)?(dest+name1):(dest+"/"+name1);//file relative path
181                 mp.put("url", filenames);
182                 list1.add(mp);
183             }
184         }catch (Exception e) {
185             log.error("uploadFile error");
186         }
187         return list1;
188     }
189     
190     @SuppressWarnings("unchecked")
191     @Override
192     public List<Object> uploadFile_map(String dest,HttpServletRequest request,boolean randname,long size){
193         List<Object> list1=new ArrayList<Object>();
194         String directory="";
195         String filenames="";//
196         if(dest==null)
197             directory=request.getSession().getServletContext().getRealPath("");
198         else
199             directory=request.getSession().getServletContext().getRealPath(dest);
200         
201         File file=new File(directory);
202         if(!file.exists())
203         {
204             file.mkdirs();
205         }
206         DiskFileItemFactory dfif=new DiskFileItemFactory(); 
207         ServletFileUpload  sf=new ServletFileUpload(dfif);
208         sf.setHeaderEncoding("utf-8");
209         List<FileItem> list=null;
210         try{
211             list=sf.parseRequest(request);
212             Iterator<FileItem> it=list.iterator();
213             while(it.hasNext())
214             {
215                 Map<String, Object> mp=new HashMap<String, Object>();
216                 FileItem fi=it.next();
217                 mp.put("name", fi.getName());
218                 mp.put("size", fi.getSize());
219                 if(fi.isFormField())
220                 {
221                     continue;
222                 }
223                 if(size!=0)
224                 {
225                     if(fi.getSize()>size)
226                     {
227                         log.info("file size 超过限制值!!");
228                         continue;
229                     }
230                 }
231                 String name1=fi.getName();
232                 if(randname==true)
233                 {
234                     int point=name1.lastIndexOf(".");
235                     if(point>0 && name1.length()>(point+1))
236                     {
237                         name1=name1.substring(point);
238                     }
239                     name1=UUID.randomUUID()+name1;
240                 }
241                 String filename="";//file.getPath();
242                 if(directory.endsWith(File.separator))
243                     filename=directory+name1;
244                 else
245                     filename=directory+File.separator+name1;
246                 File file1=new File(filename);
247                 fi.write(file1);
248                 filenames=dest.endsWith(File.separator)?(dest+name1):(dest+"/"+name1);//file relative path
249                 mp.put("url", filenames);
250                 list1.add(mp);
251             }
252         }catch (Exception e) {
253             log.error("uploadFile error");
254         }
255         return list1;
256     }
257     
258     @Override
259     public Map<String, Object> uploadFile_map(String dest,HttpServletRequest request,FileItem fi,boolean randname,long size){
260         if(fi==null)
261             return null;
262         String directory="";
263         String filenames="";//
264         if(dest==null)
265             directory=request.getSession().getServletContext().getRealPath("");
266         else
267             directory=request.getSession().getServletContext().getRealPath(dest);
268         
269         File file=new File(directory);
270         if(!file.exists())
271         {
272             file.mkdirs();
273         }
274         Map<String, Object> mp=new HashMap<String, Object>();
275         try{
276                 mp.put("name", fi.getName());
277                 mp.put("size", fi.getSize());
278                 if(fi.isFormField())
279                 {
280                     return null;
281                 }
282                 if(size!=0)
283                 {
284                     if(fi.getSize()>size)
285                     {
286                         log.info("file size 超过限制值!!");
287                         return null;
288                     }
289                 }
290                 String name1=fi.getName();
291                 if(randname==true)
292                 {
293                     int point=name1.lastIndexOf(".");
294                     if(point>0 && name1.length()>(point+1))
295                     {
296                         name1=name1.substring(point);
297                     }
298                     name1=UUID.randomUUID()+name1;
299                 }
300                 String filename="";//file.getPath();
301                 if(directory.endsWith(File.separator))
302                     filename=directory+name1;
303                 else
304                     filename=directory+File.separator+name1;
305                 File file1=new File(filename);
306                 fi.write(file1);
307                 filenames=dest.endsWith(File.separator)?(dest+name1):(dest+"/"+name1);//file relative path
308                 mp.put("url", filenames);
309         }catch (Exception e) {
310             log.error("uploadFile error");
311         }
312         return mp;
313     }
314     
315     @Override
316     public void downloadFile(String displayname, String source,
317             HttpServletResponse response) {
318         if(source==null)
319             return;
320         File file=new File(source);
321         if(!file.exists())
322             return;
323         response.setContentType("application/x-download");
324         if(displayname==null)
325             displayname=file.getName();
326         try{
327             displayname=URLEncoder.encode(displayname,"utf-8");
328             response.setHeader("Content-Disposition", "attachment; filename=\""+displayname+"\""); 
329             FileInputStream fis=new FileInputStream(file);
330             BufferedInputStream bis=new BufferedInputStream(fis);
331             OutputStream out1=response.getOutputStream();
332             byte[] bytes=new byte[1024*4];
333             int length=-1;
334             while((length=bis.read(bytes))!=-1)
335             {
336                 out1.write(bytes, 0, length);
337             }
338             out1.flush();
339             bis.close();
340             fis.close();
341             out1.close();
342         }catch (Exception e) {
343             log.error("downloadFile error");
344         }
345         file.delete();
346     }
347
348     @Override
349     public void downloadFile(String desplayname, String source,
350             HttpServletResponse response, HttpServletRequest request) {
351         File file=new File(source);
352         if(!file.exists())
353             return;
354         long range=0;
355         if(request.getHeader("Range")!=null)
356         {
357              response . setStatus ( javax . servlet . http . HttpServletResponse . SC_PARTIAL_CONTENT ) ;
358              range=Long . parseLong ( request . getHeader ( "Range" ) . replaceAll ( "bytes=" , "" ) . replaceAll ( "-" , "" ) ) ;
359         }
360         response . setHeader ( "Content-Length" ,   new   Long ( file.length()  -  range ) . toString ( ) ) ; 
361         if(range!=0)
362         {
363              response.setHeader( "Content-Range", "bytes "   +   new  Long(range).toString()+ "-"+new Long(file.length()-1).toString()+"/"+new Long(file.length()).toString());   
364         }
365         response.setContentType("application/x-download");
366         response.setContentType ( "application/octet-stream"); 
367         try {
368             String fn=URLEncoder.encode(desplayname,"utf-8");
369             response . setHeader ( "Content-Disposition","attachment;filename=\""+fn+"\""); 
370             
371             FileInputStream fis=new FileInputStream(file);
372             BufferedInputStream bis=new BufferedInputStream(fis);
373             bis.skip(range);
374             OutputStream out1=response.getOutputStream();
375             byte[] bytes=new byte[1024*4];
376             int length=-1;
377             while((length=bis.read(bytes))!=-1)
378             {
379                 out1.write(bytes, 0, length);
380             }
381             out1.flush();
382             bis.close();
383             fis.close();
384         } catch (Exception e) {
385             log.error("downloadFile error"+e.getMessage());
386         }finally{
387             
388         }
389     }
390
391     @Override
392     public String realpath2path(String localpath, HttpServletRequest request) {
393         String realpath=request.getServletContext().getRealPath("");
394         if(localpath==null)
395             return "/";
396         if(localpath.lastIndexOf(realpath)!=0)
397             return "/";
398         realpath=localpath.substring(realpath.length());
399         if(realpath.length()>0 && !realpath.startsWith(File.separator)&&!realpath.startsWith("/"))
400         {
401             realpath="/"+realpath;
402         }
403         realpath=realpath.replaceAll("\\\\", "/");
404         return realpath;
405     }
406     
407 }