有两个服务器。
一个a服务器。
上tomcat配置,
一个action用SmartUpload下载文件
比如:
url为 http://a/download.jsp?id=123456
这个jsp写的是
SmartUpload su = new SmartUpload();
su.initialize(pageContext);
su.setContentDisposition(null);
su.downloadFile(d:/temp/123456.txt,"您的文件.txt");
另外一个b服务器
也是tomcat配置。
url为 http://b/
我想通过b服务器的一个页面去a下载比如b服务器上有个jsp页面。
http://b/download.jsp这个页面会访问http://a/download.jsp?id=123456这个URL。
这样访问http://b/download.jsp 就是下载的a的文件。
问题是, 这样, b的用户就可以看到a服务器的域名或者URL了。
我不想让b的用户看到文件是从a下载的。 该怎么写这个代码!?我先谢谢大家, baidu了很长时间也不得其解。
一个a服务器。
上tomcat配置,
一个action用SmartUpload下载文件
比如:
url为 http://a/download.jsp?id=123456
这个jsp写的是
SmartUpload su = new SmartUpload();
su.initialize(pageContext);
su.setContentDisposition(null);
su.downloadFile(d:/temp/123456.txt,"您的文件.txt");
另外一个b服务器
也是tomcat配置。
url为 http://b/
我想通过b服务器的一个页面去a下载比如b服务器上有个jsp页面。
http://b/download.jsp这个页面会访问http://a/download.jsp?id=123456这个URL。
这样访问http://b/download.jsp 就是下载的a的文件。
问题是, 这样, b的用户就可以看到a服务器的域名或者URL了。
我不想让b的用户看到文件是从a下载的。 该怎么写这个代码!?我先谢谢大家, baidu了很长时间也不得其解。
outS这个输出流改成向客户端的输出流。。BufferedOutputStream outS = new BufferedOutputStream(response.getOutputStream());
下载服务器通过请求过来的id来确定文件是什么文件。2. 如果这样实现, 就相当于我先从a服务器取得文件,存到我的b服务器上, 然后通过b在提供给客户。 有点繁琐了。 3. 没有人提到用Proxy模式来请求一个链接?
1.建立一个表用来存储Url和本机文件的映射
2.接到请求后从表中查询本地是否有文件缓存,若有直接将缓存文件给用户,若没有
将用户的下载链redirect到别处,然后自己也去下载,并更新映射表这样的好处就是可以自己学习、收集文件,而且只有第一个用户能看到真实的地址。
缺点就是硬盘耗费太大.
19楼的方法很巧妙值得试验下
http://www.cnblogs.com/treeyh/archive/2009/03/06/1404401.html
只需要简单的修改,把 OutputStream os = new FileOutputStream(filename);
换成requtst.getOutputStream();然后再设置下jsp的几个header就可以了
这位朋友, 不知道jsp的head怎么设置?
然后用B请求直接下载,B就相当于一个文件中转站,再高一层就是逻辑处理机,A就算是持久。。URL urlObj = new URL("http://a/download.jsp?id=123456");
InputStream ins = urlObj.openConnection().getInputStream();response.setContentType("application/octet-stream");
String headerStr = "attachment; filename=" + new Random().nextInt() + ".rar";
response.setHeader("Content-Disposition", );
byte[] buffer = new byte[1024 * 128];
int index = 0;
OutputStream outStream = response.getOutputStream();
while ((index = ins.read(buffer)) != -1) {
outStream.write(buffer,0,index);
}
ins.close();
outStream.flush();
outStream.close();
InputStream ins = urlObj.openConnection().getInputStream();response.setContentType("application/octet-stream");
String headerStr = "attachment; filename=" + new Random().nextInt() + ".rar";
response.setHeader("Content-Disposition", );
byte[] buffer = new byte[1024 * 128];
int index = 0;
OutputStream outStream = response.getOutputStream();
while ((index = ins.read(buffer)) != 1) {
outStream.write(buffer,0,index);
}
ins.close();
outStream.flush();
outStream.close();
http://a/download.jsp?id=123456
你通过jsp重写到http://c/download123-123456.html,这样别人不就看不到服务器是a还是其他了咯
你去查找一下关于url重写方面的资料。很简单的。
此处贴出方法:<%@ page language="java" import="java.io.*, java.net.*" pageEncoding="UTF-8"%><%
String URL = (String)request.getAttribute("URL");
String fileName = (String)request.getAttribute("fileName");
URL url = new URL(URL);
URLConnection conn = url.openConnection();
InputStream is = conn.getInputStream();
ByteArrayOutputStream d = new ByteArrayOutputStream();
response.setHeader("Content-disposition", "attachment;filename="+fileName+"" );
int len;
byte[] bs = new byte[8196];
while ((len = is.read(bs)) != -1) {
d.write(bs, 0, len);
}
d.writeTo(response.getOutputStream());
is.close();
%>