使用pcs api往免费的百度网盘上传下载文件的方法
百度个人云盘空间大,完全免费,而且提供了pcsapi供调用操作文件,在平时的项目里往里面保存一些文件是很实用的。
环境准备:
开通读写网盘的权限及获取access_token:http://blog.csdn.net/langyuezhang/article/details/47206621
百度官方pcsapi文档:http://developer.baidu.com/wiki/index.php?title=docs/pcs/overview,上面有各种语言的SDK,我用的laravel5,直接导里面的phpSDK还用不了,稍做了修改才能用的。
看完上面两篇文章,基本就可以使用了,下面贴出写直接把用户选择的图片预览然后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是用了滤镜。
functionpreviewImage(file,product)
{
getPhotopty();
console.log("previewImage");
uploadAndSubmit(product);
vardiv=document.getElementById('preview'+product);
varfileName=file.value;
//upload();
if(file.files)
{
vari=0;
varfunAppendImage=function(){
var_file=file.files[i];
if(_file){
varreader=newFileReader()
reader.onload=function(evt){
fileName=_file.name;
div.innerHTML+='<divclass="col-xs-6col-md-3"><astyle="float:right;cursor:pointer;"onclick="del(this)">X</a><divclass="thumbnail"><imgid=imghead'+product+fileName+'></div></div>';
varimg=document.getElementById('imghead'+product+fileName);
img.src=evt.target.result;
i++;
funAppendImage();
}
reader.readAsDataURL(_file);
}
};
funAppendImage();
}
$('#coverBg').show();
$('#coverDiv').show();
//$("#uploadFrm"+product).submit();
}
上传:
varaccess_token="***********";
varbaseUrl="https://c.pcs.baidu.com/rest/2.0/pcs/";
functionuploadAndSubmit(product){
console.log("startuploadAndSubmit");
if(typeofFileReader=='undefined'){
alert("你的浏览器不支持FileReader接口!");
}
vartaskName=$("#txtTask").val()+"-"+$("#txtTask2").val();
varform=document.forms["uploadFrm"+product];
console.log("form:"+form);
varfileCtrl="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(vari=0;i<$("#filectrl"+product)[0].files.length;i++)
{
varfile=form[fileCtrl].files[i];
console.log(file.name);
varfilePath="%2fapps%2fwp2pcs%2f"+taskName+"%2f"+file.name;
console.log("addexifinfotodb");
getExifIinfo(taskName,file,product,filePath);
//document.getElementById("bytesRead").textContent=file.size;
console.log("startXMLHttpRequest");
varxhr=newXMLHttpRequest();
console.log(access_token);
varurl=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);
varformData=newFormData();
formData.append("file",file);
console.log("onreadystatechange");
xhr.onreadystatechange=function(){
console.log("onreadystatechangestart");
//console.log(xhr.status);
if(xhr.readyState==4){
if(xhr.status==200){
console.log("uploadcomplete");
console.log("response:"+xhr.responseText);
varresult=$.parseJSON(xhr.responseText);
if(result.hasOwnProperty("path"))
{
$("#reusltMsg").append('<divclass="alertalert-success"role="alert">上传成功.</div>');
}else
{
$("#reusltMsg").append('<divclass="alertalert-danger"role="alert">上传失败.</div>');
}
}else
{
$("#reusltMsg").append('<divclass="alertalert-danger"role="alert">上传失败(200).</div>');
}
}
$('#coverBg').hide();
$('#coverDiv').hide();
}
xhr.send(formData);
}
}else
{
alert("Pleasechooseafile.");
$('#coverBg').hide();
$('#coverDiv').hide();
}
}