DownLoad Shippo标签通过控制器

时间:2016-02-25 19:36:03

标签: spring-mvc shippo

在填写必要的包信息后,我设法通过goShippo API调用创建一个响应的Transaction对象:Transaction.create(Map,apiKey)。形成响应的Transaction对象,我可以将运输标签作为Url:transaction.getObjectId()。

我遇到的问题是如何让我的客户下载货运标签。

我目前的代码是:

fileName= "https://shippo-delivery-east.s3.amazonaws.com/b1b0e6af.pdf?xxxxxx";

File file = new File(fileName);
String mineType = URLConnection.guessContentTypeFromName(file.getName());
    if(mineType == null) {
        System.out.println("mineType is not detectable");
        mineType = "application/octet-stream";
    }

    response.setContentType(mineType);
    response.setHeader("Content-Disposition"
            , String.format("inline; filename=\"" + file.getName() +"\""));


    response.setContentLength((int)file.length());

    InputStream inputStream = new BufferedInputStream(new FileInputStream(file));

    FileCopyUtils.copy(inputStream, response.getOutputStream());

我遇到的错误是找不到该文件,但是当我在浏览器上传递fileName时,我可以看到发货标签。

1 个答案:

答案 0 :(得分:1)

documentation说:

  

成功创建URL后,您可以调用URL的openStream()方法来获取可以从中读取URL内容的流。 openStream()方法返回java.io.InputStream对象,因此从URL读取就像从输入流中读取一样简单。

因此,您需要创建一个URL对象,然后您可以获取inputStream

看起来像这样:

import java.io.BufferedInputStream;
import java.io.InputStream;
import java.net.URL;

String fileName= "https://shippo-delivery-east.s3.amazonaws.com/b1b0e6af.pdf?xxxxxx";

URL urlToLabel = new URL(fileName);

InputStream inputStream = new BufferedInputStream(urlToLabel.openStream());