传智播客bbs项目,发表主题附件的上传与下载
来源:互联网 发布:刀剑乱舞极化短刀数据 编辑:程序博客网 时间:2024/04/27 16:06
今天继续学习bbs项目,汤老师添加了发表主题附件的上传与下载,并对其实现进行了讲解。实现的时候要注意数据库的字符集编码以及上传下载的字符集编码
汤老师先讲解了上传文件遇到的几个问题:
1,上传同名的文件, 则后上传文件的会覆盖已经上传的同名文件,要避免服务器端保存文件的同名。 且中文文件名的显示问题。
2,一个目录下放了很多文件, 则打开的速度就会很慢, 应分类存放,没个文件用日期生成文件上传的当天目录。
3,文件路径问题, 应使用相对路径。
4,控制文件的大小, 超过限制的不能上传,以免填满服务器。
文件上传使用struts中的FormFile 接口,
org.apache.struts.upload.FormFile formfile 用于 file upload它是一个接口 代表一个从客户端上传的文件,它是upload包中唯一的struts应用程序可以直接引用的接口。
主要方法
void destroy()
销毁上传文件的所有内容
java.lang.String getContentType()
获得上传文件的字符集编码类型
byte[] getFileData()
以字节数组的形式返回整个文件的数据
java.lang.String getFileName()
返回文件的文件名
int getFileSize()
返回文件的大小
java.io.InputStream getInputStream()
返回文件的字节输入流
void setContentType(java.lang.String contentType)
设置上传文件的字符集编码类型
void setFileName(java.lang.String fileName)
设置文件的名字
void setFileSize(int fileSize)
设置文件的大小
编写saveFile方法 把上传文件保存到服务器。
public static String saveFile(HttpServletRequest request, FormFile file) {
//用当天日期设置文件路径
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd/");
String path = sdf.format(new Date());
String storePath = request.getSession().getServletContext().getRealPath("/upload") + File.separator
+ path;
// 如果文件夹不存在,就递归的创建
if (!new File(storePath).exists()) {
new File(storePath).mkdirs();
}
//使用UUID类 确保保存的文件名的唯一
String uuidFilename = UUID.randomUUID().toString();
path += uuidFilename;
//设置上传文件在服务器应用程序中的路径
storePath += uuidFilename;
FileOutputStream out = null;
try {
out = new FileOutputStream(storePath);
out.write(file.getFileData());
} catch (Exception e) {
throw new RuntimeException(e);
} finally {
try {
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return path;
}
开始没有创建upload目录,抛出了异常java.io.FileNotFoundException,这是因为FileOutputStream输出文件到指定文件路径,如果没有这个路径,FileOutputStream不会创建,它只能创建文件。
文件下载
1. 设置contentType为application/x-msdownload
2.Header: Content-Disposition=attachment;filename=xxx.yy
3 .读取文件的路径要设置好,不然找不到要下载的文件,抛出异常。
public ActionForward download(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws Exception {
int id =RequestParameterUtil.getInt(request, "id", 0);
Attachment attachment=attachmentService.getAttachment(id);
if(attachment==null){
return null;
}
//对文件名进行URL编码
String fileName=URLEncoder.encode(attachment.getFilename(), "utf-8");
response.setContentType("application/x-msdownload");
response.addHeader("Content-Disposition", "attachment;filename="+fileName);
String path=request.getSession().getServletContext().getRealPath("/")+"/upload/"+attachment.getPath();
FileInputStream in=null;
try{
in=new FileInputStream(path);
OutputStream out=response.getOutputStream();
byte [] buf=new byte[4096];
for(int len=-1;(len=in.read(buf))!=-1;){
out.write(buf, 0, len);
}
out.flush();
}finally{
if(in!=null)
in.close();
}
return null;
}
- 传智播客bbs项目,发表主题附件的上传与下载
- 附件的上传与下载
- FTP附件上传与下载
- 设计之附件上传与下载
- 关于附件的上传和下载
- JEECG表单附件的上传和下载
- 获得上传附件的下载路径
- 附件上传、下载
- 带有附件的上传,下载,一个多个附件的上传,下载及测试类
- Struts2.0实现的文件上传(单附件和多附件)以及附件下载功能
- Struts2.0实现的文件上传(单附件和多附件)以及附件下载功能
- Struts2.0实现的文件上传(单附件和多附件)以及附件下载功能
- java上传附件,批量下载附件
- SERVER 2003不能上传大附件、无法下载超过4M的附件、大附件上传超时
- 附件上传,下载,查看,删除
- 解决WordPress无法上传媒体文件以及无法下载和安装主题与插件的问题
- jqueryform 上传附件时解决ie下 下载的问题
- 平台上传的附件下载后打开为空白原因
- Struts2学习笔记九
- 简单的C#文本文件读写
- Gridview利用DataFormatString属性设置数据格式
- 电动车跷跷板系统设计
- 江湖传闻的微软面试题
- 传智播客bbs项目,发表主题附件的上传与下载
- Tomcat6.0用户手册--怎样进行Realm配置
- Oracle关于时间/日期的操作
- Java栈与堆
- 手机网站上线http://www.shoujiwz.com
- C字符串函数
- 可以让你少奋斗10年的工作经验
- 搬家
- 第一次安装Oracle10后不能登陆问题的解决