文件的上传处理和下载处理

文件上传处理:
jspSmartupload上传组件
1、页面编写要点:
<form>必须method=post  enctype=multiprt/form-data

<form action="upload.do" method="post" enctype="multipart/form-data">
<input type="file" name="photo"/>
<input type="submit" value="上传数据"/>
</form>
2、添加smartupload组件,并在控制器中处理文件上传
SmartUpload su = new SmartUpload();
su.initialize(this.getServletConfig(), request, response);
su.setAllowedFilesList("jpg,png,gif");
su.setMaxFileSize(2*1024*1024);
try {
su.upload();
Files fs=su.getFiles();
if(fs.getCount()>0){
for(int i=0;i<fs.getCount();i++){
File f=fs.getFile(i);
f.saveAs("upload/"+f.getFileName());
}
}
} catch (Exception e) {
throw new ServletException(e);
}

3、如果上传文件格式不是jpg或者png或者gif,或者上传的文件大于2M,则会出异常

4、如果除了<input type="file">文件域外还有普通输入域<input name="username"/>,如何接收普通输入域的数据?
如果直接使用request.getParameter("username")是不能获取数据的,解决方案是使用smartupload重新封装的request对象
Request req = su.getRequest();这个语句必须在su.upload()方法执行之后才能获取数据

5、一般在上传处理中是不允许原名存放的,需要上传时动态生成一个新的文件名,而且希望不会重复
String str=UUID.randomUUID().toString();
str=str.replaceAll("-","");
System.out.println(str.length());   --长度为32位

private String generateFileName(String fileExt){
String str=UUID.randomUUID().toString();
str=str.replace("-","");
return str+fileExt;
}

String fileExt="."+f.getFileExt();
f.saveAs("upload/" + this.generateFileName(fileExt));

文件下载
1、下载时必须设置一个响应头
Content-disposition   值为attachment;filename=默认文件名
告知浏览器传递的数据以附件的方式打开---文件另存为,而这里的默认名称就是上面filename的设置

2、经下载的内容写入到输出字节流中即可


String fname = request.getParameter("fname");// 下载的文件名称
String realPath = request.getRealPath("upload/");
File ff = new File(realPath, fname);
if (ff.exists()) {
response.setHeader("Content-disposition", "attachment;filename=" + fname);
ServletOutputStream sos = response.getOutputStream();
FileInputStream fis = new FileInputStream(ff);
byte[] buffer=new byte[8192];
int len=0;
while((len=fis.read(buffer))>0){
sos.write(buffer,0,len);
}
sos.close();
fis.close();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值