- 搭建一個簡單的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<FileItem> fileList = null;
try {
fileList = upload.parseRequest(request);
} catch (FileUploadException
ex) {
return;
}
Iterator<FileItem> 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<FileItem> fileList = null;
try {
DiskFileItemFactory fac = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(fac);
fileList = upload.parseRequest(request);
} catch (FileUploadException
ex) {
return;
}
Iterator<FileItem> 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