COS 文件上传事例
2008-12-12 10:31
106 查看
COS [/b]文件上传[/b][/b]
Cos组件是O`Rrilly公司开发的一款免费组件。在项目实施中,本人也确实能感觉COS组件在上传速度有着明显的优势,所以有必要来学习一下COS的相关用法。
COS的帮助文档如下图所示。
在Cos组件中,MultipartRequest类主要负责文件上传的处理。MultipartRequest有8个构造函数:
1.Public MultipartRequest ( HttpServletRequest request, String saveDirectory,) throws IOException
2.Public MultipartRequest ( HttpServletRequest request, String saveDirectory, int maxPostSize) throws IOException
3.Public MultipartRequest ( HttpServletRequest request, String saveDirectory, int maxPostSize, FileRenamePolicy policy) throws IOException
4.Public MultipartRequest ( HttpServletRequest request, String saveDirectory, int maxPostSize, String encoding) throws IOException
5.Public MultipartRequest ( HttpServletRequest request, String saveDirectory, int maxPostSize, String encoding, FileRenamePolicy policy) throws IOException
6.Public MultipartRequest ( HttpServletRequest request, String saveDirectory, String encoding) throws IOException
7.Public MultipartRequest ( HttpServletRequest request, String saveDirectory) throws IOException
8.Public MultipartRequest ( HttpServletRequest request, String saveDirectory, int maxPostSize) throws IOException
前6种构造函数都是用来专门处理HTTP协议的,saveDirectory是上传文件要存储在服务器端的目录名称;maxPostSize是用来限制用户上传文件大小的,若超过maxPostSzie,会产生IOException,默认上传文件大小是1MB;encoding可以设定用何种编码方式来上传文件名称,可以解决中文问题。
MultipartRequest类工具有8种方法,利用这些方法,我们可以取得请求的相关信息:
Public Enumeration getParameterNames() 可以取得请求参数的名称
public String getParameter(String name) 此方法传回参数为name的值
public String[] getParameterValues(String name) 此方法主要用在取得当一指定参数具有多个值时,它会传回String的数组
public Enumeration getFileName() 传回所有文件输入类型的名称
public String getFilesystemNames(String name) 用此方法得到上传文件的真正的文件名,这里的name指文件输入类型的名称
public String getContentType(String name) 此方法得到上传文件的内容类型
public File getFile(String name) 此方法得到一个文件对象,代表储存在服务器上的name文件
public String getOriginalFileName(String name) 返回文件在修改政策有效之前的文件名
COS组件的应用:
下面,我们通过一个上传文件的小程序来演示用COS组件上传文件的应用;
一;建一个名为upFile[/b]的工程[/b]:在WeRoot目录下创建两个页面,分别为upFile.html(上传页面)、Uplad.jsp(处理结果页面)
二;导入 Cos.jar [/b]包[/b]: 把Cos.jar包导入lib目录下。
三;编写页面和业务代码;[/b]
1,上传页面的upFile.html[/b]程序清单;[/b][/b]
上传后页面Upland.jsp代码清单;
现在我们可以打开c:/haha文件夹,查看文件
问题??[/b][/b]
1, 如何把上传的文件放在当前工程的某个文件夹下面,如放置在WebRoot/files下面
2, 在具体问题中,往往是把上传的文件保存在指定的文件夹下,而在数据库中只保存文件的地址。但这样,又如何获取表单中的其他文本框的值呢?如 text , reado , passeord 等的值,然后把他们的值和文件的路径一起保存到数据库中。
解决方案1),改变提交的流程。具体分析如下图(略)
文件域的属性改变成了普遍的文本框,同时多添加了一个上传文件的普通按钮,index.jsp就成了普通的表单提交页面了,点击上传文件按钮,将在新窗口中弹出上传文件的页面go.jsp 。在这个页面中有原来的文件域,它提交给upland.jsp页面处理,处理后把文件上传的地址放入session中,转发给首页提交页面,然后在提交页面上获取session中的值,即文件的地址,然后提交到数据库中存储起来,这言就完成了文件的上传和数据的提交。
以上三个页面中的关键代码如下;
Index.jsp源码;
Go.jsp源码;
提交后又回到登陆页面index.jsp页面,
--------------------------------------
问题请教:上传文件时的不完整性如何解决比较好?比如我要上传一张图片,上传的这张图片包括图片的一些相关说明信息。通常,我们是先把图片上传到服务器后,再填写相关的信息,然后把这些信息持久化到数据库,但是,如果用户只上传了图片,因为某种原因,图片的其他信息未能填写,之后也就没有再来管他,这图片就成了垃圾图片。!!像这样的问题,如何解决呢?
Cos组件是O`Rrilly公司开发的一款免费组件。在项目实施中,本人也确实能感觉COS组件在上传速度有着明显的优势,所以有必要来学习一下COS的相关用法。
COS的帮助文档如下图所示。
在Cos组件中,MultipartRequest类主要负责文件上传的处理。MultipartRequest有8个构造函数:
1.Public MultipartRequest ( HttpServletRequest request, String saveDirectory,) throws IOException
2.Public MultipartRequest ( HttpServletRequest request, String saveDirectory, int maxPostSize) throws IOException
3.Public MultipartRequest ( HttpServletRequest request, String saveDirectory, int maxPostSize, FileRenamePolicy policy) throws IOException
4.Public MultipartRequest ( HttpServletRequest request, String saveDirectory, int maxPostSize, String encoding) throws IOException
5.Public MultipartRequest ( HttpServletRequest request, String saveDirectory, int maxPostSize, String encoding, FileRenamePolicy policy) throws IOException
6.Public MultipartRequest ( HttpServletRequest request, String saveDirectory, String encoding) throws IOException
7.Public MultipartRequest ( HttpServletRequest request, String saveDirectory) throws IOException
8.Public MultipartRequest ( HttpServletRequest request, String saveDirectory, int maxPostSize) throws IOException
前6种构造函数都是用来专门处理HTTP协议的,saveDirectory是上传文件要存储在服务器端的目录名称;maxPostSize是用来限制用户上传文件大小的,若超过maxPostSzie,会产生IOException,默认上传文件大小是1MB;encoding可以设定用何种编码方式来上传文件名称,可以解决中文问题。
MultipartRequest类工具有8种方法,利用这些方法,我们可以取得请求的相关信息:
Public Enumeration getParameterNames() 可以取得请求参数的名称
public String getParameter(String name) 此方法传回参数为name的值
public String[] getParameterValues(String name) 此方法主要用在取得当一指定参数具有多个值时,它会传回String的数组
public Enumeration getFileName() 传回所有文件输入类型的名称
public String getFilesystemNames(String name) 用此方法得到上传文件的真正的文件名,这里的name指文件输入类型的名称
public String getContentType(String name) 此方法得到上传文件的内容类型
public File getFile(String name) 此方法得到一个文件对象,代表储存在服务器上的name文件
public String getOriginalFileName(String name) 返回文件在修改政策有效之前的文件名
COS组件的应用:
下面,我们通过一个上传文件的小程序来演示用COS组件上传文件的应用;
一;建一个名为upFile[/b]的工程[/b]:在WeRoot目录下创建两个页面,分别为upFile.html(上传页面)、Uplad.jsp(处理结果页面)
二;导入 Cos.jar [/b]包[/b]: 把Cos.jar包导入lib目录下。
三;编写页面和业务代码;[/b]
1,上传页面的upFile.html[/b]程序清单;[/b][/b]
<html> <head> <title>文件上传首页</title> </head> <body bgcolor="#aaccbb"> 文件上传: <hr/> <form action="upland.jsp" method="post" enctype="multipart/form-data"> <input type="file" name="file1"><br/> <input type="file" name="file2"/><br/> <input type="file" name="file3"/><br/> <input type="submit" value="上传"/> </form> </body> </html> |
<%@ page import="java.util.*" contentType="text/html; charset=gbk" %> <%@ page import="java.io.*"%> <%@page import="com.oreilly.servlet.multipart.*"%> <%@page import="com.oreilly.servlet.*" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head > <title>上传文件</title> <% //黄河之水哪里去,文件保存在何处?注意:这个文件夹一定要先创建,否则会抛出、、//IllegalArgumentException异常 String fileDirectory = "c://haha"; //设置文件的最大值为500M,在这里有三个文件,上传时是按字节计算的,所以上传的文件最大值为; int fixMax = 3 * 500 * 1024 * 1024 ; //设置response 的编码为gbk; ,同时采用缺省的文件名冲突解决策略,实现上传 MultipartRequest multi = new MultipartRequest(request,fileDirectory,fixMax,"gbk"); //到这里上传文件完成,为了显示上传后的结果,我们用Enumeration返回上传的信息 //输出反馈信息; Enumeration enums = multi.getFileNames(); while(enums.hasMoreElements()){ System.out.println("hahah"); String fileName = (String)enums.nextElement(); File file = multi.getFile(fileName); if(file!=null){ String name = multi.getFilesystemName(fileName); String lastName = fileDirectory +"//"+ name; out.print("文件已成功上传到:"+lastName+"<hr>"); } } %> </head> <body bgcolor="#aaccbb"> <h3>my file up success !</h3> </body> </html> |
问题??[/b][/b]
1, 如何把上传的文件放在当前工程的某个文件夹下面,如放置在WebRoot/files下面
2, 在具体问题中,往往是把上传的文件保存在指定的文件夹下,而在数据库中只保存文件的地址。但这样,又如何获取表单中的其他文本框的值呢?如 text , reado , passeord 等的值,然后把他们的值和文件的路径一起保存到数据库中。
解决方案1),改变提交的流程。具体分析如下图(略)
文件域的属性改变成了普遍的文本框,同时多添加了一个上传文件的普通按钮,index.jsp就成了普通的表单提交页面了,点击上传文件按钮,将在新窗口中弹出上传文件的页面go.jsp 。在这个页面中有原来的文件域,它提交给upland.jsp页面处理,处理后把文件上传的地址放入session中,转发给首页提交页面,然后在提交页面上获取session中的值,即文件的地址,然后提交到数据库中存储起来,这言就完成了文件的上传和数据的提交。
以上三个页面中的关键代码如下;
Index.jsp源码;
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>文件上传首页</title> <script language="javascript"> function upload() { var go = "go.jsp" var oawin= window.open(go,"hahah", "toolbar=0,location=0,status=0,menubar=0,scrollbars=no,resizable=0,width=200,height=120,"); oawin.focus(); oawin.opener=window; } </script> </head> <body bgcolor="#aaccbb"> <% String file = (String) session.getAttribute("file"); if (file == null) file = ""; %> 文件上传: <hr /> <form action="upland.jsp" method="post" enctype="multipart/form-data"> <input type="test" name="name" /> :username <br> <input type="test" name="files" id="files" value="<%=file%>" /> <label> <input name="按钮" type="button" onclick="upload()" value="上传文件" /> </label> <br> <br /> <input type="submit" value="上传" /> </form> </body> </html> |
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>上传文件页</title> </head> <body> <h2>请选择你要上传的文件!</h2> <form action="upland.jsp" method="post" enctype="multipart/form-data" name="form1" id="form1"> <label> <input type="file" name="fileField" id="fileField" /> </label> <input type="submit" name="button" id="button" value="确定" /> </form> <p> </p> <p> </p> </body> </html> |
<%@ page import="java.util.*" contentType="text/html; charset=gbk"%> <%@ page import="java.io.*"%> <%@page import="com.oreilly.servlet.multipart.*"%> <%@page import="com.oreilly.servlet.*"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>上传文件</title> <% //上传的文件保存在何处?注意:这个文件夹要先创建 // fileDirectory = "c://haha"; String path = request.getRealPath("files"); System.out.println(path); //设置文件的最大值为500M,在这里有三个文件,上传时是按字节计算的,所以上传的文件最大值为; int fixMax = 500 * 1024 * 1024; //设置response 的编码为gbk; ,同时采用缺省的文件名冲突解决策略,实现上传 MultipartRequest multi = new MultipartRequest(request, path, fixMax, "gbk"); //输出反馈信息; Enumeration enums = multi.getFileNames(); while (enums.hasMoreElements()) { String fileName = (String) enums.nextElement(); File file = multi.getFile(fileName); if (file != null) { String name = multi.getFilesystemName(fileName); String lastName = fileDirectory + "//" + name; session.setAttribute("file", lastName); request.getRequestDispatcher("index.jsp").forward(request, response); } } %> </head> <body bgcolor="#aaccbb"> <h3> my file up success ! </h3> </body> </html> |
--------------------------------------
问题请教:上传文件时的不完整性如何解决比较好?比如我要上传一张图片,上传的这张图片包括图片的一些相关说明信息。通常,我们是先把图片上传到服务器后,再填写相关的信息,然后把这些信息持久化到数据库,但是,如果用户只上传了图片,因为某种原因,图片的其他信息未能填写,之后也就没有再来管他,这图片就成了垃圾图片。!!像这样的问题,如何解决呢?
相关文章推荐
- 使用cos实现多个文件上传详解
- struts文件上传、Cos组件文件上传
- 用cos文件上传
- 腾讯对象存储服务COS加密签名上传文件与下载文件的剖析,福利提供给所有使用Android的小伙伴们!
- cos.jar 文件上传实现
- 文件上传对比 : commons-fileupload/cos/jspsmartUpload
- jsp中利用cos进行web文件上传(修改版)
- fileupload和cos文件上传技术区别
- jsp中用cos上传文件并重命名
- Java文件上传组件 COS
- Python实现腾讯云CDB备份文件自动上传到COS
- 【COS上传文件】实现文件重命名
- cos组件实现文件上传
- cos与EXT调用AJAX提交上传文件
- COS 更新,发布Java文件上传组件
- 解决COS、FileUpload上传文件时中文文件名乱码问题
- JSP+Servlet中使用cos.jar进行图片上传(文件上传亦然)
- fileupload和cos文件上传技术区别
- JSP+Servlet中使用cos.jar进行图片上传(文件上传亦然)
- 用COS实现文件上传(非原创,网络收集)