判断文件流方式获取图片格式

package com.learn.servlet;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

import com.learn.util.file.FileType;

@WebServlet("/load/UploadServlet")
public class UploadServlet extends HttpServlet {

	/**
	 * 文件上传
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) {
		String root = request.getServletContext().getRealPath("/upload");
		DiskFileItemFactory factory = new DiskFileItemFactory();
		ServletFileUpload upload = new ServletFileUpload(factory);
		try {
			List<FileItem> list = upload.parseRequest(request);
			for (FileItem it : list) {
				// 如果是file文件类型
				if (!it.isFormField()) {
					// FileType fileType = getFileType(it.getInputStream());
					// if (fileType == null) {
					// // 非图片格式
					// response.getWriter().write("fail");
					// return;
					// }
//					String imgValue = fileType.getValue();
//					System.out.println("imgValue:" + imgValue);
					// 是图片格式
					it.write(new File(root + "/" + it.getName()));
					response.getWriter().write("success");

				}
			}
		} catch (Exception e) {
			try {
				response.getWriter().write("exception");
			} catch (IOException e1) {
				e1.printStackTrace();
			}
			e.printStackTrace();
		}
	}

	// 判断文件是图片格式
	public static FileType getFileType(InputStream is) throws IOException {
		byte[] src = new byte[28];
		is.read(src, 0, 28);
		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).toUpperCase();
			if (hv.length() < 2) {
				stringBuilder.append(0);
			}
			stringBuilder.append(hv);
		}
		FileType[] fileTypes = FileType.values();
		for (FileType fileType : fileTypes) {
			if (stringBuilder.toString().startsWith(fileType.getValue())) {
				return fileType;
			}
		}
		return null;
	}

}
package com.learn.util.file;

public enum FileType {

	/**
	 * JPEG
	 */
	JPEG("FFD8FF", "jpg"),

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

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

	/**
	 * 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"),

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

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

	/**
	 * doc;xls;dot;ppt;xla;ppa;pps;pot;msi;sdw;db
	 */
	OLE2("0xD0CF11E0A1B11AE1"),

	/**
	 * Microsoft Word/Excel
	 */
	XLS_DOC("D0CF11E0"),

	/**
	 * Microsoft Access
	 */
	MDB("5374616E64617264204A"),

	/**
	 * Word Perfect
	 */
	WPB("FF575043"),

	/**
	 * Postscript
	 */
	EPS_PS("252150532D41646F6265"),

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

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

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

	/**
	 * ARAR Archive
	 */
	RAR("52617221"),

	/**
	 * WAVE
	 */
	WAV("57415645"),

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

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

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

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

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

	/**
	 * MIDI
	 */
	MID("4D546864");

	private String value = "";
	private String ext = "";

	FileType(String value) {
		this.value = value;
	}

	FileType(String value, String ext) {
		this(value);
		this.ext = ext;
	}

	public String getExt() {
		return ext;
	}

	public String getValue() {
		return value;
	}

}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要读取复杂的图片、文本、表格混合的 doc 文件,需要使用 Apache POI 库。 下面是一个 Java 代码示例,演示如何读取复杂的 doc 文件: ```java import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import org.apache.poi.hwpf.HWPFDocument; import org.apache.poi.hwpf.usermodel.CharacterRun; import org.apache.poi.hwpf.usermodel.Paragraph; import org.apache.poi.hwpf.usermodel.Picture; import org.apache.poi.hwpf.usermodel.PictureType; import org.apache.poi.hwpf.usermodel.Range; import org.apache.poi.hwpf.usermodel.Table; import org.apache.poi.hwpf.usermodel.TableCell; import org.apache.poi.hwpf.usermodel.TableRow; public class ReadComplexDoc { public static void main(String[] args) throws IOException { InputStream inputStream = new FileInputStream("example.doc"); HWPFDocument doc = new HWPFDocument(inputStream); // 遍历文档中的段落 Range range = doc.getRange(); for (int p = 0; p < range.numParagraphs(); p++) { Paragraph para = range.getParagraph(p); String text = para.text(); // 处理段落文本 // ... // 遍历段落中的字符 for (int c = 0; c < para.numCharacterRuns(); c++) { CharacterRun run = para.getCharacterRun(c); // 判断字符是否包含图片 if (run.getPicOffset() > 0) { Picture pic = run.getPicRef(); PictureType picType = pic.suggestPictureType(); byte[] picData = pic.getContent(); // 处理图片数据 // ... } } } // 遍历文档中的表格 for (int t = 0; t < range.numTables(); t++) { Table table = range.getTable(t); for (int r = 0; r < table.numRows(); r++) { TableRow row = table.getRow(r); for (int c = 0; c < row.numCells(); c++) { TableCell cell = row.getCell(c); // 处理单元格中的内容 // ... } } } // 关闭 doc.close(); inputStream.close(); } } ``` 这个代码示例使用 `HWPFDocument` 类从 doc 文件中读取文档内容,然后遍历文档中的段落和表格,获取文本和表格内容。对于段落中的图片判断字符是否包含图片,如果包含,则获取图片类型和数据。你可以在代码中添加自己的处理逻辑。 需要注意的是,这种方式只能读取 doc 格式文件,如果你要读取 docx 格式文件,需要使用另外一个库,比如 Apache POI OOXML。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值