前后端分离项目 前端上传文件到后端被拒绝

提示如下错误

Access to XMLHttpRequest at ‘http://localhost:8082/admin/login‘ from origin ‘htt

在vue项目当中已经设置了相关的跨域文件,但是还是不行,这里直接在后端接口设置一下就可以进行文件的上传了

 /* 
   @author SisyphusTang
   @since 2023-03-18
 */
    @PostMapping("/import")
    //允许跨域 value当中为跨域的值(前端端口)
@CrossOrigin(value="http://localhost:8081")
    public Boolean imp(MultipartFile file) throws Exception {
    //some methods here...    
}
### 前后端分离微服务中的文件上传实现方案 在前后端分离的微服务架构中,文件上传通常涉及多个组件之间的协作。以下是具体的实现方式: #### 1. **前端发起请求** 前端通过 HTTP 请求向后端发送一个获取签名的请求。此过程可以封装在一个 API 中,用于生成临时的安全令牌或签名[^1]。 ```javascript // 获取 OSS 签名的示例代码 async function getOssSignature() { const response = await fetch('/api/get-signature', { method: 'POST' }); const data = await response.json(); return data.signature; } ``` #### 2. **后端生成签名** 后端接收到前端的请求后,会调用对象存储服务(如阿里云 OSS 或 AWS S3)的相关接口,生成一个带有时间戳和权限控制的签名,并返回给前端。 ```java // Java 示例:生成 OSS 签名并返回 @PostMapping("/get-signature") public ResponseEntity<SignatureResponse> generateSignature(@RequestBody SignatureRequest request) { String policy = createPolicy(request); String signature = sign(policy); // 使用私钥签名 return new ResponseEntity<>(new SignatureResponse(signature), HttpStatus.OK); } ``` #### 3. **前端直接上传至 OSS** 前端拿到签名后,可以直接与对象存储服务交互,无需再次经过后端代理。这种方式减少了服务器的压力,同时也提高了性能。 ```javascript // 使用签名上传文件到 OSS 的示例代码 async function uploadFileToOSS(file, signature) { const formData = new FormData(); formData.append('key', file.name); formData.append('policy', signature.policy); formData.append('signature', signature.value); formData.append('file', file); const response = await fetch('https://your-bucket.oss-cn-hangzhou.aliyuncs.com/', { method: 'POST', body: formData, }); if (response.ok) { console.log('Upload successful'); } else { console.error('Upload failed'); } } ``` #### 4. **安全性考虑** 为了确保文件上传的安全性,在前后端分离的架构下需要注意以下几点: - **签名的有效期**:设置合理的有效期,避免长期有效的签名被滥用。 - **权限控制**:仅允许特定路径下的文件写入操作,防止恶意覆盖其他资源。 - **身份验证**:结合 JWT 或 Session 进行用户身份验证,确保只有合法用户能够获得签名[^3]。 --- #### 5. **登录状态校验** 对于需要登录才能上传文件的情况,可以通过后端的过滤器或拦截器检查用户的登录状态。如果未登录,则拒绝提供签名[^2]。 ```java // Spring Boot 登录状态校验示例 @Component public class AuthenticationFilter implements Filter { @Override public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) res; String token = request.getHeader("Authorization"); if (!isValidToken(token)) { response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Invalid Token"); return; } chain.doFilter(req, res); } private boolean isValidToken(String token) { // 验证逻辑 return !StringUtils.isEmpty(token) && JwtUtil.verify(token); } } ``` --- #### 总结 上述流程展示了如何在前后端分离的微服务架构中实现文件上传功能。核心在于利用后端生成的签名让前端直连对象存储服务,从而减少中间环节带来的开销。同时,还需要注意安全性和权限管理方面的细节[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值