用下图方式,把 文件流转成字节数组之后,用MultipartEntityBuilder传到接口,接口
处如何接收文件数据,request.getParameter("filedata")接收是null,哪位接触过这种
文件上传的方法或者有其他好的上传文件数据的方法,求指点
试试看contenttype用下面代替
ContentType.create("text/plain", Charset.forName(this.charset))
参考:http://blog.csdn.net/zhouzme/article/details/18940279
不需要再将文件流转成字节。直接对文件流就可以处理
接口在接到请求的时候
@RequestMapping("/upload")
public void uploadFile(HttpServletRequest request){
List<String> filePaths = new ArrayList<>();
MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
List<MultipartFile> files = multiRequest.getFiles("file");
for (MultipartFile file : files) {
String ora = file.getOriginalFilename();
String filePath = "D:\\upload\\" + ora;
FileUtil.createDir(dir + dirName);
file.transferTo(new File(filePath));
filePaths.add(filePath);
}
}
文件在上传的时候参数名我这面用的是 multiRequest.getFiles("file");
你把file换成你的参数名就可以了。
这是我现在使用的后台接收文件的接口
filePaths是一个String数组,时服务器保存的图片路径
<%@ page language="java" pageEncoding="UTF-8"%>
<!DOCTYPE HTML>
1、使用注解@MultipartConfig将一个Servlet标识为支持文件上传。
2、Servlet3.0将multipart/form-data的POST请求封装成Part,通过Part对上传的文件进行操作。
package me.gacl.web.controller;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Collection;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
//使用@WebServlet配置UploadServlet的访问路径
@WebServlet(name="UploadServlet",urlPatterns="/UploadServlet")
//使用注解@MultipartConfig将一个Servlet标识为支持文件上传
@MultipartConfig//标识Servlet支持文件上传
public class UploadServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
//存储路径
String savePath = request.getServletContext().getRealPath("/WEB-INF/uploadFile");
//获取上传的文件集合
Collection<Part> parts = request.getParts();
//上传单个文件
if (parts.size()==1) {
//Servlet3.0将multipart/form-data的POST请求封装成Part,通过Part对上传的文件进行操作。
//Part part = parts[0];//从上传的文件集合中获取Part对象
Part part = request.getPart("file");//通过表单file控件(<input type="file" name="file">)的名字直接获取Part对象
//Servlet3没有提供直接获取文件名的方法,需要从请求头中解析出来
//获取请求头,请求头的格式:form-data; name="file"; filename="snmp4j--api.zip"
String header = part.getHeader("content-disposition");
//获取文件名
String fileName = getFileName(header);
//把文件写到指定路径
part.write(savePath+File.separator+fileName);
}else {
//一次性上传多个文件
for (Part part : parts) {//循环处理上传的文件
//获取请求头,请求头的格式:form-data; name="file"; filename="snmp4j--api.zip"
String header = part.getHeader("content-disposition");
//获取文件名
String fileName = getFileName(header);
//把文件写到指定路径
part.write(savePath+File.separator+fileName);
}
}
PrintWriter out = response.getWriter();
out.println("上传成功");
out.flush();
out.close();
}
/**
* 根据请求头解析出文件名
* 请求头的格式:火狐和google浏览器下:form-data; name="file"; filename="snmp4j--api.zip"
* IE浏览器下:form-data; name="file"; filename="E:\snmp4j--api.zip"
* @param header 请求头
* @return 文件名
*/
public String getFileName(String header) {
/**
* String[] tempArr1 = header.split(";");代码执行完之后,在不同的浏览器下,tempArr1数组里面的内容稍有区别
* 火狐或者google浏览器下:tempArr1={form-data,name="file",filename="snmp4j--api.zip"}
* IE浏览器下:tempArr1={form-data,name="file",filename="E:\snmp4j--api.zip"}
*/
String[] tempArr1 = header.split(";");
/**
*火狐或者google浏览器下:tempArr2={filename,"snmp4j--api.zip"}
*IE浏览器下:tempArr2={filename,"E:\snmp4j--api.zip"}
*/
String[] tempArr2 = tempArr1[2].split("=");
//获取文件名,兼容各种浏览器的写法
String fileName = tempArr2[1].substring(tempArr2[1].lastIndexOf("\\")+1).replaceAll("\"", "");
return fileName;
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}
}
import java.io.File;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.sql.Connection;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.servlet.ServletException;
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.FileUploadException;
import org.apache.commons.fileupload.ProgressListener;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.FilenameUtils;
import com.taxi.Constant;
import com.taxi.jdbc.dao.HelpDao;
import com.taxi.jdbc.dao.base.UploadDao;
import com.taxi.jdbc.dao.bean.UpLoadBean;
import com.taxi.jdbc.dao.imp.UploadDaoImp;
import com.taxi.util.Commend;
/**
资源上传
*/
@WebServlet(name = "Upload", urlPatterns = "/Upload")
public class ResourceUpload extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
response.reset();// 清空输出流
response.setContentType("text/html");
response.setCharacterEncoding(Commend.UTF8);
System.out.println("开始上传");
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if (!isMultipart) {
throw new RuntimeException("your form is not multipart/form-data");
}
Connection conn = null;
try {
conn = HelpDao.getInstance().getConnection();
UploadDao uploadDB = new UploadDaoImp(conn);
String root_path = "E:/resource";
// 设置文件大小位置等等
DiskFileItemFactory diskfactory = new DiskFileItemFactory();
// 指定临时文件的存储目录
// diskfactory.setRepository(new File("path"));
// 核心类处理上传逻辑
ServletFileUpload fileUpload = new ServletFileUpload(diskfactory);
// 解决表单乱码
fileUpload.setHeaderEncoding("utf-8");
// 进度条
fileUpload.setProgressListener(new ProgressListener() {
@Override
public void update(long pBytesRead, long pContentLength,
int pItems) {
if (pContentLength == -1) {
System.out.println("文件错误");
} else {
float percent = (float) (pBytesRead * 1.0
/ pContentLength * 100);
int percents = (int) percent;
System.out.println("已完成: " + percents + "%");
}
}
});
// fileUpload.setFileSizeMax(1024*1024*3); //单个文件不能超过3M
// fileUpload.setSizeMax(1024*1024*6);//总上传文件不能超过6M
List<FileItem> listItem = fileUpload.parseRequest(request);
StringBuffer uuid_sb = new StringBuffer();
for (FileItem item : listItem) {
if (item.isFormField()) {
// 普通文本input
processFormField(item);
} else {
// 文件上传
if (item.getName() != null && !item.getName().equals("")) {
// 扩展名
String separator = FilenameUtils.getExtension(item.getName());
String directory = root_path + File.separator + separator;
String absolutePath = processFileUpload(item, directory);
String uuid =uploadDB.insert(absolutePath,(int)item.getSize());
uuid_sb.append(uuid);
uuid_sb.append(",");
} else {
System.out.println("没有提交文件");
}
}
}
String result =uuid_sb.toString().substring(0, uuid_sb.length()-1);
response.getWriter().write(result);
} catch (FileUploadException e) {
e.printStackTrace();
response.sendError(500);
} catch (SQLException e1) {
e1.printStackTrace();
response.sendError(500);
} catch (Exception e2){
e2.printStackTrace();
response.sendError(500);
}finally {
HelpDao.getInstance().closeConn(conn);
}
}
// 普通input
private void processFormField(FileItem item) {
try {
System.out.println("普通文件" + item.getFieldName() + " "
+ item.getString("utf-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
// 上传文件
private String processFileUpload(FileItem item, String path)
throws Exception {
String filename = item.getName();
System.out.println("上传的文件名" + filename);
if (filename != null) {
filename = FilenameUtils.getName(filename);
}
// 解决重名问题
filename = Constant.sdf.format(new Date()) + "_" + filename;
File dirctoryFile = new File(path);
// 按照日期进行打算存储目录
File newFileDir = makeChildDirectory(dirctoryFile);
if (!newFileDir.exists()) {
newFileDir.mkdirs();
}
// 用文件名的hashCode计算打散的存储目录:二级目录
// File newFileDir = makeChildDirctory(dirctoryFile,filename);
File file = new File(newFileDir, filename);
// file.createNewFile();
item.write(file);
// 删除临时文件
item.delete();
return file.getAbsolutePath();
}
/**
* 按照日期打散目录
*
* @param storeDirectroy
* @return
*/
private File makeChildDirectory(File storeDirectroy) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String dateDir = sdf.format(new Date());
File file = new File(storeDirectroy, dateDir);
if (!file.exists()) {
file.mkdirs();
}
return file;
}
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
https://www.suancaiyu.xyz/read/2463.html
参考。
头部"multipart/form-data"这个要被指定,才可以
public static boolean upload(File file, String uri) {
try {
URL upDataPhoto = new URL(uri);
HttpURLConnection http = (HttpURLConnection) upDataPhoto.openConnection();
String BOUNDARY = "---------7d4a6d158c9"; // 定义数据分隔线
//上传图片的一些参数设置
http.setDoOutput(true);
http.setUseCaches(true);
http.setRequestProperty("Accept", "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, application/x-quickviewplus, /");
http.setRequestProperty("Accept-Language", "zh-cn");
http.setRequestMethod("POST");
http.setRequestProperty("Accept-Encoding", "gzip, deflate");
http.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");
http.setRequestProperty("Connection", "Keep-Alive");
http.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY);
OutputStream out = new DataOutputStream(http.getOutputStream());
byte[] end_data = ("\r\n--" + BOUNDARY + "--\r\n").getBytes();// 定义最后数据分隔线
// int leng = list.size();
// for (int i = 0; i < leng; i++) {
// String fname = list.get(i);
// File file = new File(fname);
StringBuilder sb = new StringBuilder();
sb.append("--");
sb.append(BOUNDARY);
sb.append("\r\n");
sb.append("Content-Disposition: form-data;name=\"file" + "\";filename=\"" + file.getName() + "\"\r\n");
// sb.append("Content-Disposition: form-data;userId=\"" + IQClassGlobalManager.cloudUserInfo.studentId+ "\";filename=\"" + file.getName() + "\"\r\n");
sb.append("Content-Type:image/*" + "\r\n\r\n");
byte[] data = sb.toString().getBytes();
out.write(data);
// StringBuilder sb1 = new StringBuilder();
// sb1.append("--");
// sb1.append(BOUNDARY);
// sb1.append("\r\n");
// sb1.append("Content-Disposition: form-data;name=\"student" + "\";filename=\"" +IQClassGlobalManager.cloudUserInfo.studentId + "\"\r\n");
// sb1.append("Content-Type:application/octet-stream" + "\r\n\r\n");
// byte[] data1 = sb1.toString().getBytes();
// out.write(data1);
DataInputStream in = new DataInputStream(new FileInputStream(file));
int bytes = 0;
byte[] bufferOut = new byte[1024];
while ((bytes = in.read(bufferOut)) != -1) {
out.write(bufferOut, 0, bytes);
}
out.write("\r\n".getBytes()); //多个文件时,二个文件之间加入这个
in.close();
// }
out.write(end_data);
out.flush();
out.close();
// 定义BufferedReader输入流来读取URL的响应
BufferedReader reader = new BufferedReader(new InputStreamReader(http.getInputStream()));
String line = null;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (Exception e) {
System.out.println("发送POST请求出现异常!" + e);
e.printStackTrace();
return false;
}
return true;
}