`

一天工作总结4.26

    博客分类:
  • SSH
阅读更多

我擦,今天搞了许多!

 

首选弄了个struts的框架,当然是在网上找的。

package org.usc.file;

import java.io.File;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.ServletActionContext;

public class DownloadAction extends ActionSupport
{
	private static final long serialVersionUID = 6329383258366253255L;
	private String fileName;
	private String fileRealName;
	ActionContext context = ActionContext.getContext();    
    HttpServletRequest request = (HttpServletRequest) context.get(ServletActionContext.HTTP_REQUEST);    
    HttpServletResponse response = (HttpServletResponse) context.get(ServletActionContext.HTTP_RESPONSE);    
    Map session = context.getSession();    

	public void setFileName()
	{
		// 得到请求下载的文件名
		String fname = ServletActionContext.getRequest().getParameter("name");
		String frealname = ServletActionContext.getRequest().getParameter("realname");
		try
		{
			/*
			 * 对fname参数进行UTF-8解码,注意:实际进行UTF-8解码时会使用本地编码,本机为GBK。
			 * 这里使用request.setCharacterEncoding解码无效.
			 * 只有解码了getDownloadFile()方法才能在下载目录下正确找到请求的文件
			 */
			fname = new String(fname.getBytes("ISO-8859-1"), "UTF-8");
			frealname= new String(frealname.getBytes("ISO-8859-1"), "UTF-8");
		} catch (Exception e)
		{
			e.printStackTrace();
		}
		this.fileName = fname;
		this.fileRealName = frealname;
		System.out.println(fileName);
		System.out.println(fileRealName);
	}

	/*
	 * @getFileName 此方法对应的是struts.xml文件中的: <param
	 * name="contentDisposition">attachment;filename="${fileName}"</param>
	 * 这个属性设置的是下载工具下载文件时显示的文件名, 要想正确的显示中文文件名,我们需要对fileName再次编码
	 * 否则中文名文件将出现乱码,或无法下载的情况
	 */
	public String getFileName() throws UnsupportedEncodingException
	{

		fileRealName = new String(fileRealName.getBytes(), "ISO-8859-1");

		return fileRealName;
	}
	
	/*
	 * @getDownloadFile 此方法对应的是struts.xml文件中的: <param
	 * name="inputName">downloadFile</param> 返回下载文件的流,可以参看struts2的源码
	 */
	public InputStream getDownloadFile()
	{
		this.setFileName();
		String path=request.getRealPath("\\");
		File file=new File(path+fileName);
		int fileSize=-1;
		if(file.exists()){
			fileSize=(int) file.length();
			System.out.println("文件存在"+file.getPath()+"  "+fileSize);
			}else
				System.out.println("文件不存在"+file.getPath());
				
		response.setContentLength(fileSize);
		return ServletActionContext.getServletContext().
		getResourceAsStream("/"+"/" 
				+ fileName);
	}

	@Override
	public String execute() throws Exception
	{
		return SUCCESS;
	}
}

 

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.multipart.maxSize" value="99999999999" /><!--  这里设置大于2M的文件上传下载-->

	<constant name="struts.i18n.encoding" value="utf8" />
	<package name="file" namespace="/" extends="struts-default">
		<action name="showUpload">
			<result>/upload.jsp</result>
		</action>
		<action name="upload" class="org.usc.file.UploadAction">
			<result name="input">/upload.jsp</result>
<!--			<result name="success">/upload_success.jsp</result>-->
			<result name="success">/download.jsp</result>
			<interceptor-ref name="fileUpload">
			
			</interceptor-ref>
			
			<interceptor-ref name="defaultStack"></interceptor-ref>
		</action>

		<action name="download" class="org.usc.file.DownloadAction">
			<result name="success" type="stream">
				<param name="contentDisposition">attachment;filename="${fileName}"</param>
				<param name="inputName">downloadFile</param>
			</result>
		</action>
	</package>
	
</struts>

 首先是要做一个struts版的文件服务器,提供下载用!

 

 

然后用一个多线程,断点续传的代码下载这个struts链接,发现我擦,下载不了。

 

故而debug了半天,发现(红色字体)struts默认的IOoutputstream没有把他传的文件大小写到http报的头上,所以断点续传代码无法获得他的大小,所以无法计算。

后来就行了

 

 

 

 

2.(紫色字体)String path=request.getRealPath("\\");是得到该jsp文件的根目录

 ActionContext context = ActionContext.getContext();   
    HttpServletRequest request = (HttpServletRequest) context.get(ServletActionContext.HTTP_REQUEST);   
    HttpServletResponse response = (HttpServletResponse) context.get(ServletActionContext.HTTP_RESPONSE);   
    Map session = context.getSession();  

这些是得到环境里的那7个属性

 

 

 

 

 

分享到:
评论

相关推荐

    BgInfo v4.26.zip

    这款软件在版本v4.26中进一步提升了功能和用户体验,尤其在HelpDesk和运维管理领域,它能够提供实时、直观的系统状态展示,极大地提高了工作效率。 首先,BgInfo的核心功能在于其信息整合能力。它可以快速提取并...

    RealVNCV4.26_XiaoSD.rar

    【标题】"RealVNCV4.26_XiaoSD.rar" 指的是一个名为 "RealVNCV4.26_XiaoSD" 的压缩文件,格式为RAR,这通常是一个软件包,包含了RealVNC的特定版本,即V4.26,针对 XiaoSD(可能指的是小屏幕设备或某种特定平台)...

    JsonLibrary-4.26.zip

    总的来说,JSONLibrary-4.26.zip是一个针对UE4.26的JSON解析库,对于那些在UE4.26环境中构建包含WebUI或者需要处理JSON数据的项目来说,这是一个非常实用的工具。它简化了JSON数据的处理,使得开发者可以更专注于...

    ArcGIS API for JavaScript v4.26下载( sdk开发包)

    首先,3D地图体验的提升是v4.26的一个重要亮点。API提供了更完善的3D视图和场景视图,支持更丰富的3D对象渲染,如建筑物、地形、地形表面纹理等。这使得开发者能够创建更为生动、真实的三维地图应用,为用户带来沉浸...

    STM32CubeMX_V4.26.0

    总结来说,STM32CubeMX_V4.26.0是一款强大的STM32微控制器配置工具,它的跨平台特性、直观的配置界面、完善的库支持以及便捷的在线升级功能,使其成为STM32开发者的得力助手,无论是新手还是经验丰富的工程师都能...

    UE4.26插件WebUI

    而"UE4.26插件WebUI"则是一个专为UE4.26版本设计的插件,它允许开发者将Web页面与虚幻引擎的内容融合在一起,实现更加丰富的交互体验和可视化效果。 这个插件的核心功能在于提供了一个桥梁,让开发者可以利用HTML5...

    Ultra Dynamic Sky 4.26以及早期版本

    它基于物理精确的光照模型,使得天空的颜色、亮度和氛围随着一天中的不同时间而自然变化,为玩家带来沉浸式的游戏体验。 2. **云层模拟** 该插件的云层系统具有高细节度和真实感。云层的形状、密度、颜色和运动都...

    STM32CubeMX_V4.26.0官方版本

    V4.26.0是该工具的一个早期版本,适用于那些依赖旧版工程配置的用户。随着STM32CubeMX的不断更新,新版本可能不再兼容旧版工程,因此对于仍需维护或开发基于老版本库的项目的人来说,这是一个重要的资源。 STM32...

    系统桌面-RELEASE-4.26.3.4214-123117.apk

    系统桌面-RELEASE-4.26.3.4214-123117.apk

    HttpLibrary-4.26.zip

    例如,当需要从服务器获取玩家的成就列表时,开发者可以创建一个GET请求到特定的API接口,然后在响应回调中解析返回的JSON数据,将成就信息更新到游戏界面上。反之,当玩家完成新的成就时,可以通过POST请求将数据...

    eclipse 4.26.0

    eclipse 4.26.0

    2021-2022收藏资料延炼4.26事故学习心得体会.doc

    文档标题和描述提到的是2021-2022年延安炼油厂4.26闪爆事故的学习心得体会,是一份教育精品资料。该事故造成了财产损失和人员受伤,引发了对安全生产的深刻反思。以下是关于这个事故及相关知识点的详细讨论: 首先...

    P2P终结者 V4.26

    强 有 力 地 网 络 工 具 , 你 的 懂 得 哈

    p2p终结者4.26

    P2P终结者4.26是一款专为网络管理设计的实用工具,尤其针对局域网环境中的带宽控制问题。它能够有效地抑制BT、电驴等P2P下载软件过度占用网络资源,从而确保网络的顺畅运行,对提升整体网络性能具有重要意义。 首先...

    STM32CubeMX4.26.0安装软件

    STM32CubeMX4.26.0是该软件的一个特定版本,适用于不同的操作系统,包括Windows、Mac和Linux。 STM32CubeMX的主要功能包括: 1. **设备选择**:用户可以根据项目需求选择合适的STM32系列和具体型号的微控制器。 2...

    iTween for UE4.26

    总结起来,"iTween for UE4.26"是一款强大的UE4动画插件,它以简洁的接口和丰富的功能,为开发者提供了更高效、灵活的动画创建手段。通过深入理解和熟练运用,开发者可以创造出更为生动、引人入胜的游戏世界。

    4.26 实验作业 已完成

    4.26 实验作业 已完成

    ArcGIS API for JavaScript v4.26下载(api 开发资源)

    ArcGIS API for JavaScript 是一种用于在网页上创建地图应用的开发库。如果您想使用本地资源而不是在线资源,您需要确保本地服务器已经设置好,并且所有的资源(包括 JavaScript 库、CSS 文件、图片等)都可以通过...

    RealVNCV4.26

    RealVNC V4.26是一款强大的远程连接软件,专为各种Windows系统设计,被誉为运维人员的得力助手。它允许用户轻松地从一个设备控制另一台设备,实现远程桌面访问,无论是进行系统维护、故障排查还是日常操作,都能极大...

Global site tag (gtag.js) - Google Analytics