最近使用uploadify 控制图片上传到百度网盘。。。。总的想法是 招待会uploadify获取文件传入后台,调用百度云存储api上传到百度网盘,返回url 联系。送存储在数据库中的链接。因此,我们有一个数据库,这只是url  真正的文件保存在百度云存储这,常好用。这一个业务流程用到了uploadify 控件和百度云存储。

流程例如以下:首先下载uploadify 包

这个不同文件混在一起还没有分开。

。功能先实现再说。。。

前台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>加入幻灯片</title> <meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page"> <link rel="stylesheet" href="easyui/css/main.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="uploadify/uploadify.css" /> <script type="text/javascript" src="uploadify/swfobject.js"></script>
<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
<script type="text/javascript" src="uploadify/jquery.uploadify.min.js"></script>
<script type="text/javascript">
$(function() {
$("#uploadify").uploadify({
'uploader' : '../schSlide/schSlide_addSchSlide.action', //是组件自带的flash。用于打开选取本地文件的button
'script' : 'uploadify.php',
'fileObjName' : 'file',
'cancelImg' : 'uploadify/uploadify-cancel.png',//取消上传文件的button图片,就是个叉叉
'folder' : 'uploadify/uploads',//上传文件的文件夹
'queueID' : 'fileQueue',
'auto' : false,//是否选取文件后自己主动上传
'multi' : true,//是否支持多文件上传
'simUploadLimit' : 7,//每次最大上传文件数
'buttonText' : '选择文件',//button上的文字
'displayData' : 'speed',//有speed和percentage两种。一个显示速度,一个显示完毕百分比
'fileDesc' : '支持格式:jpg/gif/jpeg/png/bmp.', //假设配置了下面的'fileExt'属性。那么这个属性是必须的
'fileExt' : '*.jpg;*.gif;*.jpeg;*.png;*.bmp',//同意的格式
//'debug': true,
'onComplete' : function (event, queueID, fileObj, response, data){
$("#result").html(response);//显示上传成功结果
setInterval("showResult()",2000);//两秒后删除显示的上传成功结果
},
'onError': function(event, queueID, fileObj) {
$j("#result").css("color", "red");
$j("#result").html("文件:" + fileObj.name + "上传失败");
}
}); });
function showResult(){//删除显示的上传成功结果
$("#result").html("");
} function clearFile(){//清空全部上传队列
$("#result").html("");
}
</script>
</head>
<body>
<div id="fileQueue"></div>
<p><input type="file" name="uploadify" id="uploadify" /></p>
<p>
<a onclick = "$('#uploadify').uploadify('upload','*');" href="javascript:void(0)">開始上传</a> 
</p>
<div id="result"></div><!--显示结果-->
</body>
</html>





调用schSlide/schSlide_addSchSlide.action来进行功能实现struts2 配置文件例如以下


	<!-- 幻灯片模块 -->
<package name="schSlide" namespace="/schSlide" extends="json-default">
<action name="*_*" class="{1}Action" method="{2}">
<result name="success">/backstage/b_schslide.jsp</result>
<result type="json" name="json">
<param name="root">dataMap</param>
</result>
</action>
</package>

action 的部分代码例如以下省去get set 方法

private Map<String, Object> dataMap;
private SchSlide schSlide;
private int page;
private int rows;
private int schSlideId;
private String name;
private List<SchSlide> schSlideList;
private File uploadify;
private String uploadifyFileName;
private File[] file;
private String[] fileFileName;
// 输出文件地址
private String url = "";
// 上传文件名称
private String fileName = "";
// 原始文件名称
//private String originalName = "";
// 文件类型
private String type = "";
private HttpServletRequest request = null;
private String savePath = "uploadSlide"; @Autowired
private SchSlideService schSlideService;
//加入幻灯片
public String addSchSlide() throws Exception{
schSlide = new SchSlide();
for (int i = 0; i < file.length; i++) {
String savePath = this.getFolder(this.savePath);
this.fileName = this.getName(fileFileName[i]);
File tempFile = new File(savePath + "/" + this.fileName);
tempFile.deleteOnExit();
System.out.println(tempFile);
FileOutputStream fos = new FileOutputStream(tempFile);
FileInputStream bis = new FileInputStream(file[i]);
byte[] buff = new byte[128];
int count = -1;
while ((count = bis.read(buff)) != -1) {
fos.write(buff, 0, count);
}
bis.close();
fos.close();
String filename2 = FileUploadUtils.getInstance().uploadImage(tempFile);//调用百度云api上传文件返回url
schSlide.setName(getFileName(fileFileName[i]));
schSlide.setUrl(filename2);
schSlide.setStatus(1);
schSlide.setSchool(null);
schSlideService.addSlide(schSlide); //调用下一层 将url等数据存入数据库中
} return SUCCESS;
}
用到的部分函数
/**
* 依据原始文件名称生成新文件名称
*
* @return
*/
private String getName(String fileName) {
Random random = new Random();
return this.fileName = "" + random.nextInt(10000)
+ System.currentTimeMillis() + this.getFileExt(fileName);
}
/**
* 依据字符串创建本地文件夹 并依照日期建立子文件夹返回
*
* @param path
* @return
*/
private String getFolder(String path) {
SimpleDateFormat formater = new SimpleDateFormat("yyyyMMdd");
path += "/" + formater.format(new Date());
//File dir = new File(this.getPhysicalPath(path));
File dir = new File(path);
if (!dir.exists()) {
try {
dir.mkdirs();
} catch (Exception e) {
//this.state = this.errorInfo.get("DIR");
return "";
}
}
return path;
}
/**
* 依据传入的虚拟路径获取物理路径
*
* @param path
* @return
*/
private String getPhysicalPath(String path) {
String servletPath = this.request.getServletPath();
String realPath = this.request.getSession().getServletContext()
.getRealPath(servletPath);
return new File(realPath).getParent() + "/" + path;
}
//获取文件名称称去掉后缀
private String getFileName(String filename){
return filename.substring(0, filename.lastIndexOf("."));
}

