1、常用上传代码
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
|
/** *
* @param upload 上传文件
* @param reaName 名称
* @param uploadType 类型
* @return
* @throws IOException
*/
public String uploadFile(File upload, String reaName,
String uploadType) throws IOException {
String uploadpath= "D:/csg" ;
String uploadpath2= "/upload/image/" ;
String fileDir = uploadpath +uploadpath2;
OutputStream os = null ;
InputStream is = null ;
File file= new File(fileDir);
if (!file.exists()){
file.mkdirs();
}
try {
is = new FileInputStream(upload);
os = new FileOutputStream(fileDir + reaName);
int bytesRead = 0 ;
byte [] buffer = new byte [ 8192 ];
while ((bytesRead = is.read(buffer, 0 , 8192 )) != - 1 )
os.write(buffer, 0 , bytesRead);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (os != null ) {
os.close();
}
if (is != null ) {
is.close();
}
}
return uploadpath2+reaName;
}
|
此方法基本上可以上传所有附件
2、上传缩略图代码(按一定比例缩放)
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
|
public String uploadFile(File upload, String reaName,
String uploadType) throws IOException {
String uploadpath= "D:/csg" ;
String uploadpath2= "/upload/image/small/" ;
String fileDir = uploadpath +uploadpath2;
InputStream is = null ;
BufferedImage bis = null ;
is = new FileInputStream(upload);
File file= new File(fileDir);
if (!file.exists()){
file.mkdirs();
}
try {
File reviaryFile = new File(fileDir + "small20130606.jpg" );
AffineTransform transform = new AffineTransform();
bis = ImageIO.read(is);
int w = bis.getWidth();
int h = bis.getHeight();
int newWidth = ( int ) (w * 0 .1D);
int newHight = ( int ) (h * 0 .1D);
transform.setToScale( 0.1 , 0.1 );
AffineTransformOp ato = new AffineTransformOp(transform, null );
BufferedImage bid = new BufferedImage(newWidth, newHight, 5 );
ato.filter(bis, bid);
ImageIO.write(bid, "jpg" , reviaryFile);
} catch (Exception e) {
System.out.println( "上传缩略图失败" );
} finally {
if (is != null ) {
is.close();
}
}
return fileDir;
}
|
3、上传缩略图代码(指定比例缩放)
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
|
public String uploadFile(File upload, String reaName,
String uploadType) throws IOException {
String uploadpath= "D:/csg" ;
String uploadpath2= "/upload/image/small/" ;
String fileDir = uploadpath +uploadpath2;
InputStream is = null ;
BufferedImage bis = null ;
Image srcUpload = null ;
is = new FileInputStream(upload);
File file= new File(fileDir);
if (!file.exists()){
file.mkdirs();
}
try {
srcUpload = ImageIO.read(is);
int newWidth = 0 , newHight = 0 ;
int w = srcUpload.getWidth( null );
int h = srcUpload.getHeight( null );
if (w >= h) {
newWidth = 90 ;
newHight = h * 90 / w;
} else {
newHight = 90 ;
newWidth = w * 90 / h;
}
BufferedImage image = new BufferedImage(newWidth, newHight,
BufferedImage.TYPE_3BYTE_BGR);
image.getGraphics().drawImage(srcUpload.getScaledInstance(newWidth, newHight, Image.SCALE_SMOOTH), 0 , 0 , null );
FileOutputStream out = new FileOutputStream(fileDir + "/" + "small123.jpg" );
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
encoder.encode(image);
image.flush();
out.flush();
out.close();
System.gc();
} catch (Exception e) {
System.out.println( "上传缩略图失败" );
} finally {
if (is != null ) {
is.close();
}
}
return fileDir;
}
|
4、常用下载代码(根据路劲下载)
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
|
Dao dao = new Dao();
UploadFiles files = dao.querykById(id);
String uploadpath = "D:/csg" ;
String path = uploadpath + files.getPath();
InputStream bis = null ;
OutputStream bos = null ;
try {
File fileInstance = new File(path);
if (!fileInstance.exists()) {
System.out.println( "---------下载文件不存在,请联系管理员-------------" );
} else {
HttpServletResponse response = (HttpServletResponse) ActionContext
.getContext().get(ServletActionContext.HTTP_RESPONSE);
bis = new BufferedInputStream( new FileInputStream(fileInstance));
bos = new BufferedOutputStream(response.getOutputStream());
response.setContentType( "application/octet-stream;charset=UTF-8" );
response.setHeader( "Content-Disposition" , "attachment;filename=" + URLEncoder.encode(files.getUploadRealName(), "UTF-8" ));
byte [] buff = new byte [ 1024 ];
int bytesRead;
while (- 1 != (bytesRead = bis.read(buff, 0 , buff.length))) {
// 将buff中的数据写到客户端的内存
bos.write(buff, 0 , bytesRead);
}
bos.close();
bis.close();
}
} catch (IOException e) {
System.out.println( "下载失败" );
} finally {
bos.close();
bis.close();
}
return null ;
}
|
此方法基本可以下载所有附件
5、直接下载(无路径,后台生成之后直接下载适合Excel,word,pdf等)
Excel:
1
2
3
4
5
6
7
8
|
public static void export(HttpServletResponse response,Workbook wb,String fileName) throws Exception{
response.setHeader( "Content-Disposition" , "attachment;filename=" + new String(fileName.getBytes( "utf-8" ), "iso8859-1" ));
response.setContentType( "application/ynd.ms-excel;charset=UTF-8" );
OutputStream out=response.getOutputStream();
wb.write(out);
out.flush();
out.close();
}
|
PDF:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
ByteArrayOutputStream ba = new ByteArrayOutputStream();
PdfWriter writer = PdfWriter.getInstance(document, ba); // 打开文档,生成页头页脚等信息在open之前 document.open(); //省略n行生成table的代码 document.add(table); document.close(); // 关闭文本,释放资源 HttpServletResponse response= super .getResponse();
response.setContentLength(ba.size()); response.setContentType( "application/octet-stream;charset=UTF-8" );
String str= "审核表.pdf" ;
response.setHeader( "Content-Disposition" , "attachment;filename=" + new String(str.getBytes( "utf-8" ), "iso8859-1" ));
ServletOutputStream out = response.getOutputStream(); ba.writeTo(out); out.flush(); |
ps:直接下载就是在生成之后直接将文本信息传进来,就行了。而Excel这个例子是需要将生成之后的Workbook返回去,传给export方法!PDF,Excel,word直接下载方法基本类似!
上传下载说白了,其实就是输入,输出流的问题!了解输入输出流的本质这些基本上就不是问题了!
以上代码都是经本人测试之后拷贝出来直接可以使用!
本文转自 小夜的传说 51CTO博客,原文链接:http://blog.51cto.com/1936625305/1423041,如需转载请自行联系原作者