huaweicloud / huaweicloud-sdk-java-obs

The OBS SDK for Java, which is used for accessing Object Storage Service
Other
133 stars 116 forks source link

使用Java SDK上传文件报告403,使用NodeJS成功,能看下JAVA代码哪儿不对吗? #98

Open liubao68 opened 2 years ago

liubao68 commented 2 years ago

JAVA代码如下:

    TemporarySignatureRequest request = new TemporarySignatureRequest(HttpMethodEnum.PUT,
    obsProperties.getExpires());
    request.setBucketName(bucketName);
    request.setObjectKey(objectKey);
    String url=obsClient.createTemporarySignature(request).getSignedUrl();

    File file = new File("D://test.txt");
    CloseableHttpClient httpClient = getIgnoreSSLClient();
    CloseableHttpResponse response;
    HttpPut put = new HttpPut(url);
    // FileEntity fileEntity = new FileEntity(file, "application/jpeg");
    //EntityBuilder reqEntity = EntityBuilder.create().setFile(file);
    InputStreamEntity entity = new InputStreamEntity(new FileInputStream(file));
    entity.setChunked(false);
    String boundary = "----" + new Date().getTime();
    entity.setContentType("multipart/form-data; boundary=" + boundary);
    put.setEntity(entity);
    put.setHeader("href",
                    url);
    response = httpClient.execute(put);
    System.out.println(response.getStatusLine().toString());

我们的应用场景需要基于临时的URL上传,前面一部分是生产URL。 后面是使用自己的HttpClient上传,调试发现连接建立和发送数据都是正常的,只是数据发送了一部分, OBS就报告 403 错误。

同样的使用方式, nodejs可以工作。

请问下上面代码可能什么地方不对? 或者有没有对应的OBS接口可以不使用第三方库上传的? 查询了OBS文档 , 未找到通过临时URL上传的接口,只能自己写一个HTTP Client了。

liubao68 commented 2 years ago

Find an example here