精华内容
下载资源
问答
  • 更多相关内容
  • ASP.NET(C#) Web Api通过文件下载文件到本地实例源码
  • 前端webupload +后端 springboot 实现大文件的上传下载,可实现断点续传,秒传,亲测可用
  • 这篇文章主要介绍了 (C) Web Api 通过文件下载文件的方法 ,提供源码下载 , 需要的朋友可以参考下 下载文件到本地是很多项目开发中需要实现的一个很简单的功能 说简单 是从具体的 代码实现上来说的 .NET 的文件下载...
  • 一个示例Web应用程序以及有关使用Web API数据源(包括ASP.NET Core),客户端Angular CLI或AngularJS组件创建,显示和下载PDF文档的讨论,以及用于处理PDF文档Web浏览器兼容性的解决方案。
  • 需求背景:以前在做文件上传下载,都是基于FrameWork项目或者Core Web项目实现的文件上传或下载,基于web文件下载及权限比较好实现的。但是现在很多公司技术领导层,都在推行前后端分离理念,所以这一次我承担了...
  • 全新的java web项目的配置文件,新建的纯净的web.xml文件,没做任何改动,下载就可以使用了。
  • Web前端作业.zip

    2020-05-22 12:43:31
    漫步时尚广场完整项目,推荐使用火狐浏览器。后台登陆帐号只有一个,{"admin","123456"},登陆后跳转后台页面时,谷歌浏览器和uc浏览器无效,不清楚原因,内附文档说明,推荐先看一下文档
  • easyui webserver 实现文件上传下载

    热门讨论 2015-03-30 11:44:24
    easyui webserver 实现文件上传下载
  • SpringBoot大文件上传下载、分片、断点续传、代码实现

    WebUploader是由Baidu WebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现代文件上传组件。

    大文件上传

    实现思路:

    分片:按照自定义缓冲区大小,将大文件分成多个小文件片段。

    断点续传:根据分片数量,给每个小文件通过循环起对应名称,当文件下载中断在续传时,判断小文件名称若存在则不存了,此时还需要判断文件若不是最后一个分片则大小为缓冲区固定大小,若没达到则证明小文件没传完需要重新传输。

    合并:下载时通过线程池创建任务进行下载或上传、当判断最后一个分片传完时,调用合并方法,根据之前定义的文件名称顺序进行合并,肯能出现最后一个分片传完,之前分片未传完的情况,需要使用while循环进行判断,多文件未传输完,则等待一会继续判断。

    大文件秒传:实际上是根据文件名称区一个唯一的md5值存储,传文件时进行判断,若存在则不传。

    创建springboot项目,添加依赖

     <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-autoconfigure</artifactId>
            </dependency>
            <dependency>
                <groupId>commons-fileupload</groupId>
                <artifactId>commons-fileupload</artifactId>
                <version>1.3.1</version>
            </dependency>
            <dependency>
                <groupId>commons-io</groupId>
                <artifactId>commons-io</artifactId>
                <version>2.4</version>
            </dependency>
    <!--        做断点下载使用-->
            <dependency>
                <groupId>org.apache.httpcomponents</groupId>
                <artifactId>httpcore</artifactId>
            </dependency>
            <dependency>
                <groupId>org.apache.httpcomponents</groupId>
                <artifactId>httpclient</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
        </dependencies>

    编写测试环境看环境有没有搭建成功

    @Controller
    public class UploadController {
        @RequestMapping("/up")
        @ResponseBody
        public String upload(HttpServletRequest request, HttpServletResponse response){
            return "搭建成功";
        }
    }

    页面主要代码

    <body>
    <div id="upload-container">
        <span>上传</span>
    </div>
    <div id="upload-list"></div>
    <button id="picker">点击上传</button>
    </body>
    <script>
        $('#upload-container').click(function (event){
            $("#picker").find('input').click();
        });
        var uploader = WebUploader.create({
            auto: true,
            swf : 'Uploader.swf', //swf文件路径
            server: 'http://localhost:8080/upload',
            dnd: '#upload-container',
            pick: '#picker',  //内部根据当前运行创建
            multiple: true,     //选择多个
            chunked: true,      //开启分片
            threads: 20,        //并发数
            method: 'POST',
            fileSizeLimit: 1024*1024*1024*10, //单个文件大小限制
            fileSingleSizeLimit: 1024*1024*1024,  //总文件大小
            fileVal: 'upload'
        });
        uploader.on("beforeFileQueued",function (file){
            console.log(file); //获取文件后缀
        });
        uploader.on('fileQueued',function (file){
            //选中文件要做的事
            console.log(file.ext);
            console.log(file.size);
            console.log(file.name);
            var html = '<div class="upload-item"><span>文件名:'+file.name+'</span><span data-file_id="'+file.id+'"class="btn-delete">删除</span><span data-file_id="'+file.id+'"class="btn-retry">重试</span><div class="percentage '+file.id+'" style="width: 0%;"></div></div>'
            $('#upload-list').append(html);
            uploader.md5File(file)  //给文件定义唯一的md5值,当再次上传相同文件时,就不用传了  大文件秒传实际上是没传,直接拷贝之前文件地址
            //显示进度
            .progress(function (percentage){
                console.log('Percentage:',percentage);
            })
            //完成
            .then(function (val){
                console.log('md5 result',val);
            });
        });

    webUpload组件支持分片上传:利用多进程并发上传,将大文件拆分成一个一个的小文件,每一个小文件属于大文件的一个分片

    断点续传实现:后端代码

    @Controller
    public class UploadController {
        private final static String utf8 = "utf-8";
        @RequestMapping("/up")
        @ResponseBody
        public void upload(HttpServletRequest request, HttpServletResponse response) throws Exception {
           response.setCharacterEncoding(utf8);
           //长传时候会有多个分片,需要记录当前为那个分片
           Integer schunk = null;
           //总分片数
            Integer schunks = null;
            //名字
            String name = null;
            //文件目录
            String path = "D:\\file";
            BufferedOutputStream os = null;
            try {
                //设置缓冲区大小  先读到内存里在从内存写
                DiskFileItemFactory factory = new DiskFileItemFactory();
                factory.setSizeThreshold(1024);
                factory.setRepository(new File(path));
                //解析
                ServletFileUpload upload = new ServletFileUpload(factory);
                //设置单个大小与最大大小
                upload.setFileSizeMax(5l*1024l*1024l*1024l);
                upload.setSizeMax(10l*1024l*1024l*1024l);
                List<FileItem> items = upload.parseRequest(request);
                for (FileItem item : items){
                    if (item.isFormField()){
                        //获取分片数赋值给遍量
                        if ("chunk".equals(item.getFieldName())){
                            schunk = Integer.parseInt(item.getString(utf8));
                        }
                        if ("chunks".equals(item.getFieldName())){
                            schunks = Integer.parseInt(item.getString(utf8));
                        }
                        if ("name".equals(item.getFieldName())){
                            name = item.getString(utf8);
                        }
                    }
                }
                //取出文件基本信息后
                for (FileItem item : items){
                    if (!item.isFormField()){
                        //有分片需要临时目录
                        String temFileName = name;
                        if (name != null){
                            if (schunk != null){
                                temFileName = schunk+"_"+name;
                            }
                            //判断文件是否存在
                            File temfile = new File(path, temFileName);
                            //断点续传  判断文件是否存在,若存在则不传
                            if (!temfile.exists()){
                                item.write(temfile);
                            }
                        }
                    }
                }
                //文件合并  当前分片为最后一个就合并
                if (schunk != null && schunk.intValue()== schunks.intValue()-1){
                    File tempFile = new File(path, name);
                    os = new BufferedOutputStream(new FileOutputStream(tempFile));
                    //根据之前命名规则找到所有分片
                    for (int i = 0; i < schunks; i++) {
                        File file = new File(path, i + "_" + name);
                        //并发情况 需要判断所有  因为可能最后一个分片传完,之前有的还没传完
                        while (!file.exists()){
                            //不存在休眠100毫秒后在从新判断
                            Thread.sleep(100);
                        }
                        //分片存在  读入数组中
                        byte[] bytes = FileUtils.readFileToByteArray(file);
                        os.write(bytes);
                        os.flush();
                        file.delete();
                    }
                    os.flush();
                }
                response.getWriter().write("上传成功");
            }finally {
                try {
                    if (os != null){
                        os.close();
                    }
                }catch (IOException e){
                    e.printStackTrace();
                }
            }
        }
    }

    文件分片下载服务端

    @Controller
    public class DownLoadController {
        private final static String utf8 = "utf-8";
        @RequestMapping("/down")
        public void downLoadFile(HttpServletRequest request, HttpServletResponse response) throws IOException {
            response.setCharacterEncoding(utf8);
            //定义文件路径
            File file = new File("D:\\File\\a.mp4");
            InputStream is = null;
            OutputStream os = null;
            try {
                //分片下载
                long fSize = file.length();//获取长度
                response.setContentType("application/x-download");
                String fileName = URLEncoder.encode(file.getName(),utf8);
                response.addHeader("Content-Disposition","attachment;filename="+fileName);
                //根据前端传来的Range  判断支不支持分片下载
                response.setHeader("Accept-Range","bytes");
                //获取文件大小
                response.setHeader("fSize",String.valueOf(fSize));
                response.setHeader("fName",fileName);
                //定义断点
                long pos = 0,last = fSize-1,sum = 0;
                //判断前端需不需要分片下载
                if (null != request.getHeader("Range")){
                    response.setStatus(HttpServletResponse.SC_PARTIAL_CONTENT);
                    String numRange = request.getHeader("Range").replaceAll("bytes=","");
                    String[] strRange = numRange.split("-");
                    if (strRange.length == 2){
                        pos = Long.parseLong(strRange[0].trim());
                        last = Long.parseLong(strRange[1].trim());
                        //若结束字节超出文件大小 取文件大小
                        if (last>fSize-1){
                            last = fSize-1;
                        }
                    }else {
                        //若只给一个长度  开始位置一直到结束
                        pos = Long.parseLong(numRange.replaceAll("-","").trim());
                    }
                }
                long rangeLenght = last-pos+1;
                String contentRange = new StringBuffer("bytes").append(pos).append("-").append(last).append("/").append(fSize).toString();
                response.setHeader("Content-Range",contentRange);
                response.setHeader("Content-Lenght",String.valueOf(rangeLenght));
                os = new BufferedOutputStream(response.getOutputStream());
                is = new BufferedInputStream(new FileInputStream(file));
                is.skip(pos);//跳过已读的文件
                byte[] buffer = new byte[1024];
                int lenght = 0;
                //相等证明读完
                while (sum < rangeLenght){
                    lenght = is.read(buffer,0, (rangeLenght-sum)<=buffer.length? (int) (rangeLenght - sum) :buffer.length);
                    sum = sum+lenght;
                    os.write(buffer,0,lenght);
    
                }
                System.out.println("下载完成");
            }finally {
                if (is!= null){
                    is.close();
                }
                if (os!=null){
                    os.close();
                }
            }
        }
    }

    客户端分片下载,指定固定文件

    @RestController
    public class DownloadClient {
        private final static long per_page = 1024l*1024l*50l;
        //分片存储临时目录 当分片下载完后在目录中找到文件合并
        private final static String down_path="D:\\File";
        //多线程下载
        ExecutorService pool =  Executors.newFixedThreadPool(10);
        //文件大小 分片数量 文件名称
        //使用探测 获取变量
        //使用多线程分片下载
        //最后一个分片下载完 开始合并
        @RequestMapping("/downloadFile")
        public String downloadFile() throws IOException {
            FileInfo fileInfo = download(0,10,-1,null);
            if (fileInfo!= null){
                long pages = fileInfo.fSize/per_page;
                for (int i = 0; i <= pages; i++) {
                    pool.submit(new Download(i*per_page,(i+1)*per_page-1,i,fileInfo.fName));
                }
            }
    
            return "成功";
        }
        class Download implements Runnable{
            long start;
            long end;
            long page;
            String fName;
    
            public Download(long start, long end, long page, String fName) {
                this.start = start;
                this.end = end;
                this.page = page;
                this.fName = fName;
            }
    
            @Override
            public void run() {
                try {
                    FileInfo fileInfo = download(start,end,page,fName);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        //返回文件名 跟大小
        private FileInfo download(long start,long end,long page,String fName) throws IOException {
            //断点下载 文件存在不需要下载
            File file = new File(down_path, page + "-" + fName);
            //探测必须放行 若下载分片只下载一半就锻炼需要重新下载所以需要判断文件是否完整
            if (file.exists()&&page != -1&&file.length()==per_page){
                return null;
            }
            //需要知道  开始-结束 = 分片大小
            HttpClient client = HttpClients.createDefault();
            //httpclient进行请求
            HttpGet httpGet = new HttpGet("http://127.0.0.1:8080/down");
            //告诉服务端做分片下载
            httpGet.setHeader("Range","bytes="+start+"-"+end);
            HttpResponse response = client.execute(httpGet);
            String fSize = response.getFirstHeader("fSize").getValue();
            fName= URLDecoder.decode(response.getFirstHeader("fName").getValue(),"utf-8");
            HttpEntity entity = response.getEntity();//获取文件流对象
            InputStream is = entity.getContent();
            //临时存储分片文件
            FileOutputStream fos = new FileOutputStream(file);
            byte[] buffer = new byte[1024];//定义缓冲区
            int ch;
            while ((ch = is.read(buffer)) != -1){
                fos.write(buffer,0,ch);
            }
            is.close();
            fos.flush();
            fos.close();
            //判断是不是最后一个分片
            if (end-Long.valueOf(fSize)>0){
                //合并
                try {
                    mergeFile(fName,page);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            return new FileInfo(Long.valueOf(fSize),fName);
        }
    
        private void mergeFile(String fName, long page) throws Exception {
            //归并文件位置
            File file = new File(down_path, fName);
            BufferedOutputStream os = new BufferedOutputStream(new FileOutputStream(file));
            for (int i = 0; i <= page; i++) {
                File tempFile = new File(down_path, i + "-" + fName);
                //分片没下载或者没下载完需要等待
                while (!file.exists()||(i!=page&&tempFile.length()<per_page)){
                    Thread.sleep(100);
                }
                byte[] bytes = FileUtils.readFileToByteArray(tempFile);
                os.write(bytes);
                os.flush();
                tempFile.delete();
            }
            File file1 = new File(down_path, -1 + "-null");
            file1.delete();
            os.flush();
            os.close();
        }
    
        //使用内部类实现
        class FileInfo{
            long fSize;
            String fName;
    
            public FileInfo(long fSize, String fName) {
                this.fSize = fSize;
                this.fName = fName;
            }
        }
    }

    展开全文
  • C#WebApi下载文件

    千次阅读 2021-02-22 16:34:42
    //前台请求接口 <a href=...下载文件</a> /// <summary> /// 下载文件 /// </summary> [HttpGet] public HttpResponseMessage DownloadFile() {
           //前台请求接口
           <a href="http://localhost:43640/api/UserInfo/Values/DownloadFile">下载文件</a>
    
            /// <summary>
            /// 下载文件
            /// </summary>
            [HttpGet]
            public HttpResponseMessage DownloadFile()
            {
                string fileName = "Word.docx";
                //文件的服务器地址
                string filePath = HttpContext.Current.Server.MapPath("~/") + "Web\\wordtemp\\" + "word.docx";
                FileStream stream = new FileStream(filePath, FileMode.Open);
                HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK);
                response.Content = new StreamContent(stream);
                response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
                response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
                {
                    FileName = HttpUtility.UrlEncode(fileName)
                };
                response.Headers.Add("Access-Control-Expose-Headers", "FileName");
                response.Headers.Add("FileName", HttpUtility.UrlEncode(fileName));
                return response;
            }
    
    展开全文
  • Visual C++源代码 101 如何从Web客户端异步下载文件Visual C++源代码 101 如何从Web客户端异步下载文件Visual C++源代码 101 如何从Web客户端异步下载文件Visual C++源代码 101 如何从Web客户端异步下载文件Visual ...
  • 包含翻译后的API文档:spring-security-web-5.5.2-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.springframework.security:spring-security-web:5.5.2; 标签:springframework、security、spring、web、中文...
  • web文件上传下载原理浅析

    万次阅读 2017-12-11 10:58:36
    一、web文件上传浅析 现在有很多Web程序都有上传功能,实现上传功能的组件或框架也很多,如基于java的Commons FileUpload、还有Struts1.x和Struts2中带的上传文件功能(实际上,Struts2在底层也使用了Commons ...

    一、web文件上传浅析

    现在有很多Web程序都有上传功能,实现上传功能的组件或框架也很多,如基于javaCommons FileUpload、还有Struts1.xStruts2中带的上传文件功能(实际上,Struts2在底层也使用了Commons FileUpload)。在asp.net中也有相应的上传文件的控件。

    虽然现在有很多上传组件可以利用,但是了解Web上传文件的原理,对于处理突然出现的问题会有很大的帮助,下面就来讲一下通过浏览器上传文件的基本原理。在了解了原理之后,就可以非常容易地自制满足自身需要的上传组件了。

    众所周知,在客户端代码中需要使用<input type='file' name='file' />来选择要上传的文件,并上传,代码如上:

    <html>
        <head>
            <title>upload</title>
            <meta http-equiv="description" content="this is my page">
            <meta http-equiv="content-type" content="text/html; charset=GB18030">
        </head>
    
        <body>
            <form action="servlet/UploadFile" method="post"
                enctype="multipart/form-data">
                <input type="file" name="file1" id="file1" />
                <input type="file" name="file2" id="file2" />
                <input type="submit" value="上传" />
            </form>
        </body>
    </html>
       从上面的代码可以看出,有两个文件选择框(file1file2),在上传文件时,<form>标签必须加上enctype="multipart/form-data",否则浏览器无法将文件内容上传到服务端。下面我们来做个实验。在ServletdoPost方法中编写如下的代码,如果想使用asp.net或其他的语言或技术,也可以很容易实现相应的功能。

     public void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException
        {
            java.io.InputStream is = request.getInputStream();
            java.io.FileOutputStream fos = new java.io.FileOutputStream("d:\\out.txt");
            
            byte[] buffer = new byte[8192];
            int count = 0;
            while((count = is.read(buffer)) >0)
            {
                fos.write(buffer, 0, count);
            }        
            fos.close();
        }
       上面的功能非常简单,只是通过request获得一个InputStream对象,并通过这个对象从客户端获得发送过来的字节流(注意,一定要用字节流,因为,上传的文件可能是二进制文件,如图象文件,因此,使用字节流会更通用)。并将这些字节流保存在D盘的out.txt文件中。然后我们打开out.txt,文件的内容如图1所示:
               
     

                                                                                                                               图1

     由于out.txt是使用文本形式打开的,并且file1上传的是a.jpg(一个图象文件),因此,显示的是一些乱码。我们可以不用管它们。只需要看看这些内容的头部。我们很快就可以找到规律。每一个文件内容的头部都由“-----------------------------30514443229777”分隔,然后是这个文件的属性,如下:

    Content-Disposition: form-data; name="file1"; filename="a.jpg"

    Content-Type: image/jpeg

    其中包含了文件选择框的name属性,还有上传的文件名(filename字段),要注意的,firefox在上传时,这个filename属性值只是文件名,如果使用IE,就是带路径的文件名,如D:"a.jpg

    接下来的规则就和HTTP的头一样了,以一个空行("r"n)分隔。后面就是文件的具体内容。现在最关键的文件的结尾,从图1可以看出,文件的结尾也是“-----------------------------30514443229777”,因此,可以断定,第一个上传的文件(包括文件头)是夹在两个“-----------------------------30514443229777”之间的。而“-----------------------------30514443229777”就是multipart/form-data协议的分隔符。但这里还有一个最关键的问题。这个分隔符每次上传都不一样,服务端是如何知道每次上传的这个分隔符的呢?

    实际上,这个分隔符是通过HTTP请求头的Content-Type字段获得,可通过下面的代码输出这个字段值:

    System.out.println(request.getHeader("Content-type"));

    输出的内容如下:

    multipart/form-data; boundary=---------------------------106712230227687

    只要在服务端获得boundary后面的值即可。经过测试,Content-Type中的分隔符号中的“-”比实际上传的“-”少两个,不知是怎么回事。不过这没关系,我们可以认为每一个文件块是以""r"n—“结尾的,或是直接将从boundary获得的分隔符加两个“”。而最后结尾的分隔符是“---------------------------106712230227687—”,后面多了两个“”。

    综合上述,也就是说,一个文件块是以“---------------------------106712230227687”开头,以“”结尾,从图2可以看出这一切。

                                             

                                                                                                                             图 2

    至于剩下的工作,就是按着上面的规则来分析这些字符流了。分析的方法很多。在这里就不详述了。

          multipart/form-data规 范原文:http://www.ietf.org/rfc/rfc2388.txt 
       Form-based File Upload in HTML:http://www.ietf.org/rfc/rfc1867.txt

    二、web文件下载浅析

    文件下载流程

    服务器端编码原理下载分析:在服务端通过response可以获取到输出流,在服务端通过输入流将文件流获取到然后通过response获取输出流直接写回到浏览器即可完成下载。

    服务器端下载两个响应头设置

    1. 怎样能通知浏览器,下载文件是什么:通过response.setContentType设置响应数据的mimeType类型。获取一个文件的mimeType类型,ServletContext.getMimeType(String filename)
    2.  设置下载文件名称:response.setHeader("Content-Disposition","attachement;filename=下载名称")

    下载乱码问题

    对于下载时,我们在显示文件下载名称的时候,如果包含了中文,就可能出现乱码问题。原因在于不同的浏览器,他们在处理下载文件的时候编码不一致,ie浏览器使用的是utf-8编码,而firefox使用的是base64编码。所以在下载还需要设置编码格式。示例如下:
    		response.setCharacterEncoding("utf-8");
    		String filename = request.getParameter("filename");
    		String downPath = path+"/upload";
    		FileInputStream in = new FileInputStream(downPath+File.separator+filename);
    
    		if(request.getHeader("user-agent").toLowerCase().contains("msie")){
    			filename = URLEncoder.encode(filename, "UTF-8");
    		}else{
    			filename = new String(filename.getBytes("UTF-8"),"iso-8859-1");
    		}
    		response.setHeader("content-disposition", "attachment;filename="+filename);
    		response.setHeader("content-type",this.getServletContext().getMimeType(filename));
    
    		OutputStream os = response.getOutputStream();
    		byte[] buffer = new byte[1024];
    		int len=0;      
    		while((len=in.read(buffer))!=-1) {
    			os.write(buffer, 0, len);
    		}
    		in.close();
    		os.close(); 

    转载地址:https://www.cnblogs.com/nokiaguy/archive/2008/05/29/1209858.html
    
    



    展开全文
  • java web 上传下载工具类,压缩包内包含src和WebRoot,直接新建项目,然后复制这两个目录内的文件,覆盖新建项目中的文件即可。用法参见test用例
  • WEB接口文档

    2012-05-27 21:30:27
    定义WEB接口的文档,详细的定义了WEB各个组件之间的交互
  • vs2013 c++实现上传的客户端,服务端为java写的web工程,模拟post方法,可以上传大文件
  • C# web文件下载

    2009-07-15 14:24:13
    很方便的下载Web文件类;CodeProject上下载的,希望对大家有用处!
  • Web实现文件上传和下载

    千次阅读 2020-05-17 19:59:17
    要实现Web开发中的文件上传功能,通常需要完成两步操作:一是在Web页面中添加上传输入项;二是在Servlet中读取上传文件的数据,并保存到本地硬盘中。 由于大多数文件的上传都是通过表单的形式提交给服务器的,因此...
  • web下载文件的头信息

    千次阅读 2020-12-25 14:34:11
    让浏览器能支持下载我们需要的文件 resp.setHeader("Content-disposition","attachment;filename"+filename);
  • ASP.NET CORE WEBAPI文件下载

    千次阅读 2020-04-13 09:48:39
    最近要使用ASP.NET CORE WEBAPI用来下载文件,使用的.NET CORE 3.1。考虑如下场景: 文件是程序生成的。 文件应该能兼容各种格式。 浏览器可以感知进行下载。 准备 经过简单的调研,得到以下结论。 ...
  • Java实现web在线预览office文档与pdf文档实例 在linux平台下转为pdf 需要安装
  • .Net WebAPI 高速下载文件接口实现

    千次阅读 2017-09-30 14:03:54
    接触WebAPI一年多了,感觉是个承上启下,开创未来的技术。老一辈程序员写接口就像写...在开发的过程中遇到了一些问题,部分都可通过百度找到解决方案,但是有一个问题却一直没有很好地解决,那就是文件下载速度的问
  • 本工程用于研究Java Web文件下载 本工程编码方式:UTF-8 说明:本工程下载功能解决了使用IE11下载文件时所出现的乱码问题
  • web文件下载(附方案及源码配置)

    千次阅读 2019-07-05 12:12:11
    解决方案2.1 开启虚拟目录与路径映射(不建议)2.1.1 开启虚拟目录2.1.2 开启路径映射2.1.4 存在不足2.2 将文件放置到ROOT下(不建议)2.2.1 说明2.2.2 效果2.2.3 存在不足2.3 只开启路径映射及相关配置(建议)...
  • .Net5 WebApi中下载文件(返回FileStreamResult)WebApi CodeClient Code WebApi Code /// <summary> /// 下载文件 LastUpdateDate:2021-07-14 18:25:03.811 Author:Lingbug /// </summary> /// ...
  • 公司要把大华摄像头集成到网页上预览,海康的有现成的sdk开发工具,大华的没有,只能网上一个个找.通过调用大华的plugin实现的摄像头控制,兼容IE11亲测可用,内涵demo,只需要安装...文件内包括使用说明,示例代码,开发文档.
  • 包含翻译后的API文档:springfox-spring-web-3.0.0-javadoc-API文档-中文(简体)版.zip; Maven坐标:io.springfox:springfox-spring-web:3.0.0; 标签:spring、springfox、web、jar包、java、中文文档; 使用方法:...
  • web选择文件保存路径

    热门讨论 2013-04-22 14:35:15
    web选择文件保存路径的方式,大致分为两种,大家可以下来了了解一下,个人表示第一种比较好用
  • .NetMvc调用WebApi接口进行上传文件

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,016,365
精华内容 406,546
关键字:

web大文件下载