- 搭建一个简单的SpringMVC框架
- 需要的jar包:
1. okhttp-3.2.0.jar
2. okio-1.9.0.jar
3.qiniu-java-sdk-7.2.7.jar
下载地址:
链接:http://pan.baidu.com/s/1o7IWMh0 密码:73fk
- 前端需要的资源:
1.uploadify.css
2.jquery-1.4.2.min.js
3.jquery.uploadify.min.js
4.uploadify.swf
5.cancel.png
下载地址:
链接:http://pan.baidu.com/s/1c2w6KKC 密码:g607
- 上传页面编写:index.jsp
<%@
page
language
=
"java"
import
=
"java.util.*"
pageEncoding
=
"utf-8"
%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+
"://"
+request.getServerName()+
":"
+request.getServerPort()+path+
"/"
;
%>
DOCTYPE
HTML
PUBLIC
"-//W3C//DTD HTML 4.01 Transitional//EN">
<
html
>
<
head
>
<
base
href
=
"
<%=
basePath
%>
"
>
<
title
>
jquery upload
title
>
<
link
rel
=
"stylesheet"
href
=
"uploadify/uploadify.css"
type
=
"text/css"
>
link
>
<
script
type
=
"text/javascript"
src
=
"js/jquery-1.4.2.min.js"
>
script
>
<
script
type
=
"text/javascript"
src
=
"uploadify/jquery.uploadify.min.js"
>
script
>
<
script
type
=
"text/javascript"
>
$(
function
() {
$(
"#file_upload"
).uploadify({
//指定swf文件
'swf'
:
'uploadify/uploadify.swf'
,
//后台处理的页面
'uploader'
:
'upload/testQiNiu.do'
,
'progressData'
:
'speed'
,
//按钮显示的文字
'buttonText'
:
'上传文件'
,
//显示的高度和宽度,默认 height 30;width 120
//'height': 15,
//'width': 80,
//上传文件的类型 默认为所有文件 'All Files' ; '*.*'
//在浏览窗口底部的文件类型下拉菜单中显示的文本
'fileTypeDesc'
:
'All Files'
,
//允许上传的文件后缀
//'fileTypeExts': '*.gif; *.jpg; *.png',
'cancel'
:
'uploadify/cancel.png'
,
//上传文件页面中,你想要用来作为文件队列的元素的id, 默认为false 自动生成, 不带#
'queueID'
:
'fileQueue'
,
//选择文件后自动上传
'auto'
:
false
,
//设置为true将允许多文件上传
'multi'
:
true
,
/* 'onUploadComplete' : function(file) {
alert('上传完成');
}, */
'onCancel'
:
function
(file) {
alert(
'取消上传'
);
}
});
});
script
>
head
>
<
body
>
<
div
id
=
"fileQueue"
>
div
>
<
input
type
=
"file"
name
=
"file_upload"
id
=
"file_upload"
/>
<
p
>
<
a
href
=
"javascript:$('#file_upload').uploadify('upload','*')"
>
开始上传
a
>
<
a
href
=
"javascript:$('#uploadify').uploadify('cancel')"
>
取消所有上传
a
>
p
>
body
>
- 工具类编写:IPTimeStamp.java
利用客户端IP+时间+三位随机数字生成非重复文件名
//PTimeStamp.java
import
java.net.InetAddress;
import
java.net.UnknownHostException;
import
java.text.SimpleDateFormat;
import
java.util.Date;
import
java.util.Random;
public
class
IPTimeStamp {
private
String
ip
;
private
Date
date
;
private
SimpleDateFormat
format
;
public
IPTimeStamp() {
try
{
ip
= InetAddress.getLocalHost().getHostAddress();
}
catch
(UnknownHostException e) {
//
TODO
Auto-generated catch block
e.printStackTrace();
}
}
public
String getTimeStamp() {
format
=
new
SimpleDateFormat(
"yyyyMMddHHmmssSSS"
);
return
format
.format(
new
Date());
}
public
String addZero(String str,
int
len) {
StringBuffer sb =
new
StringBuffer();
sb.append(str);
while
(sb.length() < len) {
sb.insert(0,
"0"
);
}
return
sb.toString();
}
public
String getIPTimeStampRandom() {
StringBuffer sb =
new
StringBuffer();
String[] ips =
this
.
ip
.split(
"\\."
);
for
(
int
j = 0; j < ips.
length
; j++) {
// System.out.println(ips[j]);
sb.append(
this
.addZero(ips[j], 3));
}
sb.append(
this
.getTimeStamp());
Random rod =
new
Random();
for
(
int
i = 0; i < 3; i++) {
sb.append(rod.nextInt(10));
}
return
sb.toString();
}
- 文件上传控制器编写:UploadController.java
import
java.io.File;
import
java.io.IOException;
import
java.util.Iterator;
import
java.util.List;
import
javax.servlet.http.HttpServletRequest;
import
javax.servlet.http.HttpServletResponse;
import
org.apache.commons.fileupload.FileItem;
import
org.apache.commons.fileupload.FileUploadException;
import
org.apache.commons.fileupload.disk.DiskFileItemFactory;
import
org.apache.commons.fileupload.servlet.ServletFileUpload;
import
org.springframework.stereotype.Controller;
import
org.springframework.web.bind.annotation.RequestMapping;
import
com.qiniu.http.Response;
import
com.qiniu.storage.Configuration;
import
com.qiniu.storage.UploadManager;
import
com.qiniu.util.Auth;
@Controller
@RequestMapping
(
"/upload"
)
public
class
UploadController {
//设置好账号的ACCESS_KEY和SECRET_KEY
String
ACCESS_KEY
=
"Le8jyHg71J7UuV***KYUmF-UMbJOZgmLMO"
;
//这两个登录七牛 账号里面可以找到
String
SECRET_KEY
=
"VMO5cIW***ifokRkefGE_WWxKmC2n2d"
;
//要上传的空间
String
bucketname
=
"usercenterfilesccw"
;
//对应要上传到七牛上 你的那个路径(自己建文件夹 注意设置公开)
//上传到七牛后保存的文件名
String
key
=
"test.doc"
;
//密钥配置
Auth
auth
= Auth.create(
ACCESS_KEY
,
SECRET_KEY
);
//创建上传对象
Configuration
conf
=
new
Configuration();
UploadManager
uploadManager
;
{
uploadManager
=
new
UploadManager(
conf
);
}
/**上传到本地服务器
*
@param
request
*
@param
response
*/
@RequestMapping
(
"/test.do"
)
public
void
test(HttpServletRequest request,HttpServletResponse response){
String savePath = request.getSession().getServletContext()
.getRealPath(
""
);
// 得到项目的工作目录
savePath = savePath +
"/uploads/"
;
File f1 =
new
File(savePath);
// 如果没有的话就创建目录
if
(!f1.exists()) {
f1.mkdirs();
}
DiskFileItemFactory fac =
new
DiskFileItemFactory();
ServletFileUpload upload =
new
ServletFileUpload(fac);
upload.setHeaderEncoding(
"utf-8"
);
List fileList =
null
;
try
{
fileList = upload.parseRequest(request);
}
catch
(FileUploadException ex) {
return
;
}
Iterator it = fileList.iterator();
String name =
""
;
String extName =
""
;
while
(it.hasNext()) {
FileItem item = it.next();
if
(!item.isFormField()) {
// 解析文件
name = item.getName();
long
size = item.getSize();
String type = item.getContentType();
if
(name ==
null
|| name.trim().equals(
""
)) {
continue
;
}
// 得到文件的扩展名
if
(name.lastIndexOf(
"."
) >= 0) {
extName = name.substring(name.lastIndexOf(
"."
));
}
File file =
null
;
do
{
// 利用客户端IP+时间+三位随机数字生成非重复文件名:
name =
new
IPTimeStamp().getIPTimeStampRandom();
file =
new
File(savePath + name + extName);
}
while
(file.exists());
File saveFile =
new
File(savePath + name + extName);
try
{
item.write(saveFile);
}
catch
(Exception e) {
e.printStackTrace();
}
}
}
try
{
response.getWriter().print(name + extName);
}
catch
(IOException e) {
e.printStackTrace();
}
}
/**上传到七牛云端
*
@param
request
*
@param
response
*/
@RequestMapping
(
"testQiNiu.do"
)
public
void
testQN(HttpServletRequest request,HttpServletResponse response){
List fileList =
null
;
try
{
DiskFileItemFactory fac =
new
DiskFileItemFactory();
ServletFileUpload upload =
new
ServletFileUpload(fac);
fileList = upload.parseRequest(request);
}
catch
(FileUploadException ex) {
return
;
}
Iterator it = fileList.iterator();
try
{
while
(it.hasNext()) {
FileItem item = it.next();
Response res =
uploadManager
.put(item.getInputStream(),
key
, getUpToken(),
null
,
"application/zip"
);
System.
out
.println(res.getInfo());
}
}
catch
(Exception e) {
e.printStackTrace();
}
}
//简单上传,使用默认策略,只需要设置上传的空间名就可以了
public
String getUpToken(){
return
auth
.uploadToken(
bucketname
);
}
}
demo已上传至GitHub,地址如下:
https://github.com/18394093929/QiNiuBatchFileUpload