【1·笔记】Java+Vue 从浏览器下载来自服务端的文件

【1·笔记】Java+Vue 从浏览器下载来自服务端的文件

问题背景

在这里插入图片描述

如图所示,浏览器和系统A属于内部系统范围,系统B为外部系统。需要通过接口去访问B中的指定文件,然后在浏览器端实现下载

遇到的问题

Q:使用的地址访问是可以出现下载的,但是在js中用ajax做请求时,返回的request headers都正常,但就是不出现下载;

A:Vue的request请求底层是Ajax实现的。Js的Ajax函数的返回类型只有xml、text、json、html等类型,没有“流”类型,所以我们要实现ajax下载,不能够使用相应的ajax函数进行文件下载。前台提交不要使用ajax提交,不要用$.post等提交,改用传统form表单提交或者location.href,即可解决。

A1:我这里采用的方法是浏览器端采用两次请求。

  第一次请求流程:浏览器向系统A发出下载请求,系统A利用**HttpClient**向系统B发出下载请求下载文件file,请求的结果就是在系统A中生成临时文件fileA & 将文件名filename返回给前端;

  第二次请求流程:浏览器根据第一次请求返回的文件名filename,然后将预先设置好的临时文件路径和filename进行拼接形成文件fileA在系统A中的绝对路径,浏览器根据此绝对路径请求该文件。(利用**window.location.href**);

对应的代码片段

pom.xml

    <dependency>
			<groupId>org.apache.httpcomponents</groupId>
			<artifactId>httpclient</artifactId>
			<version>4.5.3</version>
		</dependency>

前端代码:VUE + Element UI

/** UI **/
<el-button
  size="mini"
  type="text"
  icon="el-icon-download"
  @click="handleDownload"
  >下载文件</el-button>
  
/** 下载文件  JS**/
    handleDownload() {
   
      const queryParams = this.queryParams;
      this.$confirm('是否确认下载该文件?', "警告", {
   
          confirmButtonText: "确定",
          cancelButtonText: "取消",
          type: "warning"
        }).then(function() {
   
          return downloadFile(queryParams);
        }).then(response => {
   
          this.download(response.msg);
        }).catch(function() {
   });
    },
    
// 下载数据
export function downloadFile(query) {
   
  return request({
   
    url: '/report/biaogexf/download',
    method: 'get',
    params: query
  })
}

// 通用下载方法 这里的delete是为了当下载成功后,将服务器中的临时文件删除
export function download(fileName) {
   
	window.location.href = baseURL + "/common/download?fileName=" + encodeURI(fileName) + "&delete=" + true;
}

版本1: 从系统A本地先读取文件输出给Vue端(不涉及HttpClient)

    @GetMapping("download")
    
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我会根据您的要求回答您的问题,以下是从0到1塔建vite+vue3的ssr的服务端渲染的使用方法,不使用ts: 1. 首先,安装Vite和Vue3 ``` npm install -g vite npm install vue@next ``` 2. 创建项目并初始化 ``` mkdir my-ssr-app cd my-ssr-app npm init -y ``` 3. 安装依赖 ``` npm install vue-server-renderer express ``` 4. 创建服务端入口文件 在项目根目录下创建`server.js`文件,并添加以下内容: ```javascript const express = require('express') const { createRenderer } = require('vue-server-renderer') const { createApp } = require('./src/main') const app = express() // 静态资源目录 app.use(express.static('dist')) const renderer = createRenderer() app.get('*', async (req, res) => { const app = createApp() const html = await renderer.renderToString(app) res.end(` <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>SSR Vite Vue 3</title> </head> <body> <div id="app">${html}</div> <script src="/client.js"></script> </body> </html> `) }) app.listen(3000, () => { console.log('Server started at http://localhost:3000') }) ``` 5. 创建客户端入口文件 在项目根目录下创建`src/main.js`文件,并添加以下内容: ```javascript import { createApp } from 'vue' import App from './App.vue' export function createApp () { const app = createApp(App) return { app } } ``` 6. 配置Vite 在项目根目录下创建`vite.config.js`文件,并添加以下内容: ```javascript const { createVuePlugin } = require('vite-plugin-vue2') module.exports = { plugins: [ createVuePlugin() ], build: { ssrManifest: true, outDir: 'dist', rollupOptions: { input: 'src/entry-client.js', output: { format: 'esm', entryFileNames: '[name]-[hash].js' } } }, optimizeDeps: { include: [ 'vue', 'vue-router' ] } } ``` 7. 创建组件 在`src`文件夹下创建`App.vue`文件,并添加以下内容: ```vue <template> <div> <h1>{{ message }}</h1> </div> </template> <script> export default { data () { return { message: 'Hello World!' } } } </script> ``` 8. 运行项目 使用以下命令启动项目: ``` vite build && node server.js ``` 9. 查看效果 在浏览器中访问`http://localhost:3000`,即可看到页面渲染结果。 以上就是从0到1塔建vite+vue3的ssr的服务端渲染的使用方法,不使用ts的步骤。希望对您有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值