在上传的过程中文件都是以temp的格式存储到云中。在网页浏览过程中不能直接获取。所以我们转化一下存储成jsp的格式进行上传。

FileUploadUtils 类例如以下

package com.hps.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import com.baidu.inf.iis.bcs.BaiduBCS;
import com.baidu.inf.iis.bcs.auth.BCSCredentials;
import com.baidu.inf.iis.bcs.auth.BCSSignCondition;
import com.baidu.inf.iis.bcs.http.HttpMethodName;
import com.baidu.inf.iis.bcs.model.ObjectMetadata;
import com.baidu.inf.iis.bcs.request.GenerateUrlRequest;
import com.baidu.inf.iis.bcs.request.PutObjectRequest;
import com.baidu.inf.iis.bcs.response.BaiduBCSResponse; public class FileUploadUtils { private static FileUploadUtils instance; private static final Log log = LogFactory.getLog(FileUploadUtils.class); // ----------------------------------------//
private static String host = "bcs.duapp.com";
//accessKey secretKey 自己去申请开发人员账号自己填写
private static String accessKey = "";
private static String secretKey = "";
private static String bucket = "";
// ---------------------------------------// // ---------------------------------------//
private static BCSCredentials credentials = null;
private static BaiduBCS baiduBCS = null;
// ---------------------------------------// //static String object = "/images/first-object2";
private static final String IMAGE_DIR = "/images/test/";
private static final String FILE_DIR = "/files/"; private FileUploadUtils() {
credentials = new BCSCredentials(accessKey, secretKey);
baiduBCS = new BaiduBCS(credentials, host);
baiduBCS.setDefaultEncoding("UTF-8");
} public static FileUploadUtils getInstance() {
if (instance == null) {
instance = new FileUploadUtils();
}
return instance;
} public String uploadImage(File image) {
String object = IMAGE_DIR + image.getName();
putObjectByFile(image, object);
return generateUrl(object);
} public static void uploadFile(File file) {
String object = FILE_DIR + file.getName();
putObjectByFile(file, object);
} private static void putObjectByFile(File file, String object) {
PutObjectRequest request = new PutObjectRequest(bucket, object, file);
ObjectMetadata metadata = new ObjectMetadata();
// metadata.setContentType("text/html");
request.setMetadata(metadata);
BaiduBCSResponse<ObjectMetadata> response = baiduBCS.putObject(request);
ObjectMetadata objectMetadata = response.getResult();
log.info("x-bs-request-id: " + response.getRequestId());
log.info(objectMetadata);
} public String generateUrl(String object) {
GenerateUrlRequest generateUrlRequest = new GenerateUrlRequest(HttpMethodName.GET, bucket, object);
generateUrlRequest.setBcsSignCondition(new BCSSignCondition());
//generateUrlRequest.getBcsSignCondition().setIp("115.156.249.55");
//generateUrlRequest.getBcsSignCondition().setTime(123455777777L);
//generateUrlRequest.getBcsSignCondition().setSize(123455L);
return baiduBCS.generateUrl(generateUrlRequest);//上传百度云的核心
} private static File createSampleFile() {
//Writer writer = new OutputStreamWriter(new FileOutputStream(file));
//URL url = Sample.class.getClassLoader().getResource("20140317172637.jpg");
//File file = new File(url.toString());
File file = new File("D:\\work\\BAEtest\\WebRoot\\WEB-INF\\classes\\20140317172637.jpg");
//file.deleteOnExit();
return file;
}
}

数据库存数格式例如以下

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2FwdGFpbl93bDkwODM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

这样前台能够直接获取依据url 直接获取百度云中的图片非常方便。唯一不足的地方时未来可能会收费。。







写个文章记录一下。本人菜鸟,欢迎其这是一个大牛还有问题意见建议。

版权声明:本文博主原创文章,博客,未经同意不得转载。

