到目前为止,我一直在搜索解决方案但没有运气!
要求: 我需要从文件系统挂载下载文件,例如。,sample.jpg,并且必须从我的项目应用程序调用请求。所以,我建立了一个Web服务来做它,如果我直接在浏览器上调用Web服务,它工作正常。即,如果我通过下面的浏览器URL调用该服务,则该文件将下载到我系统的浏览器默认下载位置。
例如:http://localhost:8080/appname/rest/downloadservice/images
WebService代码:
@Path("/downloadservice")
public class DownloadFileWS {
@POST
@Path("/images")
@Produces({"image/jpeg,image/png"})
public Response getImageFile() {
/String FILE_PATH = "/ngs/app/sample.png";
File file = new File(FILE_PATH);
Logger.getLogger("!!!!!!!!!!!"+FILE_PATH);
System.out.println("@@@@@@@@"+FILE_PATH);
ResponseBuilder response = Response.ok((Object) file);
response.header("Content-Disposition","attachment; filename=\"sample.png\"");
return response.build();
}
所以,这里我的浏览器充当客户端,它检索成功下载的文件。
因为直接通过浏览器URL调用webservice存在安全问题,所以我需要通过我的应用程序java代码(不向最终用户公开)调用上面的webservice。所以,在我的项目应用程序java代码中,我构建了HTTPClient并调用Web服务,如下所示。
客户代码:
public void getFileDownload(){
log("inside getServerPath....");
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(downloadWebService_URL);
JSONObject json = new JSONObject();
json.put("filePath", "/ngs/app/sample.png");
json.put("fileName", "sample.png");
log("json-->"+json.toString());
StringEntity inputJson = null;
try {
inputJson = new StringEntity(json.toString());
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
log("inputJson = " + inputJson.toString());
inputJson.setContentType("application/json");
httpPost.setEntity(inputJson);
httpPost.addHeader("AppType", "TC");
log("httpPost... httpPost");
HttpResponse response = null;
try {
response = httpClient.execute(httpPost);
log("response:-->"+response);
log("response.getEntity()-->"+response.getEntity());
log("response.getEntity().getContent()-->"+response.getEntity().getContent());
response.setHeader("Content-Disposition", "attachment; filename=\"sample.png\"");
InputStream is = response.getEntity().getContent();
log("111");
String filePath = "sample.txt";
log("222");
FileOutputStream fos = new FileOutputStream(new File(filePath));
log("333");
int inByte;
while((inByte = is.read()) != -1){
fos.write(inByte);
log("444");
}
is.close();
fos.close();
log("completed...");
}
catch (ClientProtocolException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
catch (Exception e)
{
log("E:: " + ExceptionUtils.getStackTrace(e));
}
}
当我点击我的应用程序中的图像链接时,我触发了我上面说的客户端java代码(getFileDownload()方法),后者又使用DefaultHttpClient调用Web服务。
问题1: 客户端java代码正在调用Web服务,我的上述Web服务正在返回响应,如下所示
HTTP / 1.1 200 OK [日期:星期二,2016年7月19日21:47:42 GMT,Content-Length: 6192,Content-Type:image / jpeg,Content-Disposition:attachment; filename =" sample.png",X-Powered-By:Servlet / 2.5 JSP / 2.1] org.apache.http.conn.BasicManagedEntity@35ae84bf
WebService将响应作为文件下载返回,但由于我的HTTPClient java代码收到响应,我不知道如何使用从我的webservice收到的HTTPResponse,类似于在浏览器中下载文件。如果我单击我的应用程序中的链接,则不会下载文件,但请求和响应通信如上所述发生。
问题2:
有没有办法在客户端java代码,我们可以在从WebService HTTPResponse对象获得响应后实现文件下载?
问题3:
我应该改变我的方法,如下面的链接?
欢迎任何建议!提前谢谢!