自定义上传文件路径的处理方案
来源:互联网 发布:好玩的网络手机游戏 编辑:程序博客网 时间:2024/05/09 01:14
背景
知识管理平台文章对应的图片等资源现在是存储在应用部署的tomcat的相对目录下,这样在引用图片时直接采用<imgsrc=”upload/561a72ac-1f02-4fa3-b662-cce0ab30a7d2.jpg”>的方式引用。这个路径默认全路径是相对部署的知识管理平台的上下文路径。如:
http://localhost:8088/kms/upload/561a72ac-1f02-4fa3-b662-cce0ab30a7d2.jpg
但是实际部署时,一般是将图片存放在共享盘阵上。或者是因为存在多个测试系统,系统共享这些图片资源。现有的处理方式是满足不了这样的需求的。因此需要采用某种方式支持用户自定义图片的存放路径。不管是本地路径还是共享路径。
有如下两种方案提供参考:
方案一
在tomcat重新部署一个应用KmsImage,这个应用的路径指定为图片的目录。上下文可以固定为kms_image。例如配置文件如下:
<?xml version="1.0" encoding="utf-8"?>
<Context docBase="D:\Image\DYRKB" path="/kms_image" reloadable="true">
</Context>
访问图片路径的IP和端口和知识管理平台部署的IP和端口一致。类似:
http://100.0.6.152:8080/kms_image/561a72ac-1f02-4fa3-b662-cce0ab30a7d2.jpg
需要修改的地方:
1. 需要自动上传文件的路径为应用KmsImage中指定的docBase
2. 需要修改图片元素image中src为部署的应用KmsImage的访问路径【或者该路径也是可以配置的】
3. 如果是共享文件路径,需要将共享文件路径映射到本地磁盘
方案二
图片信息返回采用流的方式返回,而不是现在的直接引用文件的方式。路径还是可以和原先一样即类似:
http://100.0.6.152:8080/kms/upload/561a72ac-1f02-4fa3-b662-cce0ab30a7d2.jpg
后台实现:
增加一个servlet,专门用于获取图片信息。然后在web.xml中配置获取servlet的映射路径为upload。
web.xml中增加配置:
<servlet>
<servlet-name>imageaction</servlet-name>
<servlet-class>com.dayang.dyr.knowledge.controller.ShowImageServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>imageaction</servlet-name>
<url-pattern>/upload/*</url-pattern>
</servlet-mapping>
public class ShowImageServlet extends HttpServlet {
private static final Logger log = Logger.getLogger(ShowImageServlet.class);
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
doProcess(req, res);
}
public void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
doProcess(req, res);
}
public void doProcess(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
OutputStream toClient = null;
FileInputStream in = null;
try {
StringBuffer url = req.getRequestURL();
String imageName = url.substring(url.lastIndexOf("/"), url.length());
toClient = res.getOutputStream(); //得到向客户端输出二进制数据的对象
//todo:需要替换为实际的文件的路径
String picPath = "E:\\test" + File.separator + imageName;
in = new FileInputStream(new File(picPath));
byte b[] = IOUtils.toByteArray(in);
toClient.write(b);
} catch (Exception e) {
log.error("Get Image error", e);
PrintWriter pw = res.getWriter(); //得到向客户端输出文本的对象
pw.write(e.getMessage());
pw.close();
} finally {
if (toClient != null)
toClient.close();
if(in != null)
in.close();
}
}
结论
方案二相对而言比较清晰,可以优先选择
- 自定义上传文件路径的处理方案
- 上传文件的路径处理
- django自定义上传文件路径
- springmvc上传文件路径处理
- UEditor自定义上传和读取文件路径
- struts2处理上传文件路径问题
- 上传文件存入数据库或文件夹路径两种方案的实现
- Java 多文件上传存储到不同的路径及某上传框中未选择上传文件的处理方法
- 获取上传文件的路径
- Servlet上传文件的路径
- arcpy中中文路径的处理方案
- WordPress教程:自定义上传路径和生成文件的URL地址
- opencms自定义html编辑器,不能切换路径,上传本地文件或选择文件的解决办法?
- C#关于文件路径的获取方案
- 自定义上传文件的样式
- 文件上传框的自定义
- KindEditor图片上传路径URL的处理
- 手机实现上传文件的方案
- 内存管理,问题由来
- xcode创建cocos2dx模版 关于couldn't add 'com.apple.XcodeGenerated' tag错误
- ajax学习
- linux链接器 -Wl 参数的用法
- Android 读取<meta-data>元素的数据
- 自定义上传文件路径的处理方案
- x264编译 log2f 链接错误
- Dmidecode
- c#正则表达式定义
- 浏览文件夹对话框
- 中断线程
- 黑马程序员--交通灯管理系统
- 用Java读取pdf中的数据
- LINUX 命令nohup的用法