cos是O'Rrilly公司开发的一款用于HTTP上传文件的OpenSource组件

需要cos.jar,下载地址:http://www.servlets.com/cos/

cos上传文件很简单,比fileupload还简单:但是上传最大我试了试,是800多兆,超过直接崩溃:

java.io.IOException: Posted content length of 1627105576 exceeds limit of 889192448 --->byte,800多M

只需一个servelt即可:

package com.lhy.upload;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.Enumeration;
import java.util.UUID; import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import com.oreilly.servlet.MultipartRequest;
import com.oreilly.servlet.multipart.FileRenamePolicy; /**
* CosServlet
* 在Cos中就一个类,
* MultipartRequest它是request的包装类。
*/
@WebServlet(name="CosServlet",urlPatterns="/CosServlet")
public class CosServlet extends HttpServlet{ @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//第一步,声明文件的保存目录
String path = getServletContext().getRealPath("/up");
//第二步:文件上传
//声明文件重新命名策略,默认的不行不能重命名,自己实现FileRenamePolicy接口
// FileRenamePolicy rename = new DefaultFileRenamePolicy();
MultipartRequest multiReq = new MultipartRequest(req, path, 1024*1024*100, "UTF-8",new MyRename()); //输出所上传的文件的信息
Enumeration fileNames = multiReq.getFileNames();
while(fileNames.hasMoreElements()){
String name = (String)fileNames.nextElement();
File file = multiReq.getFile(name);//得到上传的文件
if(null != file){
String fileName = multiReq.getFilesystemName(name); //取得文件名
String contentType = multiReq.getContentType(name);//类型
System.out.println("上传的文件: " +fileName+", 文件类型: "+contentType);
}
} //输出所提交的表单中其它文本输入域的值
Enumeration formValue = multiReq.getParameterNames();
while(formValue.hasMoreElements()){
String param = (String)formValue.nextElement();
String value = multiReq.getParameter(param);
System.out.println(value);
} //第三步:如果知道input的name,还可以直接获取信息,
/*resp.setContentType("text/html;charset=UTf-8");
PrintWriter out = resp.getWriter();
out.print("文件名称1:"+multiReq.getOriginalFileName("img1"));
out.print("<br/>新名称:"+multiReq.getFilesystemName("img1"));
out.print("<br/>类型1:"+multiReq.getContentType("img1"));
out.print("<br/>大小1:"+multiReq.getFile("img1").length());
out.print("<br/>说明:"+multiReq.getParameter("desc1"));
if(multiReq.getContentType("img1").contains("image/")){
out.print("<img width='300px' height='200px' src='"+req.getContextPath()+"/up/"+multiReq.getFilesystemName("img1")+"'></img>");
} out.print("<hr/>");
out.print("文件名称2:"+multiReq.getOriginalFileName("img2"));
out.print("<br/>类型2:"+multiReq.getContentType("img2"));
out.print("<br/>大小2:"+multiReq.getFile("img2").length());
out.print("<br/>说明2:"+multiReq.getParameter("desc2")); //
out.print("<hr/>");
out.print("文件名称3:"+multiReq.getOriginalFileName("img3"));
out.print("<br/>类型3:"+multiReq.getContentType("img3"));
out.print("<br/>大小3:"+multiReq.getFile("img3").length());
out.print("<br/>说明3:"+multiReq.getParameter("desc3"));*/ } } /**
* 重命名策略,
*/
class MyRename implements FileRenamePolicy{ @Override
public File rename(File file) {
String fileName = file.getName();
String extName = fileName.substring(fileName.lastIndexOf("."));
String uuid = UUID.randomUUID().toString().replace("-","");
String newName = uuid+extName;//abc.jpg
file = new File(file.getParent(),newName);
return file;
} }

表单:

<form action="<c:url value='/CosServlet'/>" method="post"
enctype="multipart/form-data">
File1:<input type="file" name="img1"><br /> 说明1:
<input type="text" name="desc1"><br /> File2:<input type="file" name="img2"><br/>
说明2:<input type="text" name="desc2"><br/>
File3:<input type="file" name="img3"><br/>
说明3:<input type="text" name="desc3"><br/> <input type="submit" />
</form>

启动上传:

服务端:

还是很给力的。

