传智播客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

相关文章

Spring Boot 结合 WxJava 实现文章上传微信公众号草稿箱与群发

《SpringBoot结合WxJava实现文章上传微信公众号草稿箱与群发》本文将详细介绍如何使用SpringBoot框架结合WxJava开发工具包,实现文章上传到微信公众号草稿箱以及群发功能,... 目录一、项目环境准备1.1 开发环境1.2 微信公众号准备二、Spring Boot 项目搭建2.1 创建

IntelliJ IDEA2025创建SpringBoot项目的实现步骤

《IntelliJIDEA2025创建SpringBoot项目的实现步骤》本文主要介绍了IntelliJIDEA2025创建SpringBoot项目的实现步骤,文中通过示例代码介绍的非常详细,对大家... 目录一、创建 Spring Boot 项目1. 新建项目2. 基础配置3. 选择依赖4. 生成项目5.

SQL server数据库如何下载和安装

《SQLserver数据库如何下载和安装》本文指导如何下载安装SQLServer2022评估版及SSMS工具,涵盖安装配置、连接字符串设置、C#连接数据库方法和安全注意事项,如混合验证、参数化查... 目录第一步:打开官网下载对应文件第二步:程序安装配置第三部:安装工具SQL Server Manageme

深度解析Java项目中包和包之间的联系

《深度解析Java项目中包和包之间的联系》文章浏览阅读850次,点赞13次,收藏8次。本文详细介绍了Java分层架构中的几个关键包:DTO、Controller、Service和Mapper。_jav... 目录前言一、各大包1.DTO1.1、DTO的核心用途1.2. DTO与实体类(Entity)的区别1

使用Python实现可恢复式多线程下载器

《使用Python实现可恢复式多线程下载器》在数字时代,大文件下载已成为日常操作,本文将手把手教你用Python打造专业级下载器,实现断点续传,多线程加速,速度限制等功能,感兴趣的小伙伴可以了解下... 目录一、智能续传:从崩溃边缘抢救进度二、多线程加速:榨干网络带宽三、速度控制:做网络的好邻居四、终端交互

如何在Spring Boot项目中集成MQTT协议

《如何在SpringBoot项目中集成MQTT协议》本文介绍在SpringBoot中集成MQTT的步骤,包括安装Broker、添加EclipsePaho依赖、配置连接参数、实现消息发布订阅、测试接口... 目录1. 准备工作2. 引入依赖3. 配置MQTT连接4. 创建MQTT配置类5. 实现消息发布与订阅

springboot项目打jar制作成镜像并指定配置文件位置方式

《springboot项目打jar制作成镜像并指定配置文件位置方式》:本文主要介绍springboot项目打jar制作成镜像并指定配置文件位置方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录一、上传jar到服务器二、编写dockerfile三、新建对应配置文件所存放的数据卷目录四、将配置文

怎么用idea创建一个SpringBoot项目

《怎么用idea创建一个SpringBoot项目》本文介绍了在IDEA中创建SpringBoot项目的步骤,包括环境准备(JDK1.8+、Maven3.2.5+)、使用SpringInitializr... 目录如何在idea中创建一个SpringBoot项目环境准备1.1打开IDEA,点击New新建一个项

基于 HTML5 Canvas 实现图片旋转与下载功能(完整代码展示)

《基于HTML5Canvas实现图片旋转与下载功能(完整代码展示)》本文将深入剖析一段基于HTML5Canvas的代码,该代码实现了图片的旋转(90度和180度)以及旋转后图片的下载... 目录一、引言二、html 结构分析三、css 样式分析四、JavaScript 功能实现一、引言在 Web 开发中,

springboot下载接口限速功能实现

《springboot下载接口限速功能实现》通过Redis统计并发数动态调整每个用户带宽,核心逻辑为每秒读取并发送限定数据量,防止单用户占用过多资源,确保整体下载均衡且高效,本文给大家介绍spring... 目录 一、整体目标 二、涉及的主要类/方法✅ 三、核心流程图解(简化) 四、关键代码详解1️⃣ 设置