ftp 浏览器直接下载

1.利用HTML <a> 标签

ftp://帐号:密码@FTP网址

download:添加download属性后,无论a标签的href属性链接到一个网页、图片、文本等,download属性都会强制触发下载操作,

         且自动命名文件为download属性。但是这个属性对浏览器有一定要求.

 

<a href="ftp://user:pwd@url" download=" " > FTP下载 </a>

user : 账号

pwd : 密码

url : FTP网址 (可以是ftp的目录, 也可以是精确到具体文件)

这样点击这个<a> 标签就可以下载指定的文件

 

2.发送请求

function download(id){
		var url; 
		$.ajax({
			type: "POST",
			url: "/pinyu/contractTemplate/download/",
			dataType: "json",
			async: false,
			data: {id: id}, 
			error: function(){
				layMsg("数据获取异常,请联系管理员!");
			},
			success: function(data){
				url=data;
				console.info(url);
			}
		});
		window.location.href = url;
	}

 

在Java中实现通过FTP下载文件并在浏览器中展示,通常涉及以下几个步骤:首先通过FTP客户端库连接并下载文件,然后将文件流通过HTTP响应返回给前端浏览器。以下是实现这一功能的详细说明和代码示例。 ### 1. 使用Apache Commons VFS2连接并下载FTP文件 Apache Commons VFS2 是一个强大的文件系统抽象库,可以简化FTP、SFTP等远程文件系统的操作。以下是一个使用VFS2从FTP服务器下载文件的示例: ```java import org.apache.commons.vfs2.*; import org.apache.commons.vfs2.impl.DefaultFileSystemManager; import org.apache.commons.vfs2.provider.ftp.FtpFileSystemConfigBuilder; import java.io.InputStream; public class FtpFileDownloader { public static InputStream downloadFile(String ftpUrl, String username, String password) throws Exception { FileSystemManager fsManager = VFS.getManager(); StringBuilder sb = new StringBuilder("ftp://"); sb.append(username).append(":").append(password).append("@").append(ftpUrl); FileObject remoteFile = fsManager.resolveFile(sb.toString()); return remoteFile.getContent().getInputStream(); } } ``` ### 2. 在Servlet中处理HTTP请求并返回文件流 在Web应用中,通常通过Servlet来处理浏览器请求,并将FTP文件以流的形式返回给前端。以下是一个Servlet示例: ```java import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.InputStream; public class FtpFileDownloadServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException { String ftpUrl = request.getParameter("filePath"); String username = "your-ftp-username"; String password = "your-ftp-password"; try (InputStream inputStream = FtpFileDownloader.downloadFile(ftpUrl, username, password)) { response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition", "inline; filename=\"" + ftpUrl.substring(ftpUrl.lastIndexOf('/') + 1) + "\""); ServletOutputStream outputStream = response.getOutputStream(); byte[] buffer = new byte[4096]; int bytesRead; while ((bytesRead = inputStream.read(buffer)) != -1) { outputStream.write(buffer, 0, bytesRead); } outputStream.flush(); } catch (Exception e) { throw new ServletException("Error downloading file from FTP server", e); } } } ``` ### 3. 前端浏览器展示文件 一旦文件流通过HTTP响应返回到浏览器,可以根据文件类型决定如何展示。例如,如果是图片,可以设置`Content-Type`为`image/jpeg`;如果是PDF文件,可以使用浏览器内置的PDF查看器。 ```html <!DOCTYPE html> <html> <head> <title>View File</title> </head> <body> <h1>File from FTP Server</h1> <img src="/your-servlet-path?filePath=/2013/0124/20130124.wav" alt="FTP File" /> </body> </html> ``` ### 4. 配置与依赖 为了使用Apache Commons VFS2,需要在项目中引入相关依赖。如果使用Maven,可以在`pom.xml`中添加以下内容: ```xml <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-vfs2</artifactId> <version>2.9.0</version> </dependency> <dependency> <groupId>commons-net</groupId> <artifactId>commons-net</artifactId> <version>3.9.0</version> </dependency> ``` ### 注意事项 - 确保FTP服务器允许远程访问,并配置了正确的用户名和密码。 - 对于安全性考虑,避免在URL中直接暴露敏感信息,如用户名和密码。可以考虑使用Token或Session机制进行身份验证。 - 若需支持SFTP,可以使用JSch或Apache MINA SSHD等库替代FTP客户端。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值