使用pcs api往免费的百度网盘上传下载文件的方法


Posted in Javascript onMarch 17, 2016

百度个人云盘空间大,完全免费,而且提供了pcs api供调用操作文件,在平时的项目里往里面保存一些文件是很实用的。

环境准备:

开通读写网盘的权限及获取access_token:http://blog.csdn.net/langyuezhang/article/details/47206621

百度官方pcs api文档:http://developer.baidu.com/wiki/index.php?title=docs/pcs/overview,上面有各种语言的SDK,我用的laravel5,直接导里面的php SDK还用不了,稍做了修改才能用的。

看完上面两篇文章,基本就可以使用了,下面贴出写直接把用户选择的图片预览然后upload到网盘,上传的api:
https://pcs.baidu.com/rest/2.0/pcs/file?method=upload&path=%2fapps%2wp2pcs%2f1.JPG&access_token=***红色部分是固定的,因为只允许上传到这个目录下,实际对应到网盘的目录是我的网盘/我的应用数据/wp2pcs、,无需先创建目录再上传文件,只需要指定路径,它会自动创建,如你想把图片上传到/apps/wp2pcs/img下,path就写/apps/wp2pcs/img/1.jpg就可以了。下面是把用户在网页上选择的图片,预览后直接上传到网盘的代码,参照了网上的例子:预览:

//图片上传预览 IE是用了滤镜。
function previewImage(file, product)
{
getPhotopty();
console.log("previewImage");
uploadAndSubmit(product);
var div = document.getElementById('preview' + product);
var fileName = file.value;
//upload();
if (file.files)
{
var i = 0;
var funAppendImage = function () {
var _file = file.files[i];
if (_file) {
var reader = new FileReader()
reader.onload = function (evt) {
fileName = _file.name;
div.innerHTML += '<div class="col-xs-6 col-md-3"><a style="float:right;cursor:pointer;" onclick="del(this)">X</a><div class="thumbnail"><img id=imghead' + product + fileName + '></div></div>';
var img = document.getElementById('imghead' + product + fileName);
img.src = evt.target.result;
i++;
funAppendImage();
}
reader.readAsDataURL(_file);
}
};
funAppendImage();
}
$('#coverBg').show();
$('#coverDiv').show();
//$("#uploadFrm" + product).submit();
}

上传:

