精华内容
下载资源
问答
  • 文件流接口和下载

    2019-09-11 16:29:28
    java文件流接口 package com.rainmanqqst.controller.filestream; import com.Ostermiller.util.Base64; import org.slf4j.Logger; import org.slf4j.Logger...

    java文件流接口

    package com.rainmanqqst.controller.filestream;
    
    import com.Ostermiller.util.Base64;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import javax.servlet.ServletOutputStream;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.*;
    
    /**
     * @author RAINMANQQST
     * @date 2019-07-15 14:52
     * @description
     */
    @RestController
    @RequestMapping("/fille")
    public class FileController {
    
        private static Logger logger = LoggerFactory.getLogger(FileController.class);
    
        /**
         * 将直接资源请求接口地址转为文件流接口
         * filePath为base64加密的文件地址
         * @param filePath
         * @param request
         * @param response
         */
        @RequestMapping(value="/resource/{filePath}")
        public void achieveResource(@PathVariable("filePath") String filePath, HttpServletRequest request, HttpServletResponse response){
            try {
                String path = Base64.decode(filePath);
                logger.info("resource path is "+path);
    
                File file = new File(filePath);
                logger.info("fileName : "+file.getName());
    
                response.setHeader("Content-disposition", "attachment; filename="+file.getName());
                response.setContentType("application/octet-stream;charset=UTF-8");
                response.setHeader("Content-Length",file.length()+"");
    
                InputStream inputStream = new FileInputStream(file);
                ServletOutputStream servletOutputStream = response.getOutputStream();
                int len = 0;
                byte[] buffer = new byte[1024];
                while((len=inputStream.read(buffer))>0){
                    servletOutputStream.write(buffer, 0, len);
                }
                servletOutputStream.flush();
                inputStream.close();
                servletOutputStream.close();
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
    
    }
    

    JS下载代码

    <html>
    <head>
        <%--<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">--%>
        <script type="text/javascript">
            function exportFile() {    // name=文件名, blob=文件二进制对象
                //  获取时间戳
                var timestamp=new Date().getTime();
                // 获取XMLHttpRequest
                var xmlResquest = new XMLHttpRequest();
                //  发起请求
                xmlResquest.open("POST", "http://localhost:8086/rainmanqqst/api/system/resource/aHR0cHM6Ly9pbWcxLmRvdWJhbmlvLmNvbS92aWV3L3Bob3RvL2wvcHVibGljL3AxNDIyMDcxNjA4LndlYnA=", true);
                // 设置请求头类型
                xmlResquest.setRequestHeader("Content-type", "application/json");
                //  设置请求token
                //xmlResquest.setRequestHeader(
                //    "Authorization",
                //    Vue.cookie.get('token')
                //);
                xmlResquest.responseType = "blob";
                //  返回
                xmlResquest.onload = function(oEvent) {
                    var content = xmlResquest.response;
                    alert(content);
                    // 组装a标签
                    var elink = document.createElement("a");
                    // 设置下载文件名
                    elink.download = timestamp + ".png";
                    elink.style.display = "none";
                    var blob = new Blob([content]);
                    elink.href = URL.createObjectURL(blob);
                    document.body.appendChild(elink);
                    elink.click();
                    document.body.removeChild(elink);
                };
                xmlResquest.send();
            }
    
    
        </script>
    </head>
    
    <body>
    <input onclick="javascript:exportFile()" type="button" value="test" >
    </body>
    </html>
    

     

    转载于:https://my.oschina.net/u/241670/blog/3077436

    展开全文
  • 文件流接口调用示例

    2019-03-14 19:39:48
    文件接口调用 @Autowired private RestTemplate restTemplate; // picturePath 文件所在路径 File files = new File(picturePath); // File[] fielArray = files.listFiles(); // 随机数,模拟用户随机上传文件 ...

    文件类接口调用

    @Autowired
    private RestTemplate restTemplate;
    
    //  picturePath 文件所在路径
    File files = new File(picturePath);
    // 
    File[] fielArray = files.listFiles();
    // 随机数,模拟用户随机上传文件
    int a = RandomUtils.nextInt(0, (int) fielArray.length);
    //  logger.info(fielArray[a].getName() + "文件开始上传");
    FileSystemResource resource = new FileSystemResource(fielArray[a]);
    MultiValueMap<String, Object> param = new LinkedMultiValueMap<>();
    // files 这个值需要与所调用接口里的参数值保持一致
    param.add("files", resource);
    // serverUrl 调用接口地址
    Object object = restTemplate.postForObject(serverUrl, param, Object.class);
    // logger.info(fielArray[a].getName() + "文件上传结束");
    
    展开全文
  • 好久未更新,最近的go项目需要后端提供下载excel的二进制文件流,写完前端调用时出现跨域请求错误问题,就此记录一下错误和解决方式以及部分代码 一、问题暴露 二、问题解决 我的问题是:接口请求拦截未返回...

    好久未更新,最近的go项目需要后端提供下载excel的二进制文件流,写完前端调用时出现跨域请求错误问题,就此记录一下错误和解决方式以及部分代码

    一、问题暴露

    二、问题解决

    我的问题是:接口请求拦截未返回json数据的接口没有放开

    //把不返回json数据的router路径添加到此处
    var Fileter = []string{
    	"/admin/v1/orders_down",
    }
    func CommonReturn(c *gin.Context) {
    	c.Next()
    	Uri := c.Request.URL.Path
    	if ok := utils.IsExistString(Uri, Fileter); ok {
    		return
    	}
    	if c.Writer.Status() == 404 {
    		c.Abort()
    		return
    	}
    	data := ctl.GetData(c)
    	if len(data.Msg) == 0 {
    		ctl.GetErrMsg(data, data.Ret)
    	}
    	//统一返回数据
    	c.JSON(200, data)
    }
    
    var originMap map[string]int
    
    func init() {
    	var url = conf.GetString("originUrl")
    	originMap = map[string]int{
    		"maniujk-app":  1,
    		"mgmt" + url:   1,
    		"agent" + url:  1,
    		"member" + url: 1,
    		"vfqq" + url:   1,
    	}
    }
    
    func Core() gin.HandlerFunc {
    	return func(c *gin.Context) {
    		method := c.Request.Method
    		c.Header("Access-Control-Allow-Origin", "*")
    		c.Header("Access-Control-Allow-Headers", "Content-Type,AccessToken,X-CSRF-Token, Authorization, Token,Tgt")
    		//c.Header("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, PATCH, DELETE")
    		c.Header("Access-Control-Allow-Methods", "POST, GET")
    		c.Header("Access-Control-Expose-Headers", "Content-Length, Access-Control-Allow-Origin, Access-Control-Allow-Headers, Content-Type")
    		c.Header("Access-Control-Allow-Credentials", "true")
    
    		// 放行所有OPTIONS方法,因为有的模板是要请求两次的
    		if method == "OPTIONS" {
    			c.AbortWithStatus(http.StatusNoContent)
    		}
    		// 处理请求
    		c.Next()
    	}
    }

    ps:还有一种可能性参考

    /*
    		下方这种方式应对处理 这种bug:http: wrote more than the declared Content-Length
    	*/
    	//extraHeaders := map[string]string{
    	//	"Content-Disposition": fmt.Sprintf(`attachment; filename="%s"`, "保险箱"),
    	//}
    	//c.DataFromReader(http.StatusOK, int64(contentLength), "application/xlsx", excel, extraHeaders)

    三、相关代码

    excel生成公共方法,可放在util工具类中

    // DataToExcel 数据导出excel,titleList为表头数组 dataList里面的对象为指针
    func DataToExcel(titleList []string, dataList []interface{}) *bytes.Reader {
    	// 生成一个新的文件
    	file := xlsx.NewFile()
    	// 添加sheet页
    	sheet, _ := file.AddSheet("Sheet1")
    	// 插入表头
    	titleRow := sheet.AddRow()
    	for _, v := range titleList {
    		cell := titleRow.AddCell()
    		cell.Value = v
    		cell.GetStyle().Font.Color = "00FF0000"
    	}
    	// 插入内容
    	for _, v := range dataList {
    		row := sheet.AddRow()
    		row.WriteStruct(v, -1)
    	}
    
    	var buffer bytes.Buffer
    	_ = file.Write(&buffer)
    	content := bytes.NewReader(buffer.Bytes())
    	//返回一个二进制文件流
    	return content
    }

    controller调用

    func DownExcel(c *gin.Context)  {
    	data := ctl.NewSetData(c)
    	orderList := m_order.OrderList{}
    	err := c.ShouldBindJSON(&orderList)
    	if err != nil {
    		data.Ret = ctl.ErrorArgs
    		return
    	}
    	titleList := []string{"会员ID", "会员有效期", "开通时间", "上次登录时间"}
    	var dataList []interface{}
    	for _,v:=range orderList.OrderList{
    		dataList = append(dataList,v)
    	}
    	//返回excel 二进制文件流
    	excel := utils.DataToExcel(titleList, dataList)
    
    	var fileName ="文件名称"
    	fileName = fmt.Sprintf("%s.xlsx", fileName)
    
    	c.Writer.Header().Add("Content-Disposition", fmt.Sprintf(`attachment; filename="%s"`, fileName))
    	c.Writer.Header().Add("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
    
    	http.ServeContent(c.Writer, c.Request, fileName, time.Now(), excel)
    	return
    }
    

    db中需要接收数据

    // 运营查看的数据
    type ProStatus struct {
    	UserId        string `json:"user_id" xorm:"comment('用户id') VARCHAR(128)"`
    	PackageName   string `json:"package_name" xorm:"comment('套餐名') VARCHAR(128)"`
    	CreatedTime   int64  `json:"created_time" xorm:"comment('创建时间')"`
    	LastLoginTime int64  `json:"last_login_time"`
    }
    
    //用于接收前端导入excel 数据
    type OrderList struct {
    	OrderList []*ProStatus `json:"order_list"`
    }

     

    展开全文
  • GET方式: func_export(){ let url = "/xxx/xxx/xxx/downloadFile?fileName=" + fname;...注意事项:POST方式的下载,使用axios会导致数据损坏,下载到的文件会发生错误,所以使用原生的XHR来处理

    GET方式:

    func_export(){
          let url = "/xxx/xxx/xxx/downloadFile?fileName=" + fname;
          window.open(encodeURI(url));
        }

    POST 方式:

    func_export(){
          let params = {
              "userId":sessionStorage.getItem('userid'),
              "cardfalg":this.selState.length>0?this.selState[0].label:"",
              "create_starttime":this.beginTime==""?"":this.beginTime.replace(/-/g,''),
              "create_endtime":this.endTime==""?"":this.endTime.replace(/-/g,'')
          }
          console.log(params)
          let xhr = new XMLHttpRequest();
          xhr.open('POST', '/sisp/cardInfoService/statistic/exportUserDevice', true); 
          xhr.setRequestHeader('content-type', 'application/json');  
          xhr.responseType = "blob";    // 返回类型blob
          // 定义请求完成的处理函数,请求前也可以增加加载框/禁用下载按钮逻辑
          xhr.onload = function () {
            // 请求完成
              let blob = this.response;
              let fileName = '数据分析';
              fileName += ".xlsx";
              if (window.navigator.msSaveOrOpenBlob) {
                  navigator.msSaveBlob(blob, fileName);
              } else {
                  let link = document.createElement('a');
                  link.href = window.URL.createObjectURL(blob);
                  link.download = fileName;
                  // 兼容火狐浏览器,a标签需在dom上
                  let ff = document.getElementById('firefox');
                  ff.appendChild(link);
                  link.click();
                  ff.removeChild(link);
                  window.URL.revokeObjectURL(link.href);
              }
          };
          xhr.send(JSON.stringify(params));
        }

    注意事项:POST方式的下载,使用axios会导致数据损坏,下载到的文件会发生错误,所以使用原生的XHR来处理

    展开全文
  • 文件流指针重定向软硬链接文件系统 基础IO 回忆c语言的文件操作接口 fopen FILE *fopen(const char *path, const char *mode);   path:带路径的文件名称(待打开的文件)   mode:     r:以可读方式打开,...
  • 获取网络接口里面的文件流php开发调用各种接口在所难免,有时需要传递很多参数。在传递参数过程中 '&' 有时会被 解析成 ‘&’导致请求失败经过查找...参考案例如下: /** * 获取网络接口里面的文件流 **/ pu...
  • 文件流接口传输实现

    千次阅读 2020-04-14 14:19:55
    这是定义的Rest接口: @POST @Path("/{plateId}/preview") @Produces(MediaType.APPLICATION_OCTET_STREAM) @Consumes(javax.ws.rs.core.MediaType.APPLICATION_JSON) void getReactionSetupPreview(@PathParam(...
  • 后端接口返回的文件流: 定义: 此为https.js文件 // Excel文件下载 export function getExcelDownload(url, params) { return request({ url: url, params, headers: { 'Content-Type': 'application/json; ...
  • 但是发现直接用 Postman 调用接口后,返回的是二进制文件流最近在测试文件下载的接口,但是发现直接用 Postman 调用接口后,返回的是二进制文件流:那么 Postman 如何将接口返回的文件流下载下来呢?官方文档有说明...
  • } /** * POST Multipart Request * * @param requestUrl 请求url * @param requestText 请求参数 * @param requestFile 请求上传的文件 * @return * @throws Exception * @Description: */ public static String ...
  • 将一个大文件通过上传的接口,按行分割后进行上传 (这里用的文件是csv文件。其它文件的话,可以先转成csv文件;tqdm可以显示上传进度) # 分段上传数据 @func_time def upload_stream(stream_id, file): upload_...
  • $fileName = '1.txt'; $url = "接口地址"; $ret = self::fileCurl($url,'get',['fileName'=>... //将文件绑定到 fwrite($fp,$ret); //写入文件 public function fileCurl($url,$method,$data) { $ch = curl_init
  • 获取网络接口里面的文件流 php开发调用各种接口在所难免,有时须要传递非常多參数。 在传递參数过程中 '&' 有时会被 解析成 ‘&amp;’导致请求失败 经过查找资料和比較,发现php提供了多种方法:cUrl、...
  • 目标:1 掌握序列化和反序列化2 掌握装饰器模式3 掌握IO的使用4 掌握IOUtils和 FileUtils工具类的使用5 掌握线程初步知识1. 对象(1) 为什么需要序列...只有实现了Serializable接口的类的对象才可以被序列化。Ser...
  • 读取器会按照这样的协议来读取:文件头是一个字符串列表,而记录集是一个字符串列表的列表。读取器接受一个java.io.Reader对象用为读取来源。 先从读取文件头开始。读取文件头的算法如下: - 打开资源准备读取。 - ...
  • //得到网络的输入 InputStreamReader isr = new InputStreamReader(is, "utf-8");//编码格式 BufferedReader br = new BufferedReader(isr);//存入Buffer缓冲区 String str = null; StringBuffer buffer = new ...
  • Java后台从第三方接口读取文件流存为本地文件 简述: 业务需求,从第三方提供的接口获取文件流,保存为本地文件。 第三方接口部分代码如下: response.reset(); response.setContentType("application/octet-...
  • 项目是vue+axios+elementUI,以下载压缩包(.zip)为例子: 首先是html代码 导出案卷包 其次是js代码 最后是api/ipr/cases/baseInfo中...charset=UTF-8' }, responseType: 'blob', // 文件流格式 params: data // 参数 }) }
  • JS原生接口请求文件流

    千次阅读 2018-04-18 14:47:14
    问题:ajax请求文件流被自动转成文本格式导致解析错误;使用场景:文件预览,图片上传预览,操作blob对象断点传续等; var url = "xxx"; var xhr = new XMLHttpRequest(); xhr.open('GET', url, true);...
  • 关于下载在页面直接写url地址也是可以下载的, ...但后端接口有的时候要求传给我们前端的是文件流格式,前端处理方式如下  that.$http({  method:"get",  url:api.exportContrac...
  • Feign接口获取文件流问题

    千次阅读 2019-06-21 15:50:55
    文件下载 @GetMapping(value = "/v1/files/**/{file_name:.+}") public void downFile(@PathVariable("file_name") String fileName, HttpServletResponse response, HttpServletRequest request) { // Str...
  • 导致前端JS处理时获取不到文件流。 代码截图: <img alt="image" src="https://user-images.githubusercontent.com/9291379/71141526-5ad6aa80-224f-11ea-846e-4cdcc6bfdb49.png" /></p> 客户端问题: ...
  • 通过接口我获取到一个文件流 ![图片说明](https://img-ask.csdn.net/upload/202007/06/1594002897_26502.png) ![图片说明](https://img-ask.csdn.net/upload/202007/06/1594002910_926818.png) 然后使用...
  • 现在调用验证码接口会显示一堆乱码,查找资料可得那个是二进制文件流,不能把验证码地址写死就只能更改接口调用方式了 先util.js里封装一个文件流方法:(我把它叫做abAction,寓意ArrayBufferAction,可以自己随便...
  • 向后台请求文件 返回的是这种文件流 首先修改参数 responseType: ‘blob... // res就是接口返回的文件流了 let objectUrl = URL.createObjectURL(blob); let imgUrl = objectUrl; 这个imgUrl就是图片的路径了 ...
  • vue下载文件实例 定义资源下载接口 @PostMapping(resource) public void downloadRes(HttpServletResponse response, @RequestBody String json) { JSONObject param = JSONObject.parseObject(json); download...
  • 接口返回一段 文件流 后,希望前端直接下载该文件。 实现 例如,拿下载 excel 文件为例。 // 获取时间戳 let timestamp=new Date().getTime(); // 获取XMLHttpRequest let xmlResquest = new XMLHttpRequest(); ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,308
精华内容 3,323
关键字:

文件流接口