精华内容
下载资源
问答
  • JSONObject datatokenJson = new JSONObject();//data域 datatokenJson.put("gridFsId... // 获取header中文件名称 String fileName = "";int x=0; try { Header[] headers = response.getAllHeaders(); for(int i=0;i
           JSONObject datatokenJson = new JSONObject();//data域
           datatokenJson.put("gridFsId", "607f90ab0e72467a7bd1328b");
           String jsonStr = JSONObject.toJSONString(datatokenJson);                
            CloseableHttpClient httpClient = HttpClients.createDefault();
            HttpPost post = new HttpPost("http://192.168.28.130:8080/supportingPlatformTygn/unstructured/download/gridFsId");
            StringEntity postEntity = new StringEntity(jsonStr, "UTF-8");
            post.setEntity(postEntity);
            //设置消息头
            post.setHeader(new BasicHeader("Content-Type", "application/json"));
            post.setHeader(new BasicHeader("Accept", "application/json"));
            post.setHeader(new BasicHeader("apptoken", "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJqdGkiOiI1ODQ0NTIxYy0xZjA5LTRkODctODA0Mi0zMWI2ODc5YzQyY2MiLCJpYXQiOjE2MTc3ODM0MjgsImlzcyI6InVzZXIiLCJ1c2VySWQiOiI0MDI4ODMzMTc1NGEyYTc1MDE3NTRhYTZhYzY1MDAyNCJ9.RMZ59r9XFeUpRGQ48_bZlivnHFyOfj20zEG2KcDBOy0"));
            HttpResponse response = null;
            try {
                response = httpClient.execute(post);
                // 获取header中文件名称
                String fileName = "";int x=0;
                try {
                   Header[] headers = response.getAllHeaders();
                   for(int i=0;i<headers.length;i++) {
                           System.out.println(response.getAllHeaders()[i].getValue());                      
                           if(response.getAllHeaders()[i].getValue().indexOf("filename")!=-1) {
                                   x=i;
                           }
                   }
                   fileName = response.getAllHeaders()[x].getValue().split(";")[1].split("=")[1]; 
                   if (httpServletRequest.getHeader("User-Agent").toUpperCase().indexOf("MSIE") < 0){
                           fileName = new String(fileName.getBytes("ISO8859-1"),"GBK");
                           httpServletResponse.setHeader("Content-Disposition", "attachment; filename="+  fileName);
                   } else{
                           fileName = URLDecoder.decode(fileName, "UTF-8");
                           fileName = new String(fileName.getBytes("ISO8859-1"),"UTF-8");
                           httpServletResponse.setHeader("Content-Disposition", "attachment; filename="+ fileName);//IE浏览器
                   }
                   httpServletResponse.setContentType("application/octet-stream");
                   System.out.println(fileName);             
                } catch (Exception e) {
                }            
                 // 后去接口返回的文件流
                HttpEntity entity1 = response.getEntity();
                BufferedInputStream br = new BufferedInputStream(entity1.getContent());
                byte[] buf = new byte[1024];
                int len = 0;
                // 要写入本地的文件
    //            FileOutputStream fileOutputStream = new FileOutputStream("D:/WorkFile/xinchuang/" + fileName);
                OutputStream fileOutputStream = httpServletResponse.getOutputStream();
                while ((len = br.read(buf)) != -1) {
                    fileOutputStream.write(buf, 0, len);
                }
                fileOutputStream.close();
                br.close();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    httpClient.close();
    //                response.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
    
    展开全文
  • 最近有一个下载文件的需求,后端有数据时返回文件流,没有数据时返回json,前端抛出错误提示 下载接口请求设置为 responseType: ‘blob’,后端返回的json也被转成blob 解决办法: let param = { type:'20210608' }...

    最近有一个下载文件的需求,后端有数据时返回文件流,没有数据时返回json,前端抛出错误提示

    下载接口请求设置为 responseType: ‘blob’,后端返回的json也被转成blob
    解决办法:

    let param = {
    	type:'20210608'
    }
    downReport(param).then( async res => {
         if (res.data.type === 'application/json'){
               //Blob.text()返回一个promise且包含blob所有内容的UTF-8格式的     USVString。
               let text = await res.data.text();
               let jsonText = await JSON.parse(text)
               console.log(jsonText)
               this.$notify.error({title:'错误',message:jsonText.msg})
    
           }else{
              let type = res.headers['content-type']
    		  let disposition = res.headers['content-disposition']
    		  let fileName = disposition.split(';')[1].split('=')[1]
    		  let blob = new Blob([res.data],{
    		    type:type
    		  })
    		  if (window.navigator.msSaveOrOpenBlob) {
    		    navigator.msSaveBlob(blob, fileName)
    		  } else {
    		    var link = document.createElement('a')
    		    link.href = window.URL.createObjectURL(blob)
    		    link.download = fileName
    		    link.click()
    		    window.URL.revokeObjectURL(link.href)
    		  }
           }
       })
    
    展开全文
  • 文件编码gbk编码中文占用2个字节,英文占用1个字节utf-8编码中文占用3个字节,英文占用1个字节java双字节编码,一个字符占两个字节,它是utf-16be编码字符串字节转换 s.getBytes(“utf-8”);转化为utf-8第2章 File ...

    文件编码

    AAffA0nNPuCLAAAAAElFTkSuQmCC

    gbk编码中文占用2个字节,英文占用1个字节

    utf-8编码中文占用3个字节,英文占用1个字节

    java双字节编码,一个字符占两个字节,它是utf-16be编码

    字符串字节转换 s.getBytes(“utf-8”);转化为utf-8

    AAffA0nNPuCLAAAAAElFTkSuQmCC

    第2章 File 类的使用

    2-1 File 类常用 API 介绍

    java.io.file类 用于表示文件(目录)

    File 类只用于表示文件(目录)的信息(名称。大小等),不能用于文件内容的访问import java.io.File;引入File类

    //写文件路径已经要双斜杠

    File file = new File("E:\\javaio\\imooc");

    file.exists())//判断文件是否存在

    file.mkdir();//创建目录

    file.mkdirs()//创建多级目录

    file.delete();//删除目录

    //是否是一个目录 如果是目录返回true,如果不是目录or目录不存在返回的是false

    file.isDirectory()

    //是否是一个文件

    file.isFile()

    //创建文件,这里会抛出异常,所以需要捕获异常

    file2.createNewFile();

    System.out.println(file);//file.toString()的内容

    System.out.println(file.getAbsolutePath());

    System.out.println(file.getParent());//获取父级目录

    //获取父级目录完整路径

    System.out.println(file.getParentFile().getAbsolutePath());

    list() 列出当前目录的子目录和文件(返回字符串数组,直接子的名称,不报名子目录下的内容)

    file.listFiles()返回文件(目录)的抽象(对象)

    第3章 RandomAccessFile类的使用

    RandomAccessFile基本操作

    RandomAccessFile是java提供的对文件内容的访问,既可以读文件也可以写文件,支持随机访问文件,可以访问文件任意位置

    (1)java文件模型

    在硬盘上的文件是byte byte byte存储的,是数据的集合

    (2)打开文件

    有两种模式"rw"(读写) “r”(只读)

    RandomAccessFile raf = new RandomeAccessFile(file,“rw”)

    文件指针,打开文件时指针在开头 pointer = 0;

    (3) 写方法

    raf.write(int)—>只写一个字节(后8位),同时指针指向下一个位置,准备再次写入

    (4)读方法

    int b = raf.read()—>读一个字节

    (5)文件读写完成以后一定要关闭(Oracle官方说明)

    (6)//可以直接写一个int writeInt(i);

    (7)write(‘A’);//只写了一个字节

    (8)//读文件,必须把指针移到头部 seek(0);

    (9) 关闭文件 close();

    字节流之文件输入流FileInputStream

    IO流(输入流、输出流)

    字节流、字符流

    字节流

    1)InputStream、OutputStream

    InputStream抽象了应用程序读取数据的方式

    OutputStream抽象了应用程序写出数据的方式

    2)EOF = End 读到-1就读到结尾

    3)输入流基本方法

    int b = in.read();读取一个字节无符号填充到int低八位.-1是 EOF

    in.read(byte[] buf)

    in.read(byte[] buf,int start,int size)

    4)输出流基本方法

    out.write(int b) 写出一个byte到流,b的低8位

    out.write(byte[] buf)将buf字节数组都写入到流

    out.write(byte[] buf,int start,int size)

    5)FileInputStream—>具体实现了在文件上读取数据

    6)FileOutputStream 实现了向文件中写出byte数据的方法

    7)DataOutputStream/DataInputStream

    对"流"功能的扩展,可以更加方面的读取int,long,字符等类型数据

    DataOutputStream

    writeInt()/writeDouble()/writeUTF()

    8)BufferedInputStream&BufferedOutputStream

    这两个流类位IO提供了带缓冲区的操作,一般打开文件进行写入

    或读取操作时,都会加上缓冲,这种流模式提高了IO的性能

    从应用程序中把输入放入文件,相当于将一缸水倒入到另一个缸中:

    FileOutputStream—>write()方法相当于一滴一滴地把水“转移”过去

    DataOutputStream–>writeXxx()方法会方便一些,相当于一瓢一瓢把水“转移”过去

    BufferedOutputStream—>write方法更方便,相当于一飘一瓢先放入桶中,再从桶中倒入到另一个缸中,性能提高了

    9)文件读写流 FileReader/FileWriter

    10)序列化接口(Serializable)

    对象必须实现序列化接口 ,才能进行序列化,否则将出现异常

    这个接口,没有任何方法,只是一个标准

    11) transient关键字

    private void writeObject(java.io.ObjectOutputStream s)

    throws java.io.IOException

    private void readObject(java.io.ObjectInputStream s)

    throws java.io.IOException, ClassNotFoundException

    分析ArrayList源码中序列化和反序列化的问题

    12)序列化中 子类和父类构造函数的调用问题

    展开全文
  • 最近写接口,然后需要返回文件流接口如下: [System.Web.Http.HttpPost] public HttpResponseMessage GetFileFromWebApi(Params form) { try { string dbcode = form.dbcode; string sysid = form.sysid;

    最近写接口,然后需要返回文件流。
    接口如下:

     [System.Web.Http.HttpPost]
            public HttpResponseMessage GetFileFromWebApi(Params form)
            {
                try
                {
                    string dbcode = form.dbcode;
                    string sysid = form.sysid;
                    if (dbcode.Contains("_METADATA"))
                    {
                        dbcode = dbcode.Replace("_METADATA", string.Empty);
                    }
                    // 获取文件根路径
                    string filePath_fromDb = "";
                    DataTable filePath = commonService.SelectFilePath(dbcode);
                    if (filePath != null && filePath.Rows.Count > 0)
                    {
                        filePath_fromDb = filePath.Rows[0]["FILEPATH"].ToString();
                    }
                    else
                    {
                        return new HttpResponseMessage(HttpStatusCode.NotFound); ;
                    }
                    // 获取文件名字
                    string fileName = commonService.GetDigitFileNameByDbCodeAndSYSID(dbcode, sysid);
                    if (string.IsNullOrEmpty(fileName))
                    {
                        return new HttpResponseMessage(HttpStatusCode.NotFound);
                    }
    
                    // 通过名字获取dir
                    string dirName = commonService.GetDirByName(fileName);
    
                    string absPath = Path.Combine(filePath_fromDb, dbcode, "Pages", dirName, fileName);
                    if (!File.Exists(absPath))
                    {
                        return new HttpResponseMessage(HttpStatusCode.NotFound);
                    }
    
                    var FilePath = absPath; 
    
                    var fileStream = new FileStream(FilePath, FileMode.Open);
                    HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK);
                    response.Content = new StreamContent(fileStream);
                    response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
                    response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
                    {
                        FileName = HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8)
                    };
                    return response;
                }
                catch (Exception ex)
                {
                    LogOpr.Error(ex.Message);
                    return new HttpResponseMessage(HttpStatusCode.NoContent);
                }
            }
    

    在本地测试postman可以正确返回,但是发布在服务器上就不行了,然后日志记录错误是"对路径“XXXXXXXX.pdf”的访问被拒绝。"
    百度了说是这个文件夹没有权限,
    然后就针对这个文件夹,右键-属性-安全-编辑-添加-高级-立即查找-在结果中选择iis-iusers–确定-确定。就可以访问了。
    注意要选择完全控制,不然还是会报错。

    展开全文
  • 获取网络接口里面的文件流php开发调用各种接口在所难免,有时须要传递非常多參数。在传递參数过程中 ‘&‘ 有时会被 解析成 ‘&...參考案比例如以下:/*** 获取网络接口里面的文件流**/public function...
  • 图二exportExcel方法的第一个参数为接口返回的文档格式的数据,第二个参数是下载的文件的文件名 export function postExportData(params) { // 其中responseType的设置很重要 return get('/orderManagement/...
  • 文件下载@GetMapping(value = "/v1/files/**/{file_name:.+}")public void downFile(@PathVariable("file_name") String fileName, HttpServletResponse response, HttpServletRequest request) {// String uploa...
  • 最近实现前端文件流下载,走了好多弯路,坑坑洼洼的 好在爬出来了。 提到文件流下载 就有get和post两种,其中get很简单。直接调取接口, 然后window.open打开全路径即可实现下载。 const action = `/api/user-...
  • Postman如何保存接口返回的文件流

    千次阅读 2020-12-29 07:36:41
    但是发现直接用 Postman 调用接口后,返回的是二进制文件流最近在测试文件下载的接口,但是发现直接用 Postman 调用接口后,返回的是二进制文件流:那么 Postman 如何将接口返回的文件流下载下来呢?官方文档有说明...
  • 接口: axios({ url:api.path_3+'/getFile', method:'post', responseType:'blob' //注意这个一定要加 }) 接口返回数据处理: download().then((res)=>{ //res为返回的数据 letblob=newBlob([res],{typ.....
  • HttpResponse输出文件:Response.Clear();Response.ContentType = "application/octet-stream";//通知浏览器下载文件而不是打开Response.AddHeader("Content-Disposition", "attachment; filename=aaa.csv");var sw =...
  • 二是后台返回文件流,前端自己封装方法进行下载。 下面介绍vue中使用后台返回文件流,前端导出excel文件的方法 后台返回文件流: 前端vue中使用blob来操作: this.$http({ url: '/pod/vehicle/alarmEvent/...
  • 前端兼容处理接口返回的文件流或json数据
  • // 先把文件流地址转为blob类型 var request = new XMLHttpRequest(); request.open('GET', url, true); request.responseType = 'blob'; request.onload = function(res) { // 把blob转为File类型 const file = ...
  • 客户端将文件转换为发送:依赖的包:org.apache.httpcomponentshttpclient4.4org.apache.httpcomponentshttpmime4.4import com.alibaba.fastjson.JSONObject;import java.io.*;import java.net.HttpURLConnection;...
  • 1.需要生命axios的responseType: 'blob'格式 (设置相应数据的类型,设置后后台返回的数据会被强制转为blob类型;如果后台返回代表失败的data,前端也无法得知,依然会下载得到名为undefined的文件。) ...
  • vue 调用接口下载java后端生成的excel文件流 需求是点击导出(下载)excel文件 分析: 下载可借用a标签的下载功能,将后端返回的文件流处理后,动态生成a标签模拟点击操作完成下载操作 首先创建axios请求 import ...
  • 接口请求类型 (1)get请求,可以直接使用window.open的方式 window.open(url); (2)post请求, 'application/x-www-form-urlencoded',使用下面的方法或xhr原生 function exportData(api, params, encode) { var...
  • java后台返回文件流下载文件

    千次阅读 2021-02-12 16:27:10
    System.out.println("==========getFileOutputStream=========文件路径:"+path); File file = new File(path); //1、建立连接 BufferedInputStream is = null; byte[] b = new byte[4096]; int len = 1024; // ...
  • 1.接口请求: 注意:responseType:’blob’要加上,这样就会返回Blob对象 let params = { id: 1, name: '李四' } this.$axios.post('/xxxx', params, { responseType: 'arraybuffer' }).then(res => { if (res...
  • HttpClient 除了能传输xml , json ,form数据以外还可以传输pdf,doc,excel等文件流。1.先创建http工具类(CloseableHttpClient)(1)二进制流不知道下载类型时可以用application/octet-stream(2)若是pdf可以换成...
  • 项目环境:1、前端用PHP2、接口后端用.net问题:后端的一个图处上传接口是用二进制流接受...只能重新封装一个小方法来传送了:/*** @desc 发送文件流* @param string $url* @param binary $file* @return string*/f...
  • 1/** 2 * 调用流程上传文件接口上传文件 3 * @param url 4 * @param path 5 * @return 6 */7publicstaticStringsendPostUplodFile(Stringurl,Stringpath){8DataOutputStreamout=null;9BufferedReade...
  • java 后台返回文件流到浏览器

    千次阅读 2021-02-28 10:44:51
    } @ApiOperation(value = "返回指定地址的文件流1") @ApiImplicitParams({ @ApiImplicitParam(name = "url", value = "图片地址", required = true, paramType = "query", defaultValue = "\\20180912\\7cd2e1a3-...
  • 业务场景:当我点击一个按钮时,调用第三方接口,后台返回一个字节,然后浏览器弹出文件另存为的弹窗,直接保存。 但是在实际操作当中,浏览器拿到返回的字节是不能解析的,下载的文件也是一个乱码文件,所以我决定...
  • 刚开始遇到这个问题一直在找前端代码的问题,什么responsetype改了又改,blob对象接收二进制文件流看了又看,明明网上说的办法就那几点关键处,下载下来就是不行!!!!! 好,最后终于找到罪魁祸首了:mock!!!...
  • axios({url: '下载接口URL',method: 'post',baseURL:process.env.VUE_APP_BASE_API,params:params,headers:{'token':getToken()}data: {},responseType: 'blob'}).then... {// data就是接口返回的文件流let data = ...
  • 接口直接返回数据 或是 base64 格式数据、这类数据就需要用的 blob 对象和 URL.createObjectURL() 来手动生成url了,然后再通过模拟点击事件来进行下载。 二、具体操作code(主要是第二种方法) 1、blob 数据需要...
  • 这里的第三方上传文件接口,是指,对方要求的参数类型是File; 还有其他一下字符串的参数; 主要是参看了其他的文章,简单汇总一下;看完你就比较清晰了; 第三方接口接受文件的时候,基本是与页面上传的是一致的; 也就是说,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 620,008
精华内容 248,003
关键字:

文件流接口