java大佬_请教下后端 Java 大佬

最近小弟在家自学 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 区分模糊的很,希望大佬能解释下。

上传文件的代码如下:

@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);

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值