uploadify控制 上传图片到百度云存储的更多相关文章

  1. C#调用百度云存储接口上传文件

    因前几日见园子里有人说可以把网站静态文件放在百度上,于是去百度开放平台看了看,发现之前那篇文章不是调的云存储接口啊... 于是自己写了个C#能调百度云存储的例子(百度云开放平台只提供php.java. ...

  2. Java使用百度云存储BCS-让你的数据下载飞起来

    作者:Vinkn 来自http://www.cnblogs.com/Vinkn/ 一.简介 云也不是一个新概念了,云到底是什么东西,你叫我说个明明白白的我也说不出来,姑且算作联网的就叫做云.国内的云服 ...

  3. 百度云bae安装discuz论坛教程

    作者:孤风一剑   发布:2013-05-11 13:37   栏目:站长在线   点击:6,846次   41条评论 各位草根们有福啦,弄了几天,终于可以在bae上搭建discuz论坛了,下面我就简 ...

  4. Ueditor上传图片到本地改造到上传图片到云存储

    作为新手说多了都是泪啊!我特别想记录一下作为菜鸟时的坑.看看以后是否会看着笑出来. 为什么要改到云存储上就不说了.好处多多. 视频教程上使用的又拍云同时也提到了七牛云.下来我自己也查了下.又拍云是试用 ...

  5. 使用百度云 BOS 和 C# SDK 开发数据存储

    Ø  简介 本文主要介绍如何使用百度云的 C# SDK 操作 BOS(Baidu Object Storage/百度对象存储),以及常见问题和解决办法.本文将以以下几点展开学习: 1.   基本介绍 ...

  6. Thinkphp5 对接百度云对象存储 BOS (上传、删除)

    首先下载SDK包可以在 官网下载,或者在项目根目录使用composer . composer require baidubce/bce-sdk-php 压缩包里面有五个文件,实际运用到只有两个,然后放 ...

  7. 自建存储与使用微软Azure、七牛等第三方云存储综合考察分析

    http://www.cnblogs.com/sennly/p/4136734.html 各种云服务这两年炒的火热,加之可以降低成本,公司想先在部分业务上尝试使用下,刚好最近有个项目有大量小文件需要存 ...

  8. 35.百度云语音识别接口使用及PyAudio语音识别模块安装

    百度云语音识别接口使用: 百度云语音识别接口文档:https://cloud.baidu.com/doc/SPEECH/ASR-API.html#JSON.E6.96.B9.E5.BC.8F.E4.B ...

  9. 基于arduino、百度云、采用django、redis鱼缸在线监控

    大家好,今天我给大家分享一下之前做的一个鱼缸远程监控的案例,希望有人喜欢 首先给大家看一下结构框架,由于我之前买的arduino开发板不带wifi功能,所有是通过pc机转发一下上的百度云,最近我刚购买 ...

随机推荐

  1. JQuery是继prototype之后又一个优秀的Javascript库

    JQuery是继prototype之后又一个优秀的Javascript库.它是轻量级的js库 ,它兼容CSS3,还兼容各种浏览器(IE 6.0+, FF 1.5+, Safari 2.0+, Oper ...

  2. RVDS 3.1 下载地址及破解方法

    RealView Development Suite 3.1  RVDS 3.1下载地址:https://silver.arm.com/download/Development_Tools/RVDS/ ...

  3. RabbitMq消息序列化简述

    涉及网络传输的应用.序列化不可避免. 发送端以某种规则将消息转成byte数组进行发送. 接收端则以约定的规则进行byte[]数组的解析. 序列化的选择能够是jdk序列化,hessian,jackson ...

  4. Microsoft Visio 2010 怎样把直线,虚线与箭头之间切换

    我也是第一次接触这个东西,感慨是把箭头变成直线都搞了半天没搞出来,上网搜页没结果,一次偶然我会了,真是老天爷眷顾我,如今把方法给大家分享,欢迎大家不吝赐教. 直线变箭头: 刚開始是直线: 接着选中直线 ...

  5. Top 10 Mistakes Java Developers Make(转)

    文章列出了Java开发者最常犯的是个错误. 1.将数组转换为ArrayList 为了将数组转换为ArrayList,开发者经常会这样做: ? 1 List<String> list = A ...

  6. java导入excel

    package com.duosen.gate.test; import java.io.File; import java.io.FileInputStream; import java.io.Fi ...

  7. 6.组函数(avg(),sum(),max(),min(),count())、多行函数,分组数据(group by,求各部门的平均工资),分组过滤(having和where),sql优化

     1组函数 avg(),sum(),max(),min(),count()案例: selectavg(sal),sum(sal),max(sal),min(sal),count(sal) from ...

  8. Linux虚拟文件系统VFS解决

    参考<Linux内核设计与实现> 虚拟文件系统(VFS)它是linux核心和详细I/O一个普通的访问接口之间的包装设备,通过这层界面,linux内核能够以同一的方式訪问各种I/O设备. 虚 ...

  9. Javascript语言精粹之Array常用方法分析

    Javascript语言精粹之Array常用方法分析 1.Array常用方法分析 1.1 Array.prototype.sort() Javascript的默认比较函数假定被排序元素都是字符串,所以 ...

  10. JSTL 中<c:forEach>使用

    <c:forEach 详解 博客分类: JSTL   <c:forEach>标签用于通用数据循环,它有以下属性 属 性 描 述 是否必须 缺省值 items 进行循环的项目 否 无 ...