文件上传转存的工具类uploadUtil工具类写法

上传文件功能:
如果用上传文件功能:JSP页面的写法
1,必须有一个form表单
2,必须有一个input框 type="file"
3,必须修改form表单的提交方式为post
4,必须修改form表单的enctype类型改为:
5,原有的request.getParameter()方法全部失效
<form action="/testdemo/upload" method="post" enctype="multipart/form-data">
		姓名:<input type="text" name="username"><br><br>
		头像:<input type="file" name="avatar" ><br><br>
		<input type="submit" value="提交按钮">
	</form>
使用apache提供fileupload的工具包
1,创建磁盘工厂
2,使用文件工厂创建输入流 文件上传转换对象
3,使用文件上传对象的parse方法解析请求中的数据流
4,在解析出来之后 返回一个list集合 集合中装有解析好的 fileItem
5,遍历fileItem集合,
fileItem提供了一些方法
//提供了API获取参数的名字
//获取当前文件项是否是普通输入框类型
//获取当前文件项值

//获取当前文件项如果是文件项 获取文件流

request.setCharacterEncoding("utf8");
		//新建一个磁盘工厂
		DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
		//使用文件磁盘工厂创建上传文件对象
		FileUpload fileUpload=new FileUpload((FileItemFactory) diskFileItemFactory);
		//使用文件上传对象的parse方法去解析请求数据流
		try {
			List<FileItem> list = fileUpload.parseRequest(request);
			for (FileItem fileItem : list) {
				if (fileItem.isFormField()) {
					//如果输入的流是普通输入流
					String fileName = fileItem.getFieldName();
					String value = fileItem.getString("UTF-8");
					System.out.println("输入的参数名是:"+fileName+"=====参数的值为:"+value);
				}else {
					//是文件上传类型
					String name =fileItem.getName();
					InputStream input = fileItem.getInputStream();
					FileOutputStream output = new FileOutputStream("E:/ccc/"+UUIDUtil.getId()+name.substring(name.indexOf(".")));
					//使用IOUtils复制文件
					IOUtils.copy(input, output);
					output.close();
					input.close();	
				}
			}	
		} catch (FileUploadException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			System.out.println("系统错误");
		}
上传文件的问题:
1,文件同名覆盖的问题
随机生成文件名
2,一个文件夹下 小文件太多的问题
分割文件夹
3,不同浏览器对于文件名路径保留问题

截取字符串 不要前面的磁盘路径

为了长久解决以上问题,就创建了一个工具类来完成以上问题的封装


import java.util.Random;
import java.util.UUID;

public class UploadUtils {
	/**
	 * 获取文件真实名称
	 * 由于浏览器的不同获取的名称可能为:c:/upload/1.jpg或者1.jpg ---123aas.jpg
	 * 最终获取的为  1.jpg
	 * @param name 上传上来的文件名称
	 * @return	真实名称
	 */
	public static String getRealName(String name){
		//获取最后一个"/"
		int index = name.lastIndexOf("\\");
		return name.substring(index+1);
	}
	/**
	 * 获取随机名称
	 * @param realName 真实名称
	 * @return uuid 随机名称
	 */
	public static String getUUIDName(String realName){
		//realname  可能是  1.jpg   也可能是  1
		//获取后缀名
		int index = realName.lastIndexOf(".");
		if(index==-1){
			return UUID.randomUUID().toString().replace("-", "").toUpperCase();
		}else{
			return UUID.randomUUID().toString().replace("-", "").toUpperCase()+realName.substring(index);
		}
	}
	/**
	 * 获取文件目录,可以获取256个随机目录
	 * @return 随机目录
	 */
	public static String getDir(){
		String s="0123456789ABCDEF";
		Random r = new Random();
		return "/"+s.charAt(r.nextInt(16))+"/"+s.charAt(r.nextInt(16));
	}
	
	public static void main(String[] args) {
		//String s="G:\\day17-基础加强\\resource\\1.jpg";
		/*String s="1.jgp";
		String realName = getRealName(s);
		System.out.println(realName);
		
		String uuidName = getUUIDName(realName);
		System.out.println(uuidName);*/
		
		String dir = getDir();
		System.out.println(dir);
	}
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你好!很高兴为你解答问题。以下是使用Java实现上传文件至服务器的代码示例: ``` import java.io.File; import java.io.IOException; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.httpclient.NameValuePair; import org.apache.commons.httpclient.methods.FileRequestEntity; import org.apache.commons.httpclient.methods.PostMethod; public class UploadUtil { /** * 上传文件至服务器 * @param file 需要上传的文件 * @param url 服务器接收文件的地址 * @return 返回上传是否成功的标记 */ public static boolean uploadFile(File file, String url) { boolean success = false; PostMethod postMethod = new PostMethod(url); HttpClient client = new HttpClient(); try { FileRequestEntity fileRequestEntity = new FileRequestEntity(file,"application/octet-stream"); postMethod.setRequestEntity(fileRequestEntity); int statusCode = client.executeMethod(postMethod); if (statusCode == HttpStatus.SC_OK) { success = true; System.out.println("上传成功!"); } } catch (IOException e) { e.printStackTrace(); } finally { postMethod.releaseConnection(); } return success; } /** * 示例 * @param args */ public static void main(String[] args) { File file = new File("/Users/test/test.txt"); // 需要上传到服务器的文件路径 String url = "http://localhost:8080/test/upload"; // 服务器接收文件的地址 uploadFile(file,url); // 上传文件至服务器 } } ``` 希望能够帮助到你!如果有任何问题,欢迎继续向我提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值