热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

请教下后端Java大佬

最近小弟在家自学 java,刚刚自己搭建了一个 Maven 的 javaweb 项目,刚刚写了几个接口,遇到了一些问题,希望大家能指导下我,提前感谢~~问题 list:1.文件上传一般是放在什么地方呢

最近小弟在家自学 java,刚刚自己搭建了一个 Maven 的 javaweb 项目,刚刚写了几个接口,遇到了一些问题,希望大家能指导下我,提前感谢~~



问题 list:

1.文件上传一般是放在什么地方呢?我现在是写了个 properties,里面配置了绝对路径,但是网上有的说存到 WEB-INF 下的 upload 文件夹,我也试了一下,发现路径怎么写都不对,不知道应该怎么写?(我想这文件应该不必存储到项目下,但是还是想弄清楚怎么将文件写入 WEB-INF/upload 下)



2.在封装 json 的时候,上传 markdown 我将 markdown 实例写到了 json 的 data 里面,但是上传其他文件的时候我想起来一个问题,难道还要再封装一个 Bean 来描述文件信息吗? (之所以要存 markdown 信息是因为我想回显上传内容),不知道实际开发中大佬们怎么做的?

3.现在还是不太清楚 Servlet 和 service 中代码怎么写,总是写着写着发现 Servlet 全干完了,Dao 中代码倒比较清晰,但是 Servlet 和 service 区分模糊的很,希望大佬能解释下。

上传文件的代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
@WebServlet("/uploadFile/*")

public class UploadFile extends BaseServlet {

    private UploadFileService uploadFileService = new UploadFileServiceImpl();

    public void upload(HttpServletRequest request, HttpServletResponse response) {

        response.setContentType("application/json;charset=utf-8;");

        boolean isMultipart = ServletFileUpload.isMultipartContent(request);  //判断 enctype 属性是否是 multipart/form-data

        try {

            if (isMultipart) {

                FileItemFactory factory = new DiskFileItemFactory();  //工厂实例

                ServletFileUpload upload = new ServletFileUpload(factory);  //ServletFileUpload 实例依赖于 FileItemFactory 工厂

                List itemList = upload.parseRequest(request);  //解析表单字段,封装成一个 FileItem 实例的集合

                Iterator iterator = itemList.iterator();  //迭代器

                while (iterator.hasNext()) {

                    FileItem fileItem = iterator.next();  //依次解析每一个 FileItem 实例,即表单字段

                    if (!fileItem.isFormField()) {

                        //文件表单字段

                        String fileUpName = fileItem.getName();  //用户上传的文件名

                        Properties properties = new Properties();

                        properties.load(UploadFile.class.getClassLoader().getResourceAsStream("client.properties"));

                        String fileDir = properties.getProperty("fileDir");

                        //默认存到 WEB-INF 下的 upload 文件夹  (构建项目后存到 target 目录下)

                        String pathName = UploadFile.class.getClassLoader().getResource("").getPath().replace("classes", "upload");

                        if (fileDir != null && !("".equals(fileDir))) {

                            pathName = fileDir;

                        }

                        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");

                        String dirName = pathName+ File.separator + simpleDateFormat.format(new Date());

                        File rebornDir = new File(dirName);

                        if (!rebornDir.isDirectory()) {

                            rebornDir.getAbsolutePath();

                            rebornDir.mkdirs();        //不存在目录时创建目录

                        }

                        File file = new File(rebornDir + File.separator + fileUpName);  //保存的文件

                        System.out.println(file);

                        if (!file.exists()) {

                            file.getAbsolutePath();

                            file.createNewFile();    //创建文件

                        }

                        fileItem.write(file);  //写入,保存到目标文件

                        String prefix = fileUpName.substring(fileUpName.lastIndexOf(".") + 1);

                        //如果是 markdown 文件的话需要存到数据库里面,其他格式的文件存到文件夹里面就行

                        Markdown addResult = null;

                        if("md".equals(prefix)){

                            addResult = uploadFileService.uploadMarkdownFile(file, "ceshi", 2, file.getPath());

                        }else{

                            addResult = null;

                        }

                        ResultInfo resultInfo = new ResultInfo();

                        resultInfo.setSuccess(true);

                        resultInfo.setMessage("上传成功!");

                        resultInfo.setData(addResult);

                        writeValue(response, resultInfo);

                    }

                }

            }

        } catch (Exception e) {

            e.printStackTrace();

            System.out.println("文件上传出现异常");

            ResultInfo resultInfo = new ResultInfo();

            resultInfo.setSuccess(false);

            resultInfo.setMessage("上传失败!");

            resultInfo.setData(null);

            writeValue(response, resultInfo);

        }

    }

}

直接用 Spring 吧,你写的这些以后工作基本用不到,直接背一背知识点面试用就行了。


   



推荐阅读
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • JavaSE笔试题-接口、抽象类、多态等问题解答
    本文解答了JavaSE笔试题中关于接口、抽象类、多态等问题。包括Math类的取整数方法、接口是否可继承、抽象类是否可实现接口、抽象类是否可继承具体类、抽象类中是否可以有静态main方法等问题。同时介绍了面向对象的特征,以及Java中实现多态的机制。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • springmvc学习笔记(十):控制器业务方法中通过注解实现封装Javabean接收表单提交的数据
    本文介绍了在springmvc学习笔记系列的第十篇中,控制器的业务方法中如何通过注解实现封装Javabean来接收表单提交的数据。同时还讨论了当有多个注册表单且字段完全相同时,如何将其交给同一个控制器处理。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • 在springmvc框架中,前台ajax调用方法,对图片批量下载,如何弹出提示保存位置选框?Controller方法 ... [详细]
  • Imtryingtofigureoutawaytogeneratetorrentfilesfromabucket,usingtheAWSSDKforGo.我正 ... [详细]
  • 如何查询zone下的表的信息
    本文介绍了如何通过TcaplusDB知识库查询zone下的表的信息。包括请求地址、GET请求参数说明、返回参数说明等内容。通过curl方法发起请求,并提供了请求示例。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • Android系统源码分析Zygote和SystemServer启动过程详解
    本文详细解析了Android系统源码中Zygote和SystemServer的启动过程。首先介绍了系统framework层启动的内容,帮助理解四大组件的启动和管理过程。接着介绍了AMS、PMS等系统服务的作用和调用方式。然后详细分析了Zygote的启动过程,解释了Zygote在Android启动过程中的决定作用。最后通过时序图展示了整个过程。 ... [详细]
  • JavaWeb中读取文件资源的路径问题及解决方法
    在JavaWeb开发中,读取文件资源的路径是一个常见的问题。本文介绍了使用绝对路径和相对路径两种方法来解决这个问题,并给出了相应的代码示例。同时,还讨论了使用绝对路径的优缺点,以及如何正确使用相对路径来读取文件。通过本文的学习,读者可以掌握在JavaWeb中正确找到和读取文件资源的方法。 ... [详细]
  • 微信官方授权及获取OpenId的方法,服务器通过SpringBoot实现
    主要步骤:前端获取到code(wx.login),传入服务器服务器通过参数AppID和AppSecret访问官方接口,获取到OpenId ... [详细]
author-avatar
骨头少校_726
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有