上传头像,访问本地图片

文件大坑:

web项目:首先不能直接访问本地资源,只能够访问服务器上的资源。

所以我想就储存数据到服务器,但是这样有个问题就是,当重新启动程序时,服务器上的所有文件会被重新编译,导致之前的文件都会不见,相当于不见了

此时我试过很多方法:

1.修改tomcat的service配置文件

没有起作用,感觉前端并不会直接访问到地址

2.修改浏览器访问权限,允许访问本地资源

并没有实现,谷歌浏览器加的指令也不能实现直接访问本地资源

3.储存到项目目录上,

这样修改,可以在服务器重启时,能够得到更换的照片。(但是并不能直接更新)

4.还有就是之前的储存到项目服务器上

不能永久储存

最后解决方法

(一次文件同时储存到项目资源里,还有存储到服务器上面)

到了这最后一步还是有个坑

因为你要写两个文件,同时使用item进行write方法的话,不能保证你write是异步的,所以可能会导致文件写入不成功。

最后实现的代码

String accessToken = request.getHeader("Authorization");
        if (accessToken == null) {
            response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
            return;
        }

        String filePath = null;
        String  uid;
        try {
             uid = TokenUtil.getUid(accessToken);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }


        DiskFileItemFactory factory = new DiskFileItemFactory();
        ServletFileUpload upload = new ServletFileUpload(factory);

        try {
            // 解析请求内容,得到请求的各个部分
            List<FileItem> items = upload.parseRequest(request);
            if (items.isEmpty()) {
                // 如果items为空,说明没有找到文件项
                response.getWriter().write("No files uploaded.");
                return;
            }

            // 遍历所有上传的文件项
            for (FileItem item : items) {
                // 检查是否是上传的文件项
                if (!item.isFormField()) {
                    String fileUploadPath = request.getServletContext().getRealPath("/uploads");
                    File uploadedFile = new File(fileUploadPath + "\\" + uid + "_avatar.jpg");
                    System.out.println("文件地址:" + uploadedFile.getAbsolutePath());
// 写入文件
                    item.write(uploadedFile);
                    //确保第一个文件先写完,再写第二个文件
                    File uploadedFile1 = new File("D:" + File.separator + "code" + File.separator + "idea" + File.separator + "csdn" + File.separator + "src" + File.separator + "main" + File.separator + "webapp" + File.separator + "uploads" + File.separator + uid + "_avatar.jpg");
                    System.out.println("文件地址+名称项目里:" + uploadedFile1.getAbsolutePath());

                    File parentDir = uploadedFile1.getParentFile();
                    if (!parentDir.exists()) {
                        parentDir.mkdirs();
                    }
                    Files.copy(uploadedFile.toPath(), uploadedFile1.toPath(), StandardCopyOption.REPLACE_EXISTING);


                }
            }
            // 响应客户端
            response.setContentType("text/html;charset=utf-8");
            Message message = new Message(uid+"_avatar.jpg", "上传成功", 200);
            ObjectMapper  mapper = new ObjectMapper();
            String s = mapper.writeValueAsString(message);
            response.getWriter().write(s);
        } catch (Exception e) {
            // 处理异常
            response.getWriter().write("Error uploading file: " + e.getMessage());
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值