传智播客bbs项目,发表主题附件的上传与下载

2024-04-26 07:32

本文主要是介绍传智播客bbs项目,发表主题附件的上传与下载,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

      今天继续学习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项目,发表主题附件的上传与下载的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/936959

相关文章

Java实现文件图片的预览和下载功能

《Java实现文件图片的预览和下载功能》这篇文章主要为大家详细介绍了如何使用Java实现文件图片的预览和下载功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... Java实现文件(图片)的预览和下载 @ApiOperation("访问文件") @GetMapping("

一文教你如何将maven项目转成web项目

《一文教你如何将maven项目转成web项目》在软件开发过程中,有时我们需要将一个普通的Maven项目转换为Web项目,以便能够部署到Web容器中运行,本文将详细介绍如何通过简单的步骤完成这一转换过程... 目录准备工作步骤一:修改​​pom.XML​​1.1 添加​​packaging​​标签1.2 添加

tomcat多实例部署的项目实践

《tomcat多实例部署的项目实践》Tomcat多实例是指在一台设备上运行多个Tomcat服务,这些Tomcat相互独立,本文主要介绍了tomcat多实例部署的项目实践,具有一定的参考价值,感兴趣的可... 目录1.创建项目目录,测试文China编程件2js.创建实例的安装目录3.准备实例的配置文件4.编辑实例的

Python下载Pandas包的步骤

《Python下载Pandas包的步骤》:本文主要介绍Python下载Pandas包的步骤,在python中安装pandas库,我采取的方法是用PIP的方法在Python目标位置进行安装,本文给大... 目录安装步骤1、首先找到我们安装python的目录2、使用命令行到Python安装目录下3、我们回到Py

springboot集成Deepseek4j的项目实践

《springboot集成Deepseek4j的项目实践》本文主要介绍了springboot集成Deepseek4j的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录Deepseek4j快速开始Maven 依js赖基础配置基础使用示例1. 流式返回示例2. 进阶

SpringBoot项目启动报错"找不到或无法加载主类"的解决方法

《SpringBoot项目启动报错找不到或无法加载主类的解决方法》在使用IntelliJIDEA开发基于SpringBoot框架的Java程序时,可能会出现找不到或无法加载主类com.example.... 目录一、问题描述二、排查过程三、解决方案一、问题描述在使用 IntelliJ IDEA 开发基于

SpringBoot项目使用MDC给日志增加唯一标识的实现步骤

《SpringBoot项目使用MDC给日志增加唯一标识的实现步骤》本文介绍了如何在SpringBoot项目中使用MDC(MappedDiagnosticContext)为日志增加唯一标识,以便于日... 目录【Java】SpringBoot项目使用MDC给日志增加唯一标识,方便日志追踪1.日志效果2.实现步

Java实现数据库图片上传与存储功能

《Java实现数据库图片上传与存储功能》在现代的Web开发中,上传图片并将其存储在数据库中是常见的需求之一,本文将介绍如何通过Java实现图片上传,存储到数据库的完整过程,希望对大家有所帮助... 目录1. 项目结构2. 数据库表设计3. 实现图片上传功能3.1 文件上传控制器3.2 图片上传服务4. 实现

使用国内镜像源优化pip install下载的方法步骤

《使用国内镜像源优化pipinstall下载的方法步骤》在Python开发中,pip是一个不可或缺的工具,用于安装和管理Python包,然而,由于默认的PyPI服务器位于国外,国内用户在安装依赖时可... 目录引言1. 为什么需要国内镜像源?2. 常用的国内镜像源3. 临时使用国内镜像源4. 永久配置国内镜

使用mvn deploy命令上传jar包的实现

《使用mvndeploy命令上传jar包的实现》本文介绍了使用mvndeploy:deploy-file命令将本地仓库中的JAR包重新发布到Maven私服,文中通过示例代码介绍的非常详细,对大家的学... 目录一、背景二、环境三、配置nexus上传账号四、执行deploy命令上传包1. 首先需要把本地仓中要