为什么upload文件夹在tomcat下面不显示呢

为什么upload文件夹在tomcat下面不显示呢

分别在eclipse和tomcat文件夹下面创建过upload文件夹,比如在eclipse创建了,但是在tomcat下面存的时候没有upload文件夹,直接存在了webapps/shop/下面了。

http://img1.sycdn.imooc.com//climg/5d8c01ae09f4c86910580408.jpg

http://img1.sycdn.imooc.com//climg/5d8c01bc09bb796105720530.jpg

http://img1.sycdn.imooc.com//climg/5d8c01cc09da4b8d18240834.jpg

正在回答

登陆购买课程后可参与讨论,去登陆

6回答

同学你好。这是因为Windows和mac系统的分隔符不同导致的。mac系统分割符是“/”解析路径“upload\xx.jpg”会被解析为一个文件名,而不是在upload下的路径。

java中有获取当前系统分割符的方法,可以得到一个String对象,建议将url替换一遍后在再输出:  

String seperator = System.getProperty("file.separator");
url = url.replace("/",seperator);
OutputStream os = new FileOutputStream(url);

 如果解答了同学的疑问,望采纳~

祝学习愉快~

提问者 Angche 2019-09-29 16:07:26
  • 提问者 Angche #1
    按照方法操作后还是没变化,为什么System.out.println("adadad");没有任何输出呢。这块代码没有执行么,不执行应该不会在对应的目录下有图片呀。
    2019-09-29 16:09:16
  • 芝芝兰兰 回复 提问者 Angche #2
    同学你好。请将这里修改为:url = path+"/"+uuidFileName; 试一下~另外,System.out.println("adadad");估计并不是没有输出,而是被c3p0的日志给“顶上去”了呢~祝学习愉快~
    2019-09-29 17:07:10
提问者 Angche 2019-09-29 07:28:42
提问者 Angche 2019-09-29 07:25:50

package com.imooc.utils;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.io.UnsupportedEncodingException;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import java.util.UUID;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.fileupload.FileItem;

import org.apache.commons.fileupload.FileUploadException;

import org.apache.commons.fileupload.disk.DiskFileItemFactory;

import org.apache.commons.fileupload.servlet.ServletFileUpload;

/**

 * 文件上传的工具类

 * 

 */

public class UploadUtils {

/**

* 生成唯一的文件名:

*/

public static String getUUIDFileName(String fileName){

// 将文件名的前面部分进行截取:xx.jpg   --->   .jpg

int idx = fileName.lastIndexOf(".");

String extention = fileName.substring(idx);

String uuidFileName = UUID.randomUUID().toString().replace("-", "")+extention;

return uuidFileName;

}

public static Map uploadFile(HttpServletRequest request) throws IOException {

Map<String,String> map = new HashMap<String,String>();

// 1.创建一个磁盘文件项工厂对象

DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();

// 2.创建一个核心解析类

ServletFileUpload servletFileUpload = new ServletFileUpload(diskFileItemFactory);

// 3.解析request请求,返回的是List集合,List集合中存放的是FileItem对象

String url = null;

String uuidFileName= null;

try {

List<FileItem> list = servletFileUpload.parseRequest(request);

for (FileItem fileItem : list) {

if(fileItem.isFormField()){

// 不是文件上传

// 接收表单项参数的值:

String name = fileItem.getFieldName(); // 获得表单项的name属性的值

String value = fileItem.getString("UTF-8");// 获得表单项的值

// 存入集合

map.put(name, value);

}else{

// 文件上传

// 文件上传项:

// 文件上传功能:

// 获得文件上传的名称:

String fileName = fileItem.getName();

System.out.println("filename="+fileName);

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

// 通过工具类获得唯一文件名:

uuidFileName = UploadUtils.getUUIDFileName(fileName);

// 获得文件上传的数据:

InputStream is = fileItem.getInputStream();

// 获得文件上传的路径:

String path = request.getServletContext().getRealPath("/upload");

// 将输入流对接到输出流就可以了:

url = path+"\\"+uuidFileName;

OutputStream os = new FileOutputStream(url);

int len = 0;

byte[] b = new byte[1024];

while((len = is.read(b))!=-1){

os.write(b, 0, len);

}

is.close();

os.close();

map.put("path", request.getContextPath()+"/upload/"+uuidFileName);

map.put("filename", fileName);

}

System.out.println(map);

}

}

} catch (FileUploadException e) {

e.printStackTrace();

}

return map;

}

public static void main(String[] args) {

System.out.println(getUUIDFileName("1.jpg"));

}

}



好帮手慕柯南 2019-09-27 11:03:07

同学是指图片没有存在指定的目录下面吗?老师这里是可以的,同学保存时的路径是通过以下方式获取的吗?

http://img1.sycdn.imooc.com//climg/5d8d7b92091fd3f609090115.jpg

如果是:建议同学贴一下自己上传的代码,老师看一下。注意:在我要回答中贴出。

如果我的回答解决了你的疑惑,请采纳,祝学习愉快~

好帮手慕柯南 2019-09-26 10:54:02

同学你好!

  1. eclipse的项目会部署到tomcat的webapp目录下面

  2. 同学的upload文件夹是在项目中创建的,经过项目的部署,最终在了webapps/shop/下面,是正确的没有什么问题呢。

  3. 另外同学自己在tomcat下面创建项目中要用的目录是没有用的哦~

如果我的回答解决你的疑惑,请采纳,祝学习愉快~

  • 提问者 Angche #1
    我在eclipse里面创建的upload文件夹,重新部署以后会在tomcat的webapp目录创建一个upload文件夹,但是保存图片里面没往这个里面写入。而是直接存在upload同级目录了。
    2019-09-27 07:53:54
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师