Posts tagged ‘下载’

struts2 文件下载处理

这里说的文件下载指的是通过Java代码返回文件流给客户端,而不是直接链接一个具体的文件URL。
原理:Action中定义一个读取文件流的方法,返回值为InputStream,声明Action时,result类型为stream,参数指定读取文件流的方法以及返回给客户端的文件名。
下面的例子是让用户自己提交文件路径,Action再读取该文件并返回给客户端,当然,在真实的项目中,这样做是很不安全的。

DownloadAction2.java:


package com.struts2;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class DownloadAction2 extends ActionSupport {
	
	private String fileName;
	public String getFileName() {
		return fileName;
	}
	public void setFileName(String fileName) {
		this.fileName = fileName;
	}
	public InputStream getDownloadFile()
	{
		//以下几行先把get得到的文件名转换编码,否则中文文件名取不到文件
		String utfFileName=null;
		try {
			utfFileName=new String(fileName.getBytes("iso8859_1"),"UTF-8");
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return ServletActionContext.getServletContext().getResourceAsStream(utfFileName);
	}
	@Override
	public String execute() throws Exception {
		// TODO Auto-generated method stub
		return super.execute();
	}
}

struts.xml配置:


		
		<!-- result的type设为stream,参数inputName值与Action中的返回InputStream的方法getDownloadFile对应
			contentDisposition参数attachment代表无论何种文件,均弹出下载框,而不是用浏览器打开,
			filename指定下载时默认的文件名,通过${属性名}取action中的属性
		 -->
		<action name="downloadFile2" class="com.struts2.DownloadAction2">
			<result type="stream">
				<param name="inputName">downloadFile</param>
				<param name="contentDisposition">attachment;filename=${fileName}</param>
			</result>
		</action>

测试:
http://localhost:8080/struts2/downloadFile2.do?fileName=index.jsp

Windows Phone开发 WebClient同步下载的实现(AutoResetEvent)

很多组件在Windows Phone中都缩水,比如WebClient类,只有异步下载功能,没同步下载功能.貌似Windows Phone中大多数跟网络相关的功能都默认异步,这样有个好处,比如在显示一张网络图片,不需要像Android中一样新开线程下载图片了,直接把Source设置成图片URL即可.但是没有同步下载功能,很多时候会很麻烦,比如说我们下载后要对数据进行处理,但是如果异步下载的话,下载好的数据只有在WebClient下载完调用的方法中才能得到,这样就需要把参数传递给下载完成的函数,比较麻烦.
同步下载原理:其实还是异步下载,只是使用了AutoResetEvent,让线程在开始下载的时候等待,下载完成事件里,通知原来的线程继续执行. Continue reading ‘Windows Phone开发 WebClient同步下载的实现(AutoResetEvent)’ »

C#下载网页源码 解决乱码

在网络程序开发中,经常要与网页源码打交道,因为与服务器交互,直接使用HTTP协议是最简单的。下面的方法解决了在下载UTF8编码的源码时乱码的问题。
Continue reading ‘C#下载网页源码 解决乱码’ »

Java下载断点续传(下载优酷视频实例)

断点续传的关键在于发送RANGE值,以及建立随机访问文件对象,跳到文件末尾。
下面的代码是断线续传下载优酷的视频。测试方法:运行后,会循环输出当前下载的进度,在下载完之前强行停止(Eclipse上的红色Stop按钮),重新运行,可以看到续传效果。
Continue reading ‘Java下载断点续传(下载优酷视频实例)’ »

Android 下载并保存文件函数

下面的函数可以下载文件,并保存到指定目录。有点简单,只有一个URL的参数,可以自己加上保存目录,以及获取文件类型再生成相应的文件名,这样就完美了。


public void down_file(String url) throws IOException{
    	//下载函数   	
    	URL myURL = new URL(url);
    	URLConnection conn = myURL.openConnection();
    	conn.connect();
    	InputStream is = conn.getInputStream();
	    if (is == null) throw new RuntimeException("stream is null");
	    //把文件存到path
	    String path="/sdcard/temp.apk";
	    OutputStream os = new FileOutputStream(path);    
	    byte buf[] = new byte[1024];  
	    do
	      {
	        int numread = is.read(buf);
	        if (is.read(buf) == -1)
	        {
	          break;
	        }
	        os.write(buf, 0, numread);           
	      } while (true);
	   
	        is.close();
	        os.close();
	           
    }

Android文件下载进度条的实现

近几天因为在写高清壁纸的服务器端(基于PHP+MySql),所以好几天没更新博客了,顺便汇报一下高清壁纸的开发进度:服务器端已经改写,原来是一条数据一条数据加,现在是Flash批量上传图片,自动添加数据(这是后台,大家当然看不到啦)。另外,图片数据都放到自己的虚拟主机上了,所以大家可能觉得这几天下载图片特别慢。原来放POCO,速度比较快,但是毕竟是免费的,不放心,怕哪天被人发现了大流量下载,把我帐号图片删了,到时哭都来不及,而且那样也实现不了上传自动添加数据。新版客户端方面,目前多语言以及HVGA支持都已经完成,现在在做下载进度条(因为服务器稍慢,怕有些性子急的同学等不了)。汇报完毕,开始今天学习。今天的这段代码是网上找的,自己做了些小改,通过模拟器测试。文件下载进度条控制(就是为了高清壁纸加个进度条),自己研究了好久,但是进度条只能显示缓存写入文件的进度,不能显示下载进度。找了好久,终于找到一段用的代码,所以记录下来,大家分享。 Continue reading ‘Android文件下载进度条的实现’ »

GridView自动下载并显示网络图片

关于GridView的使用请查看上一篇文章Android UI设计 图片列表GridView用法,本文讲的是在上一篇文章的基础上实现自动下载显示网络上的图片。
布局XML代码不需要修改,程序代码也基本一致,只要稍稍修改下图片适配器就可以了。
Continue reading ‘GridView自动下载并显示网络图片’ »