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";

	@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;
	}
}

数据库存数格式如下

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

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

uploadify控件 上传图片到百度云存储

时间: 2024-08-09 22:25:51

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

Uploadify 控件上传图片 + 预览

jquery的Uploadify控件上传图片和预览使用介绍. 在简单的servlet系统中和在SSH框架中,后台处理不同的,在三大框架中图片预览时费了不少力气,所以下面将两种情况都介绍一下. 1,前台代码 script: [html] view plaincopyprint? $("#uploadify").uploadify({ 'langFile'       : '<%=request.getContextPath()%>/config/juploadify/uplo

Ueditor结合七牛云及百度云存储(JAVA版,ueditor-1.4.3)实现图片文件上传

[前言] 之前研究了ueditor直接上传图片文件到七牛云以及百度云存储,见下面两篇文章: http://uikoo9.com/blog/detail/ueditor-for-bcs http://uikoo9.com/blog/detail/ueditor-for-qiniu 另外还有一篇ueditor-1.4.3-jsp的使用教程: http://uikoo9.com/blog/detail/how-to-use-ueditor 今天实现了ueditor可配置选择上传到七牛还是百度还是本地,

ASP.NET使用文件上传控件上传图片

ASPX代码 <%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xht

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

一.简介 云也不是一个新概念了,云到底是什么东西,你叫我说个明明白白的我也说不出来,姑且算作联网的就叫做云.国内的云服务商还是有很多了,主要有两大类,一类是类似于阿里云的类主机型的云提供商,比如万网等传统空间商转过来的:还有一类是应用应用托管平台,比如BAE,SAE.相对于阿里云等空间商之类的来说,应用托管平台的入门更低,为广大的苦逼程序猿提供了一个好的测试平台. 我最近负责的软件升级程序,多平台多文件多版本,如果是自己架构文件服务器带宽肯定不能满足业务需求,于是上手百度云存储BCS服务,现在使

百度云存储教程---免费建立自己的静态网站

欢迎訪问的我个人站点:点击打开链接--我的个人站点    想建设个人站点的朋友能够找我聊.无门槛,就能永远自己的永久域名和server空间,全然免费哦 曾经开发的站点苦于没有云server,站点没地方挂,如今百度出了云存储和应用引擎,能够让开发人员免费上传动态站点和静态站点.这篇文章,我准备用云存储的方式,存储用户的静态站点,开发人员可通过将静态页面上传至云存储空间中,并将其訪问权限设置为公开读,就可以实现静态站点的效果.文章底部有源代码和项目下载. 一.实现效果 本地目录 上传成后百度云存储的

(转)深入理解最强桌面地图控件GMAP.NET --- 百度地图

GMAP.NET支持了Google, Bing, Ovi, Openstreetmap, Yahoo,GIS等多种地图,但国内的地图支持得比较少. 不过没有关系,我们可以为GMAP.NET添加百度地图的支持,只要了解了地图加载的原理,就很容易集成进来, 最重要的是,它是支持离线的,也就是说利用GMAP.NET,我们可以制作各种离线地图供我们桌面应用程序使用, 这也是我为什么称之为最强地图控件的原因. 如何在你的程序中使用GMAP.NET百度地图 整个代码已经提交到 http://ypmap.go

百万行数据的考验 – 葡萄城ActiveReports .NET报表控件签约博商云

近日,葡萄城成功签约博商云科技有限公司(以下简称"博商云"),用 ActiveReports .NET 报表控件,助力博商云旗下全渠道 ERP 零售系统中的各种数据报表应用. 博商云是一家具有国际背景的计算机软件技术产品研发与服务供应商,拥有国际化视野,为国内外有志于建立并发展全渠道新零售运营模式的企业提供优质的软件产品与技术服务.注册资本500万元,公司总部位于美国洛杉矶. 博商云是国内首家开始研究新零售系统的企业,是新零售系统的领导者,截止目前已深入研究实践新零售领域7年,对于指导

asp.net fileupload控件上传图片并预览图片

页面代码: <form id="form1" runat="server"> <div> <asp:FileUpload ID="FileUpload1" runat="server" /> <asp:Button ID="Button1" runat="server" Text="上传" Width="54px&q

Android AutoCompleteTextView控件实现类似百度搜索提示,限制输入数字长度

Android AutoCompleteTextView 控件实现类似被搜索提示,效果如下 1.首先贴出布局代码 activity_main.xml: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="f