欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

jsp中下载程序问题

程序员文章站 2022-03-03 09:27:17
我下载了(sun企业级应用的首选)smartupload类,然后编写了下载程序,如下:<%@page contenttype="text/html;charset=...

我下载了(sun企业级应用的首选)smartupload类,然后编写了下载程序,如下:
<%@page contenttype="text/html;charset=gb2312"%><%@page language="java" import="com.jsp(sun企业级应用的首选)smart.upload.*"%><jsp(sun企业级应用的首选):usebean id="mysmartupload" scope="page" class="com.jsp(sun企业级应用的首选)smart.upload.smartupload"/><%mysmartupload.initialize(pagecontext);
mysmartupload.downloadfile("d:\111.txt"jsp中下载程序问题;
%>
运行后,我txt文件中的内容就直接显示在了页面上,zip文件也同样,只不过是乱码,有什么办法不显示而和一般的下载一样呢?

 eclipse 回复于:2002-10-18 10:54:22
应该是smartupload类的问题,jsp(sun企业级应用的首选)程序没有问题,我感觉

 huangmw 回复于:2002-10-18 11:27:17
这个类是从www.jsp(sun企业级应用的首选)smart.com站点下载的,不会他们编的类问题吧?
你能提供一个类似这种类给我吗?谢谢了

 eclipse 回复于:2002-10-18 12:11:30
testfiledownload.jsp(sun企业级应用的首选)页面的例子:

<%
// 得到文件名字和路径
string filename = ”mengxianhuidoctest.doc”;
string filepath = ”d:\”;

// 设置响应头和下载保存的文件名
response.setcontenttype(”application/octet-stream”);
response.setheader(”content-disposition”,
”attachment; filename=”” + filename + ”””);

// 打开指定文件的流信息
java.io.fileinputstream fileinputstream =
new java.io.fileinputstream(filepath + filename);

// 写出流信息
int i;
while ((i=fileinputstream.read()) != -1) {
out.write(i);
}
fileinputstream.close();
out.close();
%>

值得注意的是:在你要下载的文件内容里,除了文件的内容之外,不应该再附加有其它任何的字符,包括空格和回车换行符。我们有时在编写代码的时候,为了使代码清晰可读,往往会添加一些空格、制表符或者回车换行符,这样虽然看起来比较清晰,但有时可能会得不到正确的结果。比如:
<%@ page import=”java.io.*”
%> <jsp(sun企业级应用的首选):usebean id=”mybeanfrommengxianhui” scope=”page”
class=”com.mengxianhui.downloadbean” />
应该写成这样:
<%@ page import=”java.io.*”
%><jsp(sun企业级应用的首选):usebean id=”mybeanfrommengxianhui” scope=”page”
class=”com.mengxianhui.downloadbean” />

 eclipse 回复于:2002-10-18 12:13:21
请注意:application/octet-stream是设置下载类型

要改成你实际的类型,如excel要写成:application/vnd.ms-excel


 eclipse 回复于:2002-10-18 12:17:39
如果不用jsp(sun企业级应用的首选)smart,你就需要了解端的编码方式,在传到服务器端时你才能解码。也才可以得到上传文件的相关信息。看下面的代码。
package mshtang.fileupload;
import java.io.*;
/**一个存放文件信息的类,包括文件的名称(string),
**字段名(string), content-type(string)和内容(byte[])
**还提供了一个直接将文件内容保存到一个文件的函数 void saveto(file f)
**可以调用 类{@link contentfactory}中的适当方法,生成该类的实例。
** @see contentfactory
** @see contentfactory#getfileparameter
** @see contentfactory#getfileparametervalues
**/

public class fileholder
{
    string contenttype;
    byte[] buffer;
    string filename;
    string parametername;

    fileholder(byte[] buffer, string contenttype, string filename, string parametername)
    {
        this.buffer = buffer;
        this.contenttype = contenttype;
        this.filename = filename;
        this.parametername = parametername;
    }
    /**把文件的内容存到指定的文件中,
    **<b>这个方法不会检查这个文件是否可写、是否已经存在。</b>
    **@param file  目的文件
    **@throws 在 i/o 操作中被抛出的 ioexception
    **/
    public void saveto(file file) throws ioexception
    {
        bufferedoutputstream out = new bufferedoutputstream(new fileoutputstream(file));
        out.write(buffer);
        out.close();
    }

    /**把文件的内容存到指定的文件中,
    **<b>这个方法不会检查这个文件是否可写、是否已经存在。</b>
    **@param name 目的文件名
    **@throws 在 i/o 操作中被抛出的 ioexception
    **/
    public void saveto(string name) throws ioexception
    {
        saveto(new file(name));
    }

   /**
    **返回一个文件内容的字节数组
    **@return 一个代表文件内容的字节数组
   **/
    public byte[] getbytes()
    {
        return buffer;
    }

   /**
    **返回该文件在文件上载前在客户端的名称
    **@return 该文件在文件上载前在客户端的名称
   **/
    public string getfilename()
    {
        return filename;
    }

   /**
    **返回该文件的 content-type
    **@return 该文件的 content-type
   **/
    public string getcontenttype()
    {
        return contenttype;
    }

   /**
    **返回上载该文件时,html 页面窗体中 file 控件的 name 属性
    **@return 返回上载该文件时,html 页面窗体中 file 控件的 name 属性
   **/
    public string getparametername()
    {
        return parametername;
    }
}

 eclipse 回复于:2002-10-18 12:22: