开发者社区> 问答> 正文

OSS通过签名的URL上传文件(java)

好处:使用OSS经过签名的URL上传文件,无需经过ECS云服务器,省了流量和带宽
首先:更新java开发包
[font=微软雅黑, 'Microsoft Yahei', 'Hiragino Sans GB', tahoma, arial, 宋体]Java SDK开发包(2015-01-15) 版本号 2.0.1。说明,老版本的开发包生成的URL不能拿来直接上传文件。总是提示签名错误(403,SingatureDoesNotMatch [font=微软雅黑, 'Microsoft Yahei', 'Hiragino Sans GB', tahoma, arial, 宋体]) [font=微软雅黑, 'Microsoft Yahei', 'Hiragino Sans GB', tahoma, arial, 宋体]。
[font=微软雅黑, 'Microsoft Yahei', 'Hiragino Sans GB', tahoma, arial, 宋体]第二步,生成经过签名的URL

/**         QQ:798255396
         * 生成上传文件的URL
         * @param key  文件的object key,自己定义
         * @return URL
         */
        public URL getPutUrl(String key){

               //初始化OSSClient
            OSSClient  clientOut = new OSSClient(endpoint, accessKeyId,  accessKeySecret);
            clientOut .createBucket(bucketName);
             //设置有效期
            Date expiration = new Date(new Date().getTime() + 3600 * 9000);
            // 创建请求
            GeneratePresignedUrlRequest generatePresignedUrlRequest = new GeneratePresignedUrlRequest(bucketName, key);
            generatePresignedUrlRequest.setBucketName(bucketName);
            // HttpMethod为PUT
            generatePresignedUrlRequest.setMethod(HttpMethod.PUT);
            generatePresignedUrlRequest.setExpiration(expiration);
                //必须有
            generatePresignedUrlRequest.setContentType("image/jpeg");
            // 生成签名的URL
            URL url = this.clientOut.generatePresignedUrl(generatePresignedUrlRequest)
            return url;
        }
[font=微软雅黑, 'Microsoft Yahei', 'Hiragino Sans GB', tahoma, arial, 宋体]第三步,用 [font=微软雅黑, 'Microsoft Yahei', 'Hiragino Sans GB', tahoma, arial, 宋体]HttpPut [font=微软雅黑, 'Microsoft Yahei', 'Hiragino Sans GB', tahoma, arial, 宋体]上传Object

/**
     *      
     * @param url 第二步生成的签名url
     * @param filename 文件名称
     * @param filepath 文件路径
     */

public void SubmitPut(String url,String filename, String filepath){  

        HttpClient httpclient = new DefaultHttpClient();  

        try {  
               //必须用HttpPut ,不能用HttpPost。因为OSS拒绝Post请求
            HttpPut httpput = new HttpPut(url);

            FileBody bin = new FileBody(new File(filepath + File.separator + filename));  

            httpput.addHeader("Content-Type", "image/jpeg");

            StringBody ResourceType = new StringBody("Object");
            MultipartEntity reqEntity = new MultipartEntity();  

            reqEntity.addPart("ResourceType",ResourceType);
            reqEntity.addPart("key", bin);//  

            httpput.setEntity(reqEntity);  

            HttpResponse response = httpclient.execute(httpput);  
            StatusLine statusLine = response.getStatusLine();
            int statusCode = response.getStatusLine().getStatusCode();  

            if(statusCode == HttpStatus.SC_OK){  

                System.out.println("服务器正常响应.....");  

                HttpEntity resEntity = response.getEntity();  

                System.out.println(EntityUtils.toString(resEntity));//httpclient自带的工具类读取返回数据  

                EntityUtils.consume(resEntity);  
            }  

            } catch (ParseException e) {  
                e.printStackTrace();  
            } catch (IOException e) {  
             e.printStackTrace();  
            } finally {  
                try {  
                    httpclient.getConnectionManager().shutdown();  
                } catch (Exception ignore) {        
                }  
            }  
        }


展开
收起
看天有云 2015-03-08 21:25:02 20702 0
6 条回答
写回答
取消 提交回答
  • 是的
    2015-08-13 18:12:54
    赞同 展开评论 打赏
  • ReOSS通过签名的URL上传文件(java)
    是不是必须调用STS获取临时的accessId、accessKey和securityToken,才能去上传临时授权URL?
    2015-08-12 19:18:23
    赞同 展开评论 打赏
  • ReOSS通过签名的URL上传文件(java)
    本人会继续努力
    2015-03-16 14:09:24
    赞同 展开评论 打赏
  • LT是个伪程序员
    您的帖子很精彩!希望很快能再分享您的下一帖!
    2015-03-13 22:25:04
    赞同 展开评论 打赏
  • 2lv
    ReOSS通过签名的URL上传文件(java)
    首先,下载最新的开发包,版本号 2.0.1。第二步,调用getPutUrl(String key)方法,传入key值,生成一个url地址。这个url地址供上传文件用。第三步,调用SubmitPut(...)方法上传文件。需要传入第二步的返回值,要上传文件的文件名和路径。比如:SubmitPut(getPutUrl("50022/b.jpg").toString(),    "b.jpg","D://logs//");
    2015-03-13 16:38:55
    赞同 展开评论 打赏
  • 没看懂
    2015-03-10 15:05:23
    赞同 展开评论 打赏
滑动查看更多
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载