java上传文件以流方式判断类型

29 篇文章 5 订阅
package com.omg.utils;
 
/**
 * 文件类型枚取
 */
public enum FileType {
	/**
	 * JEPG.
	 */
	JPEG("FFD8FF"),

	/**
	 * PNG.
	 */
	PNG("89504E47"),

	/**
	 * GIF.
	 */
	GIF("47494638"),

	/**
	 * TIFF.
	 */
	TIFF("49492A00"),

	/**
	 * Windows Bitmap.
	 */
	BMP("424D"),

	/**
	 * CAD.
	 */
	DWG("41433130"),

	/**
	 * Adobe Photoshop.
	 */
	PSD("38425053"),

	/**
	 * Rich Text Format.
	 */
	RTF("7B5C727466"),

	/**
	 * XML.
	 */
	XML("3C3F786D6C"),

	/**
	 * HTML.
	 */
	HTML("68746D6C3E"),
	/**
	 * CSS.
	 */
	CSS("48544D4C207B0D0A0942"),
	/**
	 * JS.
	 */
    JS("696B2E71623D696B2E71"),
	/**
	 * Email [thorough only].
	 */
	EML("44656C69766572792D646174653A"),

	/**
	 * Outlook Express.
	 */
	DBX("CFAD12FEC5FD746F"),

	/**
	 * Outlook (pst).
	 */
	PST("2142444E"),

	/**
	 * MS Word/Excel.
	 */
	XLS_DOC("D0CF11E0"), XLSX_DOCX("504B030414000600080000002100"),
	/**
	 * Visio
	 */
	VSD("d0cf11e0a1b11ae10000"),
	/**
	 * MS Access.
	 */
	MDB("5374616E64617264204A"),
	/**
	 * WPS文字wps、表格et、演示dps都是一样的
	 */
	WPS("d0cf11e0a1b11ae10000"),
	/**
	 * torrent
	 */
	TORRENT("6431303A637265617465"),
	/**
	 * WordPerfect.
	 */
	WPD("FF575043"),

	/**
	 * Postscript.
	 */
	EPS("252150532D41646F6265"),

	/**
	 * Adobe Acrobat.
	 */
	PDF("255044462D312E"),

	/**
	 * Quicken.
	 */
	QDF("AC9EBD8F"),

	/**
	 * Windows Password.
	 */
	PWL("E3828596"),

	/**
	 * ZIP Archive.
	 */
	ZIP("504B0304"),

	/**
	 * RAR Archive.
	 */
	RAR("52617221"),
	/**
	 * JSP Archive.
	 */
	JSP("3C2540207061676520"),
	/**
	 * JAVA Archive.
	 */
	JAVA("7061636B61676520"),
	/**
	 * CLASS Archive.
	 */
	CLASS("CAFEBABE0000002E00"),
	/**
	 * JAR Archive.
	 */
	JAR("504B03040A000000"),
	/**
	 * MF Archive.
	 */
	MF("4D616E69666573742D56"),
	/**
	 *EXE Archive.
	 */
	EXE("4D5A9000030000000400"),
	/**
	 *CHM Archive.
	 */
	CHM("49545346030000006000"),
	/*
	 * INI("235468697320636F6E66"), SQL("494E5345525420494E54"), BAT(
	 * "406563686F206f66660D"), GZ("1F8B0800000000000000"), PROPERTIES(
	 * "6C6F67346A2E726F6F74"), MXP(
	 * "04000000010000001300"),
	 */
	/**
	 * Wave.
	 */
	WAV("57415645"),

	/**
	 * AVI.
	 */
	AVI("41564920"),

	/**
	 * Real Audio.
	 */
	RAM("2E7261FD"),

	/**
	 * Real Media.
	 */
	RM("2E524D46"),

	/**
	 * MPEG (mpg).
	 */
	MPG("000001BA"),

	/**
	 * Quicktime.
	 */
	MOV("6D6F6F76"),

	/**
	 * Windows Media.
	 */
	ASF("3026B2758E66CF11"),

	/**
	 * MIDI.
	 */
	MID("4D546864"),
	/**
	 * MP4.
	 */
	MP4("00000020667479706d70"),
	/**
	 * MP3.
	 */
	MP3("49443303000000002176"),
	/**
	 * FLV.
	 */
	FLV("464C5601050000000900");
	private String value = "";

	/**
	 * Constructor.
	 * 
	 * @param type
	 */
	private FileType(String value) {
		this.value = value;
	}

	public String getValue() {
		return value;
	}

	public void setValue(String value) {
		this.value = value;
	}

}



package com.omg.utils;

import java.io.IOException;
import java.io.InputStream;

/**
 * 文件类型判断类
 */
public final class FileTypeJudge {

	/**
	 * Constructor
	 */
	private FileTypeJudge() {
	}

	/**
	 * 将文件头转换成16进制字符串
	 * 
	 * @param 原生byte
	 * @return 16进制字符串
	 */
	private static String bytesToHexString(byte[] src) {

		StringBuilder stringBuilder = new StringBuilder();
		if (src == null || src.length <= 0) {
			return null;
		}
		for (int i = 0; i < src.length; i++) {
			int v = src[i] & 0xFF;
			String hv = Integer.toHexString(v);
			if (hv.length() < 2) {
				stringBuilder.append(0);
			}
			stringBuilder.append(hv);
		}
		return stringBuilder.toString();
	}

