论坛设计——多个用户上传文件的后台设计问题

功能描述:在设计论坛时用户要发帖,用户会向帖子中插入图片,插入图片的流程是:用户先上传图片到服务器,然后将服务器中图片的路径添加到帖子中。那么有一个问题,用户会将要发布的图片上传到服务器的文件夹,然后将路径放到帖子的内容中。论坛中有很多用户,每个用户都会发帖都会上传各种文件、图片资源。那么服务器端如何存储用户上传的文件呢??就是如何设计文件的存储结构呢??

能想到的方法有俩种:

  • 为每个用户建立一个文件夹,文件夹中再进行分类,视频,图片,文档等。                                                                                                                                        这样做的好处是,其他的用户不能够使用其他用户上传的图片,结构比较清晰,管理起来比较方便。不好的是当用户数量庞大时,建立的文件夹数目就会非常多,管理起来也并不方便。如果某个系统下限制文件夹的数目,这样做的话就无法为相应的用户建立文件夹,可能造成用户操作失败。
  • 所有的用户使用同一个文件夹,文件下按照时间进行建文件夹。                                                                                                                                                          这种情况下,可以使用年月日为文件夹目录,再每个文件夹中进行文件分类存储,或则是先分类,再按照年月日建立文件夹都可以。这样做的好处是避免了文件夹数量限制的短板,但是如果用户数量大,上传的文件特别多,那么某一天中文件夹的数量就会特别多,管理起来相当的不方便。

在自己的项目中,设计论坛模块的时候,希望实现的功能是每个用户发帖的时候可以使用自己或别人上传的图片,但是只能使用某天登录上传的图片。所以博主在设计文件夹目录结构的时候,采用了第二种方法:先建立分类的文件夹,文件夹下面再采用年月日的方法建立文件夹。一年365天,加入某操作系统文件夹下允许建立36500个文件夹,那么这个文件系统再内存充足的情况下,可以使用100年,嗯嗯,差不多了。

在这个项目中,博主开发论坛使用的是百度的UEditor文本编辑器,在简单的使用了这个编辑器之后,不得不感叹这个编辑器的强大,使用起来超爽。下面博主就来讲述一下自己是如何在项目种应用UEditor编辑器,并且使用该编辑器实现发帖【可以上传图片的功能的】。这里直接写如何实现的这些功能,不讲解如何将编辑器植入到项目种,如果不明白,可以参看博主之前的那篇博客,下面开始:

  • 首先在发帖的jsp页面中使用编辑器

用框圈住的是引入的文本编辑器,然后使用下面的js代码,使用工厂模式获取一个编辑器。这样就可以在相应的位置出现文本编辑器了。


  • 简答的设置编辑器可以使用的功能,在ueditor.config.js文件中设置要显示哪些功能。

  • 很重要,配置编辑器的上传功能,在UEditor-jsp-config.json文件中进行配置,这里以上传图片为例进行配置,其他的一样。

最后的俩项配置图片的访问路径,以及自定义的上传保存路径

这里列出的图片目录,是上传到文件的目录

  • 最后一项,需要配置自己的过滤器,因为项目是S2SH框架,使用的Struts2的核心过滤器,配置为

<filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

这样的配置将所有的url请求全部拦截了,所以需要自定义一个过滤器并配置在核心过滤器之前。

package com.hebeu.xindian.action.fileOperation;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.dispatcher.StrutsRequestWrapper;

/**
 * 自定义一个Filter,用来过滤controller.jsp请求
 * @author acer
 *
 */
@WebFilter("/UeditorFilter")
public class UeditorFilter implements Filter {

	@Override
	public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
			throws IOException, ServletException {
		HttpServletRequest request = (HttpServletRequest)req;
		HttpServletResponse response = (HttpServletResponse)resp;
		String url = request.getRequestURI();
		if(decideURI(url)){
			chain.doFilter(new StrutsRequestWrapper(request), resp);
		}else{
			chain.doFilter(req, resp);
		}
	}

	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void destroy() {
		// TODO Auto-generated method stub
		
	}

	private boolean decideURI(String url) {
		if (url.endsWith("controller.jsp")) {
			return true;
		} else if (url.endsWith("fileUp.jsp")) {
			return true;
		}
		return false;
	}
	
   
}

部署

 <filter-mapping>
  	<filter-name>ueditor</filter-name>
  	<url-pattern>/*</url-pattern>
  </filter-mapping>
  
  <filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

这样便可以实现写论坛并上传文件的功能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值