var access_token = "***********";
var baseUrl = "https://c.pcs.baidu.com/rest/2.0/pcs/";
function uploadAndSubmit(product) {
console.log("start uploadAndSubmit");
if (typeof FileReader == 'undefined') {
alert("你的浏览器不支持FileReader接口!");
}
var taskName = $("#txtTask").val() + "-" + $("#txtTask2").val();
var form = document.forms["uploadFrm" + product];
console.log("form:" + form);
var fileCtrl = "filectrl" + product;
console.log("filectrl:" + fileCtrl);
//if (form[fileCtrl].files.length > 0)
console.log($("#filectrl" + product)[0]);
if ($("#filectrl" + product)[0].files.length > 0)
{
for (var i = 0; i < $("#filectrl" + product)[0].files.length; i++)
{
var file = form[fileCtrl].files[i];
console.log(file.name);
var filePath = "%2fapps%2fwp2pcs%2f" + taskName + "%2f" + file.name;
console.log("add exif info to db");
getExifIinfo(taskName, file, product, filePath);
//document.getElementById("bytesRead").textContent = file.size;
console.log("start XMLHttpRequest");
var xhr = new XMLHttpRequest();
console.log(access_token);
var url = baseUrl + "file?method=upload&path=%2fapps%2fwp2pcs%2f" + taskName + "%2f" + file.name + "&access_token=" + access_token + "&ondup=overwrite&count=" + i;
console.log(url);
xhr.open("POST", url, true);
var formData = new FormData();
formData.append("file", file);
console.log("onreadystatechange");
xhr.onreadystatechange = function () {
console.log("onreadystatechange start");
//console.log(xhr.status);
if (xhr.readyState == 4) {
if (xhr.status == 200) {
console.log("upload complete");
console.log("response: " + xhr.responseText);
var result = $.parseJSON(xhr.responseText);
if (result.hasOwnProperty("path"))
{
$("#reusltMsg").append('<div class="alert alert-success" role="alert"> 上传成功.</div>');
} else
{
$("#reusltMsg").append('<div class="alert alert-danger" role="alert"> 上传失败.</div>');
}
} else
{
$("#reusltMsg").append('<div class="alert alert-danger" role="alert"> 上传失败(200).</div>');
}
}
$('#coverBg').hide();
$('#coverDiv').hide();
}
xhr.send(formData);
}
} else
{
alert("Please choose a file.");
$('#coverBg').hide();
$('#coverDiv').hide();
}
}
Javascript 相关文章推荐
Jquery.LazyLoad.js修正版下载,实现图片延迟加载插件
Mar 12 Javascript
extjs中form与grid交互数据(record)的方法
Aug 29 Javascript
CSS+jQuery实现的一个放大缩小动画效果
Sep 24 Javascript
js判断url是否有效的两种方法
Mar 04 Javascript
JavaScript中this关键词的使用技巧、工作原理以及注意事项
May 20 Javascript
Mac OS X 系统下安装和部署Egret引擎开发环境
Sep 03 Javascript
jQuery实现“扫码阅读”功能
Jan 21 Javascript
vue使用better-scroll实现下拉刷新、上拉加载
Nov 23 Javascript
用WebStorm进行Angularjs 2开发(环境篇:Windows 10,Angular-cli方式)
Dec 05 Javascript
express.js中间件说明详解
Mar 19 Javascript
微信小程序移动拖拽视图-movable-view实例详解
Aug 17 Javascript
layui点击弹框页面 表单请求的方法
Sep 21 Javascript
Fullpage.js固定导航栏-实现定位导航栏
Mar 17 #Javascript
基于socket.io+express实现多房间聊天
Mar 17 #Javascript
盘点javascript 正则表达式中 中括号的【坑】
Mar 16 #Javascript
教你用javascript实现随机标签云效果_附代码
Mar 16 #Javascript
浅析AMD CMD CommonJS规范--javascript模块化加载学习心得总结
Mar 16 #Javascript
js纯数字逐一停止显示效果的实现代码
Mar 16 #Javascript
神奇!js+CSS+DIV实现文字颜色渐变效果
Mar 16 #Javascript
You might like
我的群发邮件程序
2006/10/09 PHP
超级好用的一个php上传图片类(随机名,缩略图,加水印)
2010/06/30 PHP
朋友网关于QQ相关的PHP代码(研究QQ的绝佳资料)
2015/01/26 PHP
php简单判断两个字符串是否相等的方法
2015/07/13 PHP
php调用自己java程序的方法详解
2016/05/13 PHP
Web版彷 Visual Studio 2003 颜色选择器
2007/01/09 Javascript
jquery下为Event handler传递动态参数的代码
2011/01/06 Javascript
javascript生成随机颜色示例代码
2014/05/05 Javascript
使用JavaScript刷新网页的方法
2015/06/04 Javascript
jquery 表单验证之通过 class验证表单不为空
2015/11/02 Javascript
js数组去重的5种算法实现
2015/11/04 Javascript
JavaScript实现阿拉伯数字和中文数字互相转换
2016/06/12 Javascript
详解React Native 采用Fetch方式发送跨域POST请求
2017/11/15 Javascript
Vue项目使用CDN优化首屏加载问题
2018/04/01 Javascript
vue+axios 前端实现登录拦截的两种方式(路由拦截、http拦截)
2018/10/24 Javascript
深入浅析Vue 中 ref 的使用
2019/04/29 Javascript
使用layer弹窗提交表单时判断表单是否输入为空的例子
2019/09/26 Javascript
使用Vue-cli3.0创建的项目 如何发布npm包
2019/10/10 Javascript
[44:58]2018DOTA2亚洲邀请赛 4.5 淘汰赛 LGD vs Liquid 第二场
2018/04/06 DOTA
Python pass 语句使用示例
2014/03/11 Python
Python面向对象特殊成员
2017/04/24 Python
python定向爬取淘宝商品价格
2018/02/27 Python
wtfPython—Python中一组有趣微妙的代码【收藏】
2018/08/31 Python
python使用pymongo操作mongo的完整步骤
2019/04/13 Python
Python新手学习函数默认参数设置
2020/06/03 Python
基于Python 的语音重采样函数解析
2020/07/06 Python
CSS3哪些新特性值得称赞
2016/03/02 HTML / CSS
Java里面StringBuilder和StringBuffer有什么区别
2016/06/06 面试题
对于没有初始化的变量的初始值可以作怎样的假定
2014/10/12 面试题
司法建议书范文
2014/05/13 职场文书
环保建议书600字
2014/05/14 职场文书
三好学生先进事迹材料
2014/08/28 职场文书
机械设计专业大学生职业生涯规划书范文
2014/09/13 职场文书
2016优秀大学生个人事迹材料范文
2016/03/01 职场文书
给原生html中添加水印遮罩层的实现示例
2021/04/02 Javascript
SQL Server中常用截取字符串函数介绍
2022/03/16 SQL Server