	/**
	 * 得到文件头
	 * 
	 * @param filePath
	 *            文件路径
	 * @return 文件头
	 * @throws IOException
	 */
	private static String getFileContent(InputStream is) throws IOException {

		byte[] b = new byte[28];

		InputStream inputStream = null;

		try {
			is.read(b, 0, 28);
		} catch (IOException e) {
			e.printStackTrace();
			throw e;
		} finally {
			if (inputStream != null) {
				try {
					inputStream.close();
				} catch (IOException e) {
					e.printStackTrace();
					throw e;
				}
			}
		}
		return bytesToHexString(b);
	}

	/**
	 * 判断文件类型
	 * 
	 * @param filePath
	 *            文件路径
	 * @return 文件类型
	 */
	public static FileType getType(InputStream is) throws IOException {

		String fileHead = getFileContent(is);

		if (fileHead == null || fileHead.length() == 0) {
			return null;
		}

		fileHead = fileHead.toUpperCase();

		FileType[] fileTypes = FileType.values();

		for (FileType type : fileTypes) {
			if (fileHead.startsWith(type.getValue())) {
				return type;
			}
		}

		return null;
	}

	public static Integer isFileType(FileType value) {
		Integer type = 7;// 其他
		// 图片
		FileType[] pics = { FileType.JPEG, FileType.PNG, FileType.GIF, FileType.TIFF, FileType.BMP, FileType.DWG, FileType.PSD };

		FileType[] docs = { FileType.RTF, FileType.XML, FileType.HTML, FileType.CSS, FileType.JS, FileType.EML, FileType.DBX, FileType.PST, FileType.XLS_DOC, FileType.XLSX_DOCX, FileType.VSD,
				FileType.MDB, FileType.WPS, FileType.WPD, FileType.EPS, FileType.PDF, FileType.QDF, FileType.PWL, FileType.ZIP, FileType.RAR, FileType.JSP, FileType.JAVA, FileType.CLASS,
				FileType.JAR, FileType.MF, FileType.EXE, FileType.CHM };

		FileType[] videos = { FileType.AVI, FileType.RAM, FileType.RM, FileType.MPG, FileType.MOV, FileType.ASF, FileType.MP4, FileType.FLV, FileType.MID };

		FileType[] tottents = { FileType.TORRENT };

		FileType[] audios = { FileType.WAV, FileType.MP3 };

		FileType[] others = {};

		// 图片
		for (FileType fileType : pics) {
			if (fileType.equals(value)) {
				type = 1;
			}
		}
		// 文档
		for (FileType fileType : docs) {
			if (fileType.equals(value)) {
				type = 2;
			}
		}
		// 视频
		for (FileType fileType : videos) {
			if (fileType.equals(value)) {
				type = 3;
			}
		}
		// 种子
		for (FileType fileType : tottents) {
			if (fileType.equals(value)) {
				type = 4;
			}
		}
		// 音乐
		for (FileType fileType : audios) {
			if (fileType.equals(value)) {
				type = 5;
			}
		}
		return type;
	}

	public static void main(String args[]) throws Exception {
		// System.out.println(FileTypeJudge.getType(new FileInputStream("")));
		for (FileType type : FileType.values()) {
			System.out.print(type + "\t");
		}
	}
}

原文出自:http://www.cnblogs.com/rainsilence/archive/2012/06/06/2538294.html

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!以下是一个简单的Java文件流上传接口的实现示例: ```java import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; @RestController public class FileUploadController { @PostMapping("/upload") public String uploadFile(@RequestParam("file") MultipartFile file) { if (file.isEmpty()) { return "Please select a file to upload."; } try { // 获取文件输入流 InputStream inputStream = file.getInputStream(); // 指定上传的目录路径 String uploadDir = "/path/to/upload/dir/"; // 创建目标文件的完整路径 String filePath = uploadDir + file.getOriginalFilename(); // 创建目标文件 File targetFile = new File(filePath); // 创建文件输出流 FileOutputStream outputStream = new FileOutputStream(targetFile); // 将输入流中的数据写入到输出流中 byte[] buffer = new byte[1024]; int bytesRead; while ((bytesRead = inputStream.read(buffer)) != -1) { outputStream.write(buffer, 0, bytesRead); } // 关闭流 inputStream.close(); outputStream.close(); return "File uploaded successfully!"; } catch (IOException e) { e.printStackTrace(); return "Failed to upload file."; } } } ``` 上述代码使用Spring Boot框架实现了一个文件上传接口。在该接口中,通过`@PostMapping("/upload")`注解指定了上传文件的URL路径为`/upload`。接口方法中使用`@RequestParam("file")`注解来绑定上传的文件。 在方法体内,首先判断文件是否为空,然后获取文件输入流。接着指定上传的目录路径,并创建目标文件的完整路径。然后创建目标文件和文件输出流,并将输入流中的数据写入到输出流中。最后关闭流。 请注意,您需要根据实际情况修改上传目录的路径以及处理异常的方式。 希望以上代码能帮助到您!如有任何疑问,请随时提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值