用COS实现文件上传的更多相关文章

  1. cos实现文件上传--推荐

    1.导包 2.核心类:MultipartRequest MultipartRequest是request的包装类 参数1:request 参数2:保存路径 参数3:上传文件大小,默认为1M 参数4:编 ...

  2. Struts2文件上传下载

    Struts2文件上传 Struts2提供 FileUpload拦截器,用于解析 multipart/form-data 编码格式请求,解析上传文件的内容,fileUpload拦截器 默认在defau ...

  3. 【Struts2】文件上传与下载

    一.上传 1.1 Struts2实现步骤 浏览器端 服务器端 1.2 关于Struts2中文件上传细节: 1.3 示例 jsp文件 Action类 struts.xml文件配置 二.下载 2.1 文件 ...

  4. Struts2之文件上传与下载

    时间:2017-1-11 15:47 --使用commons-fileupload组件上传1.客户端    *   method="post"    *   <input t ...

  5. JSP+Servlet中使用cos.jar进行图片上传(文件上传亦然)

    链接:JSP+Servlet中使用jspsmartupload.jar进行图片上传下载 关于cos.jar,百度百科只有这么几句话(http://baike.baidu.com/subview/406 ...

  6. 摘抄--使用cos实现多个文件上传详解

    在开发中常常需要上传文件,上传文件的方式有很多种,这里有一个cos实现的例子. 首先是要拷贝cos.jar包拷贝到WEB-INF/lib目录下,然后才进行编码. 创建一个可以进行自动重命名的Java文 ...

  7. redisTemplate实现轻量级消息队列, 异步处理excel并实现腾讯云cos文件上传下载

    背景 公司项目有个需求, 前端上传excel文件, 后端读取数据.处理数据.返回错误数据, 最简单的方式同步处理, 客户端上传文件后一直阻塞等待响应, 但用户体验无疑很差, 处理数据可能十分耗时, 没 ...

  8. jsp实现文件上传(二)用cos组件实现文件上传

    jsp表单 <%@ page language="java" pageEncoding="utf-8"%> <html> <hea ...

  9. 解决COS、FileUpload上传文件时中文文件名乱码问题

    方法: MultipartParser mp = new MultipartParser(request, 10*1024*1024); mp.setEncoding("GBK") ...

随机推荐

  1. java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: Java he

    tomcat内存溢出的解决方法(java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError:) 最简单的解决办法: 在ecl ...

  2. 都有哪些 cache ?

    1. spring http://www.springframework.org/schema/cache 2. ehcache LOGO关键词:palindrome [ˈpælɪndrəʊm] 正读 ...

  3. ACM STEPS——Chapter Two——Section One

    数学题小关,做得很悲剧,有几道题要查数学书... 记下几道有价值的题吧 The area(hdoj 1071) http://acm.hdu.edu.cn/showproblem.php?pid=10 ...

  4. bootstrap collaspe

    和modal类似:也是通过data-toggle, data-target来指定: 可以把折叠插件改为手风琴,如果指定data-parent,那这个data-parent元素下的折叠插件就会像手风琴一 ...

  5. 基于CORS的GeoServer跨域访问策略

    GeoServer的跨域访问问题,有多种解决方法,本文介绍一种基于CORS的GeoServer跨域访问方法. CORS简介 CORS是一个W3C标准,全称是"跨域资源共享"(Cro ...

  6. TSQL--按某字段列分组,在将各组中某列合并成一行

    鉴于群里很多同事在问这个问题,我简单写个Demo,希望对初学者有帮助! 无真相,无解说,不解释,直接上Code! --========================================= ...

  7. C# 二维码/条形码入门操作

    效果图: 先给之前的群友道个歉,说声不好意思.QRCoder 只支持二维码,没有条形码. 以上demo生成条形码是用 BarcodeLib 这个库,识别是用 zxing,二维码生成用 QRCoder, ...

  8. 发起一个NetCore技术联盟促进NetCore技术应用

    一.简介 1.从十几年前开始net,到两年前转java,到去年底发现netcore2这玩艺,从此以后坚定成为netcore的追随着. 2.有心促进netcore的应用,聚集一些人员共同学习,减少技术使 ...

  9. 使用FluentScheduler实现定时任务管理

    之前定时任务一直用的Windows服务,前段时间发现FluentScheduler这个框架,他跟Quarz.Net,Hangfire一样都是任务调度框架,但是相对使用而言我觉得FluentSchedu ...

  10. SSRS (一)创建基础报表

    ReportService创建基础报表 1.数据库SQL Server2012选择SQL Server Data Tools 2.创建商业智能(BI)项目 选择报表服务器项目 ReportServic ...