Java 能够获取Box文件夹项目,但无法使用API从Box下载文件
我试图通过传递文件id从Box下载文件,但出现以下错误。尽管我能够从Box中获取文件夹项目,并且能够成功获取文件夹中的所有文件名,这表明我的应用程序和Box api之间存在网络连接。同样,同一代码在本地计算机中也能正常工作,但在代码迁移到云时不能正常工作 下载API是否使用与获取文件夹项目不同的端口?Box API文档说明所有API都使用httpsJava 能够获取Box文件夹项目,但无法使用API从Box下载文件,java,networking,firewall,box-api,box,Java,Networking,Firewall,Box Api,Box,我试图通过传递文件id从Box下载文件,但出现以下错误。尽管我能够从Box中获取文件夹项目,并且能够成功获取文件夹中的所有文件名,这表明我的应用程序和Box api之间存在网络连接。同样,同一代码在本地计算机中也能正常工作,但在代码迁移到云时不能正常工作 下载API是否使用与获取文件夹项目不同的端口?Box API文档说明所有API都使用https INFO | jvm 1 | main | 2019/08/08 11:26:32.626 | com.box.sdk.BoxAPI
INFO | jvm 1 | main | 2019/08/08 11:26:32.626 | com.box.sdk.BoxAPIException: Couldn't connect to the Box API due to a network error.
INFO | jvm 1 | main | 2019/08/08 11:26:32.626 | at com.box.sdk.BoxAPIRequest.trySend(BoxAPIRequest.java:551)
INFO | jvm 1 | main | 2019/08/08 11:26:32.626 | at com.box.sdk.BoxAPIRequest.handleRedirect(BoxAPIRequest.java:615)
INFO | jvm 1 | main | 2019/08/08 11:26:32.626 | at com.box.sdk.BoxAPIRequest.trySend(BoxAPIRequest.java:571)
INFO | jvm 1 | main | 2019/08/08 11:26:32.627 | at com.box.sdk.BoxAPIRequest.send(BoxAPIRequest.java:354)
INFO | jvm 1 | main | 2019/08/08 11:26:32.627 | at com.box.sdk.BoxAPIRequest.send(BoxAPIRequest.java:329)
INFO | jvm 1 | main | 2019/08/08 11:26:32.627 | at com.box.sdk.BoxFile.download(BoxFile.java:295)
INFO | jvm 1 | main | 2019/08/08 11:26:32.627 | at com.box.sdk.BoxFile.download(BoxFile.java:283)
INFO | jvm 1 | main | 2019/08/08 11:26:32.627 | at com.ge.hc.integration.service.impl.BoxIntegrationSerImpl.getBoxFileByFileID(BoxIntegrationSerImpl.java:188)
INFO | jvm 1 | main | 2019/08/08 11:26:32.727 | Caused by: java.net.ConnectException: Connection timed out (Connection timed out) (local port 38216 to address 0.0.0.0, remote port 443 to address 107.152.27.200)
INFO | jvm 1 | main | 2019/08/08 11:26:32.727 | at java.net.PlainSocketImpl.socketConnect(Native Method)
INFO | jvm 1 | main | 2019/08/08 11:26:32.727 | at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
INFO | jvm 1 | main | 2019/08/08 11:26:32.727 | at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
INFO | jvm 1 | main | 2019/08/08 11:26:32.727 | at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
INFO | jvm 1 | main | 2019/08/08 11:26:32.727 | at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
INFO | jvm 1 | main | 2019/08/08 11:26:32.727 | at java.net.Socket.connect(Socket.java:857)
INFO | jvm 1 | main | 2019/08/08 11:26:32.727 | at sun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:666)
INFO | jvm 1 | main | 2019/08/08 11:26:32.727 | at sun.net.NetworkClient.doConnect(NetworkClient.java:175)
INFO | jvm 1 | main | 2019/08/08 11:26:32.727 | at sun.net.www.http.HttpClient.openServer(HttpClient.java:474)
INFO | jvm 1 | main | 2019/08/08 11:26:32.727 | at sun.net.www.http.HttpClient.openServer(HttpClient.java:569)`
用于文件下载的代码段(在boxFile.download(stream);)中抛出错误的代码段)--
获取文件夹项(正在工作并打印文件名的项)的代码段--
public List getFolderItems(String accessToken,String folderID){
List fileList=new ArrayList();
BoxAPIConnection-boxConnection=新的BoxAPIConnection(accessToken);
BoxFolder文件夹=新的BoxFolder(boxConnection,folderID);
对于(BoxItem.Info itemInfo:文件夹){
if(itemInfo instanceof BoxFile.Info){
Info fileInfo=(BoxFile.Info)itemInfo;
fileList.add(fileInfo);
LOG.info(“***文件名-”+fileInfo.getName());
}else if(itemInfo instanceof BoxFolder.Info){
folder.Info folderInfo=(BoxFolder.Info)itemInfo;
}
}
返回文件列表;
}
Box在不同于API(API.Box.com
)的域(dl.boxcloud.com
)上承载文件内容。当您访问时,API将返回boxcloud.com域上的临时URL。JavaSDK会自动按照此重定向获取文件内容。所有请求都通过端口443(HTTPS)发出
这可能只是一个暂时的错误。如果它持续存在,您可能会检查您的云服务是否配置了任何防火墙规则。以下是此操作涉及的域和IP地址:
api.box.com
:107.152.26.197107.152.27.197
dl.boxcloud.com
:107.152.26.200107.152.27.200
注意:错误日志中会出现
dl.boxcloud.com
IP,这表明SDK正在按照预期的重定向进行操作。您可以发布用于下载文件的部分代码吗?嗨,john,添加了代码片段
String fileDownloadLocation = siteConfigService.getProperty(FILEDOWNLOADLOCATION);
File file = null;
BoxAPIConnection boxConnection = new BoxAPIConnection(accessToken);
FileOutputStream stream;
try
{
BoxFile boxFile = new BoxFile(boxConnection, fileID);
BoxFile.Info info = boxFile.getInfo();
LOG.info("downloading file to -"+fileDownloadLocation+info.getName());
stream = new FileOutputStream(fileDownloadLocation+info.getName());
//LOG.info(stream);
boxFile.download(stream);
stream.close();
file = new File(fileDownloadLocation+info.getName());
}
public List<Info> getFolderItems(String accessToken, String folderID) {
List<Info> fileList = new ArrayList<Info>();
BoxAPIConnection boxConnection = new BoxAPIConnection(accessToken);
BoxFolder folder = new BoxFolder(boxConnection, folderID);
for (BoxItem.Info itemInfo : folder) {
if (itemInfo instanceof BoxFile.Info) {
BoxFile.Info fileInfo = (BoxFile.Info) itemInfo;
fileList.add(fileInfo);
LOG.info("***FILE NAME-"+fileInfo.getName());
} else if (itemInfo instanceof BoxFolder.Info) {
BoxFolder.Info folderInfo = (BoxFolder.Info) itemInfo;
}
}
return fileList;
}