精华内容
下载资源
问答
  • 下载文件用get还是post
    千次阅读
    2021-06-18 10:11:39

    一、get方式

    直接使用: location.href='http://www.xxx.com/getFile?params1=xxx&params2=xxxx'

    二、post方式

    当有文件需要传给后端接口、后端处理后返回文件时,用post方式发送formdata。 此时下载后端返回的文件。

     1、后端设置Response Headers的2个值:

    Content-Disposition:attachment;filename=xxx.xls
    Content-Type:application/octet-stream

    2、前端处理下blob文件: 以vue、vue-resource代码为例:

    Vue.http.post('/xxx/exportDetailData', formData, {responseType: 'blob'})
                    .then(response => {
                        return response.blob()
                    })
                    .then(blob => {
                        let url = window.URL.createObjectURL(blob)
                        let link = document.createElement('a')
                        link.download = '详情数据.xls'
                        link.style.display = 'none'
                        link.href = url
                        document.body.appendChild(link)
                        link.click()
                        URL.revokeObjectURL(link.href)
                        document.body.removeChild(link)
                    })
                    .catch(error => {
                        console.log(error)
                    })

     

    更多相关内容
  • C语言源码:http get/post 下载文件,里面包括了ip解析,端口号解析,文件读写等。
  • GETPOST的区别

    2016-10-25 19:53:36
    整理资源
  • 前端下载文件的两种方式postget

    千次阅读 2021-02-01 17:24:58
    文章目录一、使用post二、使用get总结欢迎底下留言,一起学习进步! 一、使用post // 生成excel export function GeneratExcel(data) { return request({ url: '/artifact/download_list/', method: 'post', ...


    一、使用post

    
    // 生成excel
    export function GeneratExcel(data) {
      return request({
        url: '/artifact/download_list/',
        method: 'post',
        data,
        responseType: 'blob'
      })
    }
    
    GeneratExcel(this.deployList).then(res => {
       constblob = res.data
       const reader = new FileReader()
       reader.readAsDataURL(blob)
       reader.onload = (e) => {
         const a = document.createElement('a')
         a.download = `${this.deployForm.customer}.sh`
         a.href = e.target.result
         document.body.appendChild(a)
         a.click()
         document.body.removeChild(a)
       }
     })
    

    二、使用get

    getFile(url, filename) {
      const iframe = document.createElement('iframe')
      iframe.style.display = 'none' // 防止影响页面
      iframe.style.height = 0 // 防止影响页面
      iframe.src = url
      document.body.appendChild(iframe) // 这一行必须,iframe挂在到dom树上才会发请求
    }
    

    总结

    前端下载文件的主要方式就是通过创建iframe或者a标签的节点,使用它们自身的特性来达到下载文件的目的。
    至于,选择post方式进行下载,则需要前端对后台传过来的数据进行文件流的处理。

    欢迎底下留言,一起学习进步!

    展开全文
  • HttpClient实现POST GET文件下载 HttpClient实现POST GET文件下载
  • 用post或者get实现文件下载

    千次阅读 2017-08-29 21:15:57
    package test; import java.io.BufferedInputStream; import java.io.BufferedOutputStream...1.此方法只能用GET,不能用POST; 2.只能http协议下载其他网站的文件,不能file协议下载服务器本地文件
    package test;
    
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.util.Calendar;
    
    public class filedownload1 {
    	/**
    	 * @功能 下载临时素材接口
    	 * @param filePath 文件将要保存的目录
    	 * @param method 请求方法,包括POST和GET
    	 * @param url 请求的路径
    	 * @return
    	 */
    
    	public static File saveUrlAs(String url,String filePath,String method){
    		 FileOutputStream fileOut = null;
    		 HttpURLConnection conn = null;
    		 InputStream inputStream = null;
    		 File file=null;
    		 try
    		{
    			 // 建立链接
    			 URL httpUrl=new URL(url);
    			 conn=(HttpURLConnection) httpUrl.openConnection();
    			 //以Post方式提交表单,默认get方式
    			 conn.setRequestMethod(method);
    		     conn.setDoInput(true);  
    		     conn.setDoOutput(true);
    		     // post方式不能使用缓存 
    		     conn.setUseCaches(false);
    		     //连接指定的资源 
    		     conn.connect();
    		     //获取网络输入流
    		     inputStream=conn.getInputStream();
    		     BufferedInputStream bis = new BufferedInputStream(inputStream);
    		     //判断文件的保存路径后面是否以/结尾
    		     if (!filePath.endsWith("/")) {
    
    		    	 filePath += "/";
    
    		    	 }
    		     String extName = url.substring(url.lastIndexOf("."));
    		     java.util.GregorianCalendar gcalendar =  new java.util.GregorianCalendar();
    				String year = gcalendar.get(Calendar.YEAR)+"";
    				String month = gcalendar.get(Calendar.MONTH)+1 + "";
    				String day = gcalendar.get(Calendar.DAY_OF_MONTH)+"";
    				String newFileName =new java.util.Date().getTime() + "_" + (int)(1000 *Math.random())+ extName;	
    		     String dirPath = year + File.separator +month + File.separator + day + File.separator;
    				//写入到文件(注意文件保存路径的后面一定要加上文件的名称)
    		   //创建不同的文件夹目录
    			 file=new File(filePath +dirPath);
    			 //判断文件夹是否存在
    			 if (!file.exists())
    			{
    				//如果文件夹不存在,则创建新的的文件夹
    				 file.mkdirs();
    			}
    	         fileOut = new FileOutputStream(filePath +dirPath +newFileName);
    	         BufferedOutputStream bos = new BufferedOutputStream(fileOut);
    	         
    	         byte[] buf = new byte[4096];
    	         int length = bis.read(buf);
    	         //保存文件
    	         while(length != -1)
    	         {
    	        	 bos.write(buf, 0, length);
    	        	 length = bis.read(buf);
    	         }
    	         bos.close();
    	         bis.close();
    	         conn.disconnect();
    		} catch (Exception e)
    		{
    			 e.printStackTrace();
    			 System.out.println("抛出异常!!");
    		}
    		 
    		 return file;
    		 
    	 }
    	public static void main(String[] args) {
    		String fileUrl = "https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo/bd_logo1_31bdc765.png";                                      
    //		String fileUrl  = "file:///D:/test/test1.txt";
    		/*
    		 * 报错:java.lang.ClassCastException: sun.net.www.protocol.file.FileURLConnection cannot be cast to java.net.HttpURLConnection
    		 */
            String filePath = "d:/test1";    
            File file = saveUrlAs(fileUrl, filePath ,"GET"); 
            /*
             * 若为POST,则报错:java.io.IOException: Server returned HTTP response code: 405 for URL:https://ss0.bdstatic。。。
             */
            
            System.out.println("Run ok!/n<BR>Get URL file " + file);    
    
    	}
    
    }
    

    注意本方法有较大约束性:

    1.此方法只能用GET,不能用POST;

    2.只能用http协议下载其他网站的文件,不能用file协议下载服务器本地文件。


    展开全文
  • 在写springboot加mongo上传下载文件的时候突发奇想,把上传方法写成get,下载方法写成post. 直接说结果,结果postman测试都成功了,而且时间差不多.此时我就很困惑,因为get方法按照理论来说是获取资源的,post方法是...

    在写springboot加mongo上传下载文件的时候突发奇想,把上传方法写成get,下载方法写成post.
    直接说结果,结果用postman测试都成功了,而且时间差不多.此时我就很困惑,因为get方法按照理论来说是获取资源的,post方法是提交资源的,这样有悖于常理.但是事实就是成功了,我搜索了一下资料,网上大多数都是这样的:
    在这里插入图片描述
    在这里插入图片描述
    这些都是基本常识,但是现在事实是我用get方法上传文件也成功了.
    终于在一个英文文档里发现了端倪,

    原文:
    As we all know, file uploading is most often accomplished using POST method. So, why can’t the GET method be used for file uploads instead? Is there a specific prohibition against HTTP GET uploads?
    解决方案
    GET requests may contain an entity body
    RFC 2616 does not prevent an entity body as part of a GET request. This is often misunderstood because PHP muddies the waters with its poorly-named $_GET superglobal. $_GET technically has nothing to do with the HTTP GET request method – it’s nothing more than a key-value list of url-encoded parameters from the request URI query string. You can access the $_GET array even if the request was made via POST/PUT/etc. Weird, right? Not a very good abstraction, is it?

    Why a GET entity body is a bad idea

    So what does the spec say about the GET method … well:

    In particular, the convention has been established that the GET and HEAD methods SHOULD NOT have the significance of taking an action other than retrieval. These methods ought to be considered “safe.”

    So the important thing with GET is to make sure any GET request is safe. Still, the prohibition is only “SHOULD NOT” … technically HTTP still allows a GET requests to result in an action that isn’t strictly based around “retrieval.”

    Of course, from a semantic standpoint using a method named GET to perform an action other than “getting” a resource doesn’t make very much sense either.

    When a GET entity body is flat-out wrong

    Regarding idempotence, the spec says:

    Methods can also have the property of “idempotence” in that (aside from error or expiration issues) the side-effects of N > 0 identical requests is the same as for a single request. The methods GET, HEAD, PUT and DELETE share this property.

    This means that a GET method must not have differing side-effects for multiple requests for the same resource. So, regardless of the entity body present as part of a GET request, the side-effects must always be the same. In layman’s terms this means that if you send a GET with an entity body 100 times the server cannot create 100 new resources. Whether sent once or 100 times the request must have the same result. This severely limits the usefulness of the GET method for sending entity bodies.

    When in doubt, always fall back to the safety/idempotence tests when evaluating the efficacy of a method and its resulting side-effects.

    译文:
    众所周知,文件上传通常是使用 POST 方法完成的。那么,为什么不能使用 GET 方法来上传文件呢?是否有特定的禁止HTTP GET 上传?

    解决方案
    GET请求可能包含一个实体主体

    RFC 2616不会阻止实体主体作为GET请求的一部分。这经常被误解,因为PHP使用 $ _ GET 超全局模糊水域。技术上与HTTP GET 请求方法无关 - 它只不过是一个键值列表来自请求URI查询字符串的url编码参数。您可以访问 $ _ GET 数组,即使请求是通过POST / PUT / etc进行的。奇怪,对吧?不是一个很好的抽象,是吗?

    为什么一个GET实体是一个坏主意

    那么规范中提到的GET方法 …那么:

    特别是,规定GET和HEAD方法不应该具有除检索以外的其他操作的意义。这些方法应该被认为是"安全的"。

    所以GET的重要之处在于确保任何GET请求都是安全的。尽管如此,禁止是
    仅仅是"不应该" …从技术上讲,HTTP仍然允许GET请求导致一个不是
    严格基于"检索"的动作。 "

    当然,从语义的角度来看,使用名为 GET 的方法执行除$ b $以外的操作b"获得"一个资源也没什么意义。

    当一个GET实体正在平坦的时候出错

    关于幂等性,规范说:

    方法也可以具有"幂等性"的性质(除了错误或过期问题)
    N> 0个相同请求的副作用与单个请求相同。 GET,
    HEAD,PUT和DELETE共享这个属性。

    这意味着一个GET方法必须而不是对
    相同资源的多个请求具有不同的副作用。所以,不管实体是否作为GET请求的一部分,副作用
    必须始终是相同的。通俗地说,这意味着如果发送一个带有实体主体
    的GET 100次的服务器不能创建100个新的资源。无论是发送一次还是发送100次请求,
    都有相同的结果。这严重限制了GET方法发送实体的有用性。

    如果有疑问,在评估效能时总是回到安全性/幂等性测试中
    一种方法及其产生的副作用。

    幂等性:就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用。

    总结一下:我理解的意思就是,get请求也可以包含一个请求实体,虽然可以,但是不推荐使用,因为get方法要保证幂等性,这可能就是约定大于配置吧

    展开全文
  • GET 网站上的页面、下载JPG文件POST 表单,包括上传文件。 分析部分常用的返回信息 主要用途: 实践GET/POST消息交互,根据网站的内容具体修改可以定制成专用的接口程序。 主要函数都没有MFC,可以轻松移植到...
  • 下图是我的所有测试接口,包含两个表单提交接口和一个Rest接口:我是的Http请求...下载文件,获取文件字节流:RestTemplate restTemplate = new RestTemplate();HttpHeaders headers = new HttpHeaders();Respon...
  • ... web 浏览器可能是客户端,而计算机上的网络应用程序也可能...在客户机和服务器之间进行请求-响应时,两种最常被用到的方法是:GETPOSTGET - 从指定的资源请求数据。 POST - 向指定的资源提交要被处理的数据
  • 前端get/post请求下载文件多种方式

    千次阅读 2021-09-16 10:53:25
    1、最常见的window.open(url)可以满足就是get请求,参数在url中。 2、POST请求 第一种 前后端约定格式为字符串格式 $.ajax({ url:urls, type:"POST", data:args, responseType:'blob', success:function(res){ ...
  • 程序员:我终于知道postget的区别

    万次阅读 多人点赞 2019-11-14 00:03:09
    是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
  • 通过HTTP协议上传文本和二进制数据、支持POST方式、支持GET方式;
  • Rust使用 reqwest 发起 GET/POST 异步请求.pdf
  • vue前端调后台接口下载文件(get,post汇总)
  • 1.GET方式,通过原生js创建一个a标签,执行a标签的点击事件 let str = url+params; //url为接口地址,params为参数 let aLink = document.createElement('a') aLink.style.display = 'none' aLink.href = url ...
  • 纯C语言写的https客户端,支持http及https的模拟GETPOST提交, 最大优势在于不依赖其他任何库(比如openssl库),并且支持window,linux等多平台,因此getpost效率较高,可移植性很好。 本次上传的是vc6下的完整...
  • JS发送GET/POST请求下载文件

    千次阅读 2019-11-18 10:42:07
    在日常的开发过程中,前端向后端发送请求基本上都是通过异步的方式,无论是JQuery的ajax还是各个前端框架封装的异步方式,但是最近在页面做一个下载excel的功能的时候,发现异步请求会导致写入响应头的文件流会...
  • 提到文件下载 就有getpost两种,其中get很简单。直接调取接口, 然后window.open打开全路径即可实现下载。 const action = `/api/user-service${api}?${qs.stringify(params)}`; window.open(action, '_target'...
  • C++ 实现 HTTP HTTPS POST GET(包含curl版本和winhttp两种实现)。 玩过抓包,网络协议分析的朋友肯定都知道http https post get,web端和用户的交互主要是通过post get完成的。 我这里有两种实现: 1:libcurl实现的...
  • 文件导出的getpost方式

    千次阅读 2018-11-08 11:20:06
    get方式(3种写法): 1、window.open("**")是新窗口打开URL页面 2、location.href="**"是当前页面显示URL window.open(this.GLOBAL.API_Spm_result+ "completionday/batchId/...
  • get/post请求导出文件及各自的优缺点

    千次阅读 2020-10-09 16:52:32
    一、get请求导出文件 1、window.open(url) 会自动打开一个标签页,下载完后会自动关闭这个标签页。Safair 是否会自动关闭标签页有待验证。 2、window.location(url) 或 location.href = url 在当前标签页下载 3、<...
  • VFP VB多线程下载http https Post Get网络组件,内部封装了 HttpGet HttpPost HttpDown 带回调,显示进度。
  • 使用GET下载 方式:通过创建创建一个不可见的a标签,手动触发点击事件,然后下载,再移除标签。 download = url => { const eleLink = document.createElement('a'); eleLink.style.display = 'none'; // ...
  • 前端下载文件GETPOST方法)

    万次阅读 2018-03-07 17:34:33
    GET location.href = '/path/to/download/url' POST 本例使用axios库 axios.post('/path/to/download/url', this.searchParams, { responseType: 'blob' }).then(res =&gt; { let blob = res.data let...
  • GETPOST请求区别和编写GETPOST接口

    千次阅读 2022-01-07 10:19:53
    一、什么是get GET就是从某个地方获取一些数,获取的过程可以理解为一个...正是因为get 与 head 不会产生什么动作,意味着getpost 的 HTTP 请求不会在服务器上产生任何结果。但是安全方法并不是什么动作都不会产生
  • PostGet请求测试工具

    2019-03-12 08:51:22
    PostGet请求测试工具,文档中有详细的使用说明!
  • getpost请求区别

    千次阅读 2022-04-24 23:48:29
    get传参需要URI编码方式(ASCLL码),如果传参非ASCLL码可以js中encodeURI对参数进行转化,post对编码方式无限制 http协议并未对传参大小作限制,浏览器从性能方面考虑往往限制了大小 ,get请求的urlIE为2kb ...
  • 1. get 请求不需要定义请求接口,只需要拼接url生成链接文件即可 data中定义导出url: exportUrl :`${process.env.NODE_ENV === 'development' ? '...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 804,127
精华内容 321,650
关键字:

下载文件用get还是post

友情链接: AddIEButton.rar