nginx+ftp实现文件通过url进行下载的思路

本文探讨了在项目中使用FTPClient实现文件上传下载功能,避免直接通过URL暴露FTP凭据的安全风险。介绍了一种利用Nginx代理转发的方案,使用户通过HTTP请求访问文件,同时保持原有下载逻辑不变。此外,还讨论了如何配置Struts2过滤器以实现文件的直接下载。

1.创建一个FTP文件服务器

2.在项目中使用FTPClient实现文件的上传下载的功能

3.由于项目是一直运行着的,原来的下载的逻辑不可修改(注:原来下载逻辑是返回文件下载的链接,用户点击就可以下载)

# FTP通过URL进行下载(这样会暴露FTP的用户名和密码,这种方法不可取)
URL的格式=> ftp://user:pwd@url

# 现在想到一个比较好的的方法是使用nginx,在nginx.conf中配置

# $1表示匹配第一个正则表达式的内容
# 如果请求的URL为=> http://127.0.0.1:8088/download/girl.png
# 则自动修改为=> http://127.0.0.1:8088/girl.png
location ~ /download/(.*) {
    proxy_pass   http://127.0.0.1:8088/$1;
}

# 文件存放的路径
location  / {
    root /data/ftp/;
}

# 还有如果需要点击链接直接下载(图片不需要预览),可以在struts2配置过滤器
# 在过滤器中判断,如果url中包含"/download/",直接调用FTPClient的下载,response输出文件流

4.以上是个人的一些思路,如果有更好的实现方式,麻烦告知一下~

转载于:https://my.oschina.net/u/2489258/blog/3060962

package com.kwantler.YN_EW.service.impl; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; public class FilePhoto { /** * 从网络Url下载文件 * * @param urlStr * @param fileName * @param savePath * @throws IOException */ public static void downLoadByUrl(String urlStr, String fileName, String savePath) throws IOException { URL url = new URL(urlStr); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); // 设置超时间为3秒 conn.setConnectTimeout(5 * 1000); // 防止屏蔽程序抓取而返回403错误 conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)"); // 得到输入流 InputStream inputStream = conn.getInputStream(); // 获取自己数组 byte[] getData = readInputStream(inputStream); // 文件保存位置 File saveDir = new File(savePath); if (!saveDir.exists()) { saveDir.mkdir(); } File file = new File(saveDir + File.separator + fileName); FileOutputStream fos = new FileOutputStream(file); fos.write(getData); if (fos != null) { fos.close(); } if (inputStream != null) { inputStream.close(); } System.out.println("info:" + url + " download success"); } /** * 从输入流中获取字节数组 * * @param inputStream * @return * @throws IOException */ public static byte[] readInputStream(InputStream inputStream) throws IOException { byte[] buffer = new byte[1024]; int len = 0; ByteArrayOutputStream bos = new ByteArrayOutputStream(); while ((len = inputStream.read(buffer)) != -1) { bos.write(buffer, 0, len); } bos.close(); return bos.toByteArray(); } public static void main(String[] args) { try { downLoadByUrl( "https://www.mybiosource.com/images/tds/protocol_samples/MBS700_Antibody_Set_Sandwich_ELISA_Protocol.pdf", "ELISA.pdf", "E:/upload/protocol"); } catch (Exception e) { // TODO: handle exception } } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值