java 如何下载文件?,第1张

我用struts2给你实现:

1首先struts2xml 里面

<action name="download" class="comzfjactionDownloadAction">

<!-- 注意这里不再是返回一个字符串找到一个页面了

服务器返回到本地客户端是一个流 我们需要配置流信息

type:表示接受方式或者跳转方法是

默认是 dispatcher 请求转发,所以之前我们一般不书写这个参数但是这里需要更改为stream重定向

-->

<result type="stream">

<!--

因为之前我们设置的execute方法返回一个String,但是我们现在需要返回一个流。这里我们要指定一个新的方法为我们处理业务逻

辑并且返回流所以默认execute 方法对我们没有作用了,在这里我们指定一个新的方法为我们处理业务逻辑并且最后返回流

这里的inputName是固定写法 后面的名字dname要跟 action里面的getDname对应

-->

<param name="inputName">dname</param>

<!-- 当流返回过来时,我们应当设置头信息

给浏览器,这里设置的都是流信息

name里面的是固定写法

attachment:表示使用附件下载

online:直接打开

分号后的filename是固定写法,后面通过一个ognl表达式

引用下载的文件

-->

<param name="contentDisposition">attachment;filename=${filename}</param>

</result>

</action>

这里不再是返回一个字符串找到一个页面了。从服务器返回到本地客户端是一个流,我们需要配置流信息。

type:表示接受方式或者跳转方式是(默认是dispathcher请求转发,所以之前我们一般不书写这个,但是这里下载需要更改stream)

2对应的DownloadAction

@Override

public String execute() throws Exception {

return thisSUCCESS;

}

//这里的getEtoak要跟strutsxml里的inputName的值对应

public InputStream getEtoak() throws Exception {

return new FileInputStream(

ServletActionContextgetServletContext()

getRealPath("/image")

+ "/"

+ thisgetFilename());

}

strUrl为文件地址,fileName为文件在本地的保存路径,试试吧~

public static void writeFile(String strUrl, String fileName) {

URL url = null;

try {

url = new URL(strUrl);

} catch (MalformedURLException e2) {

e2printStackTrace();

}

InputStream is = null;

try {

is = urlopenStream();

} catch (IOException e1) {

e1printStackTrace();

}

OutputStream os = null;

try {

os = new FileOutputStream( fileName);

int bytesRead = 0;

byte[] buffer = new byte[8192];

while ((bytesRead = isread(buffer, 0, 8192)) != -1) {

oswrite(buffer, 0, bytesRead);

}

Systemoutprintln("下载成功:"+strUrl);

} catch (FileNotFoundException e) {

eprintStackTrace();

} catch (IOException e) {

eprintStackTrace();

}

}

1下载简单,无非是把服务器上的文件或者数据库中的BLob(或其他二进制型),用流读出来,然后写到客户端即可,要注意 ContentType。

2上传,可以用Apache Commons Upload等开源工具,或者自己写:

form要用enctype="multipart/form-data"

然后服务器端也是用IO把客户端提交的文件流读入,然后写到服务器的文件系统或者数据库里。不同的数据库对Lob字段操作可能有所不同,建议用Hibernate,JPA等成熟的ORM框架,可以不考虑数据库细节。

public static void downloadFileFtp(KmConfig kmConfig,String fileName, String clientFileName, OutputStream outputStream){

try {

String ftpHost = kmConfiggetFtpHost();

int port = kmConfiggetFtpPort();

String userName = kmConfiggetFtpUser();

String passWord = kmConfiggetFtpPassword();

String path = kmConfiggetFtpPath();

FtpClient ftpClient = new FtpClient(ftpHost, port);// ftpHost为FTP服务器的IP地址,port为FTP服务器的登陆端口,ftpHost为String型,port为int型。

ftpClientlogin(userName, passWord);// userName、passWord分别为FTP服务器的登陆用户名和密码

ftpClientbinary();

ftpClientcd(path);// path为FTP服务器上保存上传文件的路径。

try {

TelnetInputStream in = ftpClientget(fileName);

byte[] bytes = new byte[1024];

int cnt=0;

while ((cnt=inread(bytes,0,byteslength)) != -1) {

outputStreamwrite(bytes, 0, cnt);

}

//##############################################

//这里文件就已经下载完了,自己理解一下

//#############################################

outputStreamclose();

inclose();

} catch (Exception e) {

ftpClientcloseServer();

eprintStackTrace();

}

ftpClientcloseServer();

} catch (Exception e) {

Systemoutprintln("下载文件失败!请检查系统FTP设置,并确认FTP服务启动");

}

}

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » java 如何下载文件?

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情