Rackspace cloudfiles在Java中生成具有覆盖文件名的临时URL?

时间:2014-08-17 02:34:43

标签: rackspace-cloud jclouds rackspace-cloudfiles

我正在使用rackspace cloudfiles java api。到目前为止,我已经设法编写了用于生成临时URL以下载文件的代码,使用java api by rackspace使用此处提供的示例。

https://github.com/jclouds/jclouds-examples/blob/master/rackspace/src/main/java/org/jclouds/examples/rackspace/cloudfiles/GenerateTempURL.java

我还可以在rackspace api文档中看到,它确认我可以在下载文件时使用临时URL覆盖文件名。

http://docs.rackspace.com/files/api/v1/cf-devguide/content/TempURL_File_Name_Overrides-d1e213.html

不幸的是,我无法在那些java api中找到任何方法来实现相同的功能,有人可以帮助我吗?

3 个答案:

答案 0 :(得分:0)

您可以在对象创建期间设置内容处理吗?这将允许所有后续对象提取(包括通过临时签名URL)使用自定义文件名。

答案 1 :(得分:0)

如果我理解正确,那么在对象创建期间不会这样做,但仅在请求对象时才这样做。 URL参数只会使服务覆盖浏览器理解的响应中的标头。实际的文件名不会被修改。

具体在 http://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html

见19.5.1内容处理

答案 2 :(得分:0)

嗯,这是我用

结束的
RegionScopedBlobStoreContext blobStoreContext = ContextBuilder
            .newBuilder(RS_PROVIDER)
            .credentials(RS_USER_NAME, RS_API_KEY)
            .buildView(RegionScopedBlobStoreContext.class);

    HttpRequest request = blobStoreContext.signerInRegion(regionCode)
            .signGetBlob(rackspaceCfContainer.getContainerName(),
                    rackspaceCfDocHistory.getFileName(),
                    RS_TEMP_URL_EXP_DUR);

    String fileNameParam = "&filename=" + aliasFileName;

    String fileNameURLFrag = null;
    try {
        if (fileNameParam != null)
            fileNameURLFrag = UriUtils.encodeFragment(fileNameParam, "UTF-8");
    } catch (UnsupportedEncodingException e) {
    }

    String url = request.getEndpoint().toString();

    StringBuffer urlBuffer = new StringBuffer(url);
    if (fileNameURLFrag != null)
        urlBuffer.append(fileNameURLFrag);

    String finalURL = urlBuffer.toString();

这只是一种解决方法而不是我正在寻找的解决方案,但它仍然有效,我们可以解决问题。在这里,我只是通过编码的查询参数附加自动生成的URL。