uploadify控件 上传图片到百度云存储
最近使用了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,用于打开选取本地文件的按钮 'script' : 'uploadify.php','fileObjName' : 'file','cancelImg' : 'uploadify/uploadify-cancel.png',//取消上传文件的按钮图片,就是个叉叉 'folder' : 'uploadify/uploads',//上传文件的目录'queueID' : 'fileQueue','auto' : false,//是否选取文件后自动上传'multi' : true,//是否支持多文件上传'simUploadLimit' : 7,//每次最大上传文件数'buttonText' : '选择文件',//按钮上的文字'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";@Autowiredprivate 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上传文件返回urlschSlide.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;}
}
数据库存数格式如下
这样前台可以直接获取根据url 直接获取百度云中的图片很方便。唯一不足的地方时未来可能会收费。。。。。
写个文章记录一下,本人菜鸟,欢迎其他大牛提建议意见还有问题。
uploadify控件 上传图片到百度云存储相关推荐
- uploadify控制 上传图片到百度云存储
最近使用uploadify 控制图片上传到百度网盘....总的想法是 招待会uploadify获取文件传入后台,调用百度云存储api上传到百度网盘,返回url 联系.送存储在数据库中的链接.因此,我们 ...
- Ueditor结合七牛云及百度云存储(JAVA版,ueditor-1.4.3)实现图片文件上传
[前言] 之前研究了ueditor直接上传图片文件到七牛云以及百度云存储,见下面两篇文章: http://uikoo9.com/blog/detail/ueditor-for-bcs http://u ...
- php 百度网盘上传文件大小限制吗,百度云存储,curl_百度云存储如何上传数G超大文件(视频类)和防盗链等一系列问题,百度云存储,curl - phpStudy...
百度云存储如何上传数G超大文件(视频类)和防盗链等一系列问题 最近在开发一个视频网站,打算用百度开放云平台上的云存储,但视频较大,一般有几个G(高清电影).1G一下的视频管理控制台里能用页面上传,但1 ...
- c#--使用FileUpload控件上传图片
利用.net里面的FileUpload控件上传图片到服务器, 我的Default.aspx文件里面除了添加这个控件外还用了一个Button控件, 用以实现上传.基本步骤如下: 1.首先是判断FileU ...
- 使用python管理百度云存储
2019独角兽企业重金招聘Python工程师标准>>> 百度云存储(BCS)提供了很强大的存储空间,我最近考虑是不是拿它做个图床,其官方提供的python SDK相当详细,操作也比较 ...
- 百度云存储教程---免费建立自己的静态站点
欢迎访问的我个人网站:点击打开链接--我的个人网站 想建设个人网站的朋友可以找我聊.无门槛,就能永远自己的永久域名和服务器空间,完全免费哦 以前开发的网站苦于没有云服务器,网站没地方挂,现在百度 ...
- 百度云资深架构师聊百度云存储架构特点
12月9日,2016中国存储峰会在北京举行.在"云存储及灾备技术论坛",百度云资深架构师王耀介绍了百度云的发展历程,并就百度云存储产品体系中的块存储与对象存储的架构与特点进行了重点 ...
- python flask教程百度云,Python Web框架Flask中使用百度云存储BCS实例
对于部署在百度应用引擎BAE上的项目,使用百度云存储BCS(Baidu Cloud Storage)是不错的存储方案. 百度云存储已有Python SDK,对它进行简单封装后,就可以直接在Flask中 ...
- poscms百度云存储BCS
百度云存储,即BCS(Baidu Cloud Storage),提供object网络存储服务,旨在利用百度在分布式以及网络方面的优势为开发者提供安全.简单.高效的存储服务. 1.申请百度云存储API: ...
- 百度云存储服务BCS教程使用java接入
目前百度云存储服务已为广大开发者提供了以下SDK: PHP SDK Java SDK Python SDK C/C++(linux版本)SDK 1.首先得先注册百度帐号,然后申请加入百度开发者.这个就 ...
最新文章
- Google更新最大的带注释图像数据集,添加本地化叙述
- python语音播报-Python实现有道翻译+语音播报
- JSP具体条款——response对象
- MySQL innodb每行数据长度的限制
- php可以用scanf,C/C++中 使用scanf和printf如何读入输出double型数据。
- 7、Cocos2dx 3.0游戏开发找小三之3.0版本号的代码风格
- linux共享内存 pmu,如何使用gator/streamline 收集PMU perf event计数
- mysql事件【定时器】
- mysql 重置表索引_第19期:索引设计(哈希索引数据分布与使用场景)
- JSONP解决前端跨域问题
- Python路飞学城老男孩内部书籍,Python全栈开发实战pdf
- PHP学习日记0_PHP、静态网页、动态网页、静态网站访问流程、动态网站访问流程
- 安卓9.0刷linux,Android 9.0 内核编译实战(以一加6为例)
- 事业单位工资计算机公积金计算,求问事业单位住房公积金如何计算
- PA1--实现基础设施、表达式求值和监视点
- 共模电感的原理以及使用情况
- 使用 maven-semantic-release 实现自动化发版
- memcached(十三)注意事项
- DCT变换在图像压缩中的实现
- 学术期刊的概念、分类,计算机类主要期刊索引和机构