oss上传回调
前段时间正好做个项目,就是用的oss,普通上传和断点续传,代码贴出来,看是不是你需要的
publicclassOssManage{
publicstaticStringACCESS_KEY_ID=null;
publicstaticStringACCESS_KEY_SECRET=null;
publicstaticStringENDPOINT=null;
publicstaticStringBUCKETNAME=null;
publicstaticStringBUCKETNAME_VIDEO=null;
publicstaticStringOUT_OF_DATE=null;
privateOSSClientclient=null;
privateObjectMetadatameta=null;
static{
try{
ACCESS_KEY_ID=SysConst.getProperty("OSS_ACCESS_KEY_ID");
ACCESS_KEY_SECRET=SysConst.getProperty("OSS_ACCESS_KEY_SECRET");
ENDPOINT=SysConst.getProperty("OSS_ENDPOINT");
BUCKETNAME=SysConst.getProperty("OSS_BUCKETNAME");
BUCKETNAME_VIDEO=SysConst.getProperty("OSS_BUCKETNAME_VIDEO");
OUT_OF_DATE=SysConst.getProperty("OSS_OUT_OF_DATE");
}catch(java.lang.Exceptione){
e.printStackTrace();
}
}
publicvoidinit(){
//<ahref="https://www..com/s?wd=%E5%88%9D%E5%A7%8B%E5%8C%96&tn=44039180_cpr&fenlei=-bIi4WUvYETgN-"target="_blank"class="-highlight">初始化</a>一个OSSClient
client=newOSSClient(ENDPOINT,ACCESS_KEY_ID,ACCESS_KEY_SECRET);
meta=newObjectMetadata();
}
/**
*@Description:上传文件到OSS<ahref="https://www..com/s?wd=%E6%96%87%E4%BB%B6%E6%9C%8D%E5%8A%A1%E5%99%A8&tn=44039180_cpr&fenlei=-bIi4WUvYETgN-"target="_blank"class="-highlight">文件服务器</a>
*@paramcontent文件流
*@paramkey上传为OSS<ahref="https://www..com/s?wd=%E6%96%87%E4%BB%B6%E6%9C%8D%E5%8A%A1%E5%99%A8&tn=44039180_cpr&fenlei=-bIi4WUvYETgN-"target="_blank"class="-highlight">文件服务器</a>的唯一标识
*@parammimeType文档类型
*@throwsException
*@ReturnType:StringOSSObject的ETag值。
*/
publicStringuploadFile(InputStreamcontent,Stringkey,StringmimeType)throwsException{
//进行<ahref="https://www..com/s?wd=%E5%88%9D%E5%A7%8B%E5%8C%96&tn=44039180_cpr&fenlei=-bIi4WUvYETgN-"target="_blank"class="-highlight">初始化</a>
init();
//必须设置ContentLength
meta.setContentType(mimeType);
//上传Object.
LogUtil.printConsoleLog("*****************上传图片到oss服务器开始*****************"+key);
PutObjectResultresult=client.putObject(BUCKETNAME,key,content,meta);
LogUtil.printConsoleLog("*****************上传图片到oss服务器结束*****************"+key);
returnresult.getETag();
}/**
*@Description:根据key获取oss服务器上的图片地址
*@paramkey
*@return
*@ReturnType:String
*/
publicStringgetImgURl(Stringkey){
init();
Dateexpires=newDate(newDate().getTime()+Integer.parseInt(OUT_OF_DATE));//30minutetoexpire
;
if(key.startsWith("msplatform")){
generatePresignedUrlRequest=(BUCKETNAME,key);
}else{
generatePresignedUrlRequest=(BUCKETNAME_VIDEO,key);
}
generatePresignedUrlRequest.setExpiration(expires);
URLurl=client.generatePresignedUrl(generatePresignedUrlRequest);
returnurl.toString();
}
/**
*@Description:根据key获取oss服务器上的ipa文件地址
*@paramkey
*@return
*@ReturnType:String
*/
publicStringgetIpaURl(Stringkey){
init();
Dateexpires=newDate(newDate().getTime()+10*365*24*3600*1000);
;
if(key.startsWith("msplatform")){
generatePresignedUrlRequest=(BUCKETNAME,key);
}else{
generatePresignedUrlRequest=(BUCKETNAME_VIDEO,key);
}
generatePresignedUrlRequest.setExpiration(expires);
URLurl=client.generatePresignedUrl(generatePresignedUrlRequest);
returnurl.toString();
}
/**
*@Description:根据key获取oss服务器上的图片地址
*@paramkey
*@return
*@ReturnType:String
*/
publicInputStreamgetObject(Stringkey){
init();
OSSObjectobject=null;
if(key.startsWith("msplatform")){
object=client.getObject(BUCKETNAME,key);
}else{
object=client.getObject(BUCKETNAME_VIDEO,key);
}
object.getObjectMetadata().getContentType();
//获取Object的<ahref="https://www..com/s?wd=%E8%BE%93%E5%85%A5%E6%B5%81&tn=44039180_cpr&fenlei=-bIi4WUvYETgN-"target="_blank"class="-highlight">输入流</a>
InputStreamobjectContent=object.getObjectContent();
returnobjectContent;
}
/**
*@Description:删除文件
*@paramkeyOSS<ahref="https://www..com/s?wd=%E6%96%87%E4%BB%B6%E6%9C%8D%E5%8A%A1%E5%99%A8&tn=44039180_cpr&fenlei=-bIi4WUvYETgN-"target="_blank"class="-highlight">文件服务器</a>上文件的唯一标识
*@ReturnType:void
*/
publicvoiddeleteFile(Stringkey){
init();
client.deleteObject(BUCKETNAME,key);
}
/**
*@Description:断点上传文件到OSS文件服务器
*@paramcontent文件流
*@paramkey上传为OSS文件服务器的唯一标识
*@paramposition位置
*/
publicStringappendObjectFile(InputStreamcontent,Stringkey,intposition,StringmimeType)throwsException{
//进行<ahref="https://www..com/s?wd=%E5%88%9D%E5%A7%8B%E5%8C%96&tn=44039180_cpr&fenlei=-bIi4WUvYETgN-"target="_blank"class="-highlight">初始化</a>
init();
//必须设置ContentLength
meta.setContentLength(position);
meta.setContentType(mimeType);
meta.setCacheControl("no-cache");
meta.setContentEncoding("utf-8");
//上传
LogUtil.printConsoleLog("*****************断点上传图片到oss服务器开始*****************"+key);
=newAppendObjectRequest(BUCKETNAME,key,content,meta);
appendObjectRequest.setPosition(Long.valueOf(position));
=client.appendObject(appendObjectRequest);
LogUtil.printConsoleLog("*****************断点上传图片到oss服务器结束*****************"+key);
returnappendObjectResult.getNextPosition().toString();
}
publicstaticvoidmain(String[]args){
OssManageossManage=newOssManage();
}
}
② 阿里云oss php上传图片问题 上传前把图片重命名之后再上传到oss 怎么写代码呢
他这里有一个上传示例的
<?php
/**
*加载sdk包以及错误代码包
*/
require_once'oss_php_sdk/sdk.class.php';
$oss_sdk_service=newALIOSS();
$bucket='你的bucket名字';
if((($_FILES["file"]["type"]=="image/gif")
||($_FILES["file"]["type"]=="image/jpeg")
||($_FILES["file"]["type"]=="image/pjpeg"))
&&($_FILES["file"]["size"]<2000000))
{
if($_FILES["file"]["error"]>0)
{
echo"ReturnCode:".$_FILES["file"]["error"]."<br/>";
}
else
{
echo"Upload:".$_FILES["file"]["name"]."<br/>";
echo"Type:".$_FILES["file"]["type"]."<br/>";
echo"Size:".($_FILES["file"]["size"]/1024)."KB<br/>";
echo"Tempfile:".$_FILES["file"]["tmp_name"]."<br/>";
$content='';
$length=0;
$fp=fopen($_FILES["file"]["tmp_name"],'r');
if($fp)
{
$f=fstat($fp);
$length=$f['size'];
while(!feof($fp))
{
$content.=fgets($fp,8192);
}
}
$upload_file_options=array('content'=>$content,'length'=>$length);
$upload_file_by_content=$oss_sdk_service->upload_file_by_content($bucket,$_FILES["file"]["name"],$upload_file_options);//$_FILES["file"]["name"]这个就是文件名,你可以自己定义的。
$img_url="http://storage.aliyun.com/".$bucket."/".$_FILES["file"]["name"];
echo"Uploadsuccessfully!TheOSSURLofthisfile:".$img_url."<br/>";
echo"Ifthebucketispublic-read,theuploadedimagecanbeshownas:"."<br/>";
echo"<imgsrc=$img_url/>";
}
}
else
{
echo"Invalidfile";
}
关于文件名我已经给你注释在代码中了,你试试看
③ 如何让客户端直接上传文件到OSS
很简单,你先在项目建设一个临时放缓存文件的目录,然后将文件放在这个临时缓存目录,再将目录里的文件上传到oss上,然后删掉缓存目录里的临时文件。。。。刚才我同事说的思维是这样,具体代码待会儿用到了再来完善回答
④ 如何直接上传文件至OSS,不用服务器中转
上述四种方法的比较: 1、开发简单,由于要定时起一个HTTP 连接去获得进度信息,因此,发生的连接请求也增多 ,另外,在低速的情况下,常常会出各种各样的BUG,网络环境的差异,还造成那个周期很 难选择。 2、开发较复杂,COMET 本身需要服务器的支持,这样TOMCAT 至少得选6.0,否则服务器长连 接,压力肯定受不了,但是,性能相对好一些,由于一次上传实际上只启动了两个HTTP 链接 请求,比起AJAX 来说,那是要少很多请求了。另外一个优点是,COMET 将使得服务器可以主 动将进度情况汇报给客户端,因此,客户端的进度条相对来说,要准确一点。 3、目前看来解决方案最好的一个了,虽然开发需要涉及到 FLASH、JAVASCRIPT、以及 JAVA 的 开发,但是代码量都不是很多,因此,复杂程度相对属于中等程度。但是FLASH 也有几个问 题:第一、浏览器 FLASH 版本兼容问题,第二、FLASH 是通过获得发送数据的进度来体现进度 条的,因此虽然不需要服务器端开发进度部分的代码,但是进度的展现有些不是很准确,经 常会有一开始速度很快,但是后面越来越慢的情况。 4、就不说了,开发肯定是最麻烦的,但是进度条效果肯定是最好的,但要给每种浏览器都 要搞个插件,还是比较痛苦的。 总结一下,希望对大家有帮助。 2 其实很麻烦的,之前试过,会有下面几个问题: 第一、服务器端一定要选择支持HTTP 长连接的服务器,否则操作系统的线程限制,会导致并 发降低。 第二、除非原来就采用的是COMET 的进度方式,否则,你要把周期获得进度的方式,改成 COMET 的方式,那很郁闷的,COMET 要服务器主动把进度信息用JAVASCRIPT 的方式发回客户端 ,所以需要把结构转化为JAVASCRIPT 调用才行。 第三、对于不同的浏览器,处理 JAVASCRIPT 的方式是不一样的,我试验的结果是,IE 会在收 到一定数量的JAVASCRIPT 之后才执行,所以虽然我在服务器端每次都调用了flush 方法,但 是界面上还是需要等一段时间才能响应。而这段时间又不好控制了,因为上传文件大小的不 一样,导致了下发的JAVASCRIPT 数量也不一样,所以基本很难达到FLASH 那样的效果。 其实如果已经决定采用flash 了,那就不需要再去修改服务器端的代码了,因为那个进度信 息服务器发不发都不会影响到代码的执行,反正FLASH 本身已经提供了进度指示了,所以, 说简单地,要改成FLASH 上传,你直接做个FLASH 客户端就好了,不需要再改服务器端了。 对了,还有一种情况需要改服务器端,那就是FLASH 上传多个文件是采用多线程上传的,因 此如果你一次上传多个文件,那就需要改服务器端了。需要在所有线程上传完成的情况下, 再去修改数据库。
⑤ js oss multipartupload 怎么回调
设置或获取整个 URL 为字符串。
alert(window.location.href);
设置或获取与 URL 关联的端口号码。
alert(window.location.port)
设置或获取 URL 的协议部分。 alert(window.location.protocol)
设置或获取 href 属性中在井号“#”后面的分段。 alert(window.location.hash)
设置或获取 location 或 URL 的 hostname 和 port 号码。 alert(window.location.host)
设置或获取 href 属性中跟在问号后面的部分。 alert(window.location.search)
⑥ 怎么保护OSS上传接口。我使用的是阿里云oss,本来只有1gb储蓄文件。但是最近被人恶意灌入垃圾,
你使用的是阿里云的账户的key还是子账户做访问的?phpsdk其实也没什么好办法去保护的,其实问题主要根源还是在于域名这一关上。
⑦ 上传图片到oss然后获取到图片的url,然后通过url在网页查看图片怎么弄。
保存图片地址,类似“~/Images/UserId/face.png”那么这个属于服务器端相对地址stringdir=@"\UserFiles\Images\";stringphyPath=Request.PhysicalApplicationPath;stringvirPath=dir+Server.HtmlEncode(FileUpload1.FileName);stringsavePath=phyPath+virPath;fileUpload.SaveAs(savePath);那么你往数据库里保存的就是virPath这个虚拟路径。virPath=Server.MapPath(dir+FileUpload1.FileName);这也是转换正相对URL。
⑧ C#OSS上传回调
阿里云OSS?
${bucket}、${object}、${etag}、${size}、${mimeType} 这几个是系统变量,是回调给你服务端的时候传递回来的参数,用 ${} 圈起来是占位用的,你收到的时候已经被替换成实际值了。
${x:var1}、${x:va2} 是自定义变量,是除了上述系统变量之外根据你业务需求自定义的参数,var1、var2 是键名,不是值。你应该起叫 .....&my_name=${x:var1}&my_age=${x:var2},然后在下面的请求正文里加入:
{
"x:var1":"张三",
"x:var2":24
}
这样你服务端收到回调时的 my_name、my_age 两个参数的值就是“张三”、“24”。
有关 Callback 的详细文档:https://help.aliyun.com/document_detail/31989.html?spm=5176.doc31853.2.2.aYia1U
⑨ 阿里云oss上传文件怎么返回上传文件的url
addUserMetadata("usermeta" If you need to set user metadata URL url = client; 2)java版代码示例如下, " generatePresignedUrlRequest.setMethod(HttpMethod? new GeneratePresignedUrlRequest(bucketName;/: generatePresignedUrlRequest; generatePresignedUrlRequest:GeneratePresignedUrlRequest generatePresignedUrlRequest = 1)url中包含签名的好像能够实现文件的下载; /.PUT););uservalue"Oss中url中授权文件上传可以实现 java版代码示例如下,阿里云能实现url中授权文件上传吗;, key).setExpiration(expires).generatePresignedUrl(generatePresignedUrlRequest)
⑩ javascript 上传文件到阿里云的oss,上传文件成功后怎么获取文件的真实路径
如果你直接使用 javascript 将阿里云的accessId、accessKey写在页面上是不安全的,你可以使用后台存储这些敏感的信息,官网有相关的SDK ,你可以选择你常用的。
在后台编写你的回调函数,将回调函数凭证信息返回给前端,前端使用回调函数凭证访问OSS,就可以获取到回调函数信息。