java應用common-fileupload完成文件上傳。本站提示廣大學習愛好者:(java應用common-fileupload完成文件上傳)文章只能為提供參考,不一定能成為您想要的結果。以下是java應用common-fileupload完成文件上傳正文
文件上傳是網站異常經常使用的功效,直接應用Servlet獲得上傳文件還得解析要求參數,比擬費事,所以普通選擇采取apache的開源對象,common-fileupload.這個jar包可以再apache官網下面找到,也能夠在struts的lib文件夾上面找到,struts上傳的功效就是基於這個完成的。
common-fileupload是依附於common-io這個包的,所以還須要下載這個包。然後導入到你的項目途徑上面。
應用代碼以下
package oop.hg.ytu.servlet;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import oop.hu.ytu.dao.UploadDomain;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class Upload extends HttpServlet {
/**
* 處置用戶上傳要求
*/
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// String describe = request.getParameter("describe");
DiskFileItemFactory factory = new DiskFileItemFactory();
@SuppressWarnings("deprecation")
String path = request.getRealPath("/upload");//設置磁盤緩沖途徑
factory.setRepository(new File(path));
factory.setSizeThreshold(1024*1024);//設置創立緩沖年夜小
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setSizeMax(-1);//設置上傳文件限制年夜小,-1無尚限
try {
@SuppressWarnings("unchecked")
List<FileItem> list = upload.parseRequest(request);
String va = null;
for(FileItem item : list){
// String name = item.getFieldName();
if(item.isFormField()){//斷定能否是文件流
va = item.getString("UTF-8");
// System.out.println(name+"="+va);
/// request.setAttribute(name, value);
}else{
String value = item.getName();//會將完全途徑名傳過去
int start = value.lastIndexOf("\\");
String fileName = value.substring(start+1);
// request.setAttribute(name, fileName);
InputStream in = item.getInputStream();
UploadDomain dao = new UploadDomain();
//item.write(new File(realPath,fileName));
int index = fileName.lastIndexOf(".");
String realFileName = fileName.substring(0,index);
String type = fileName.substring(index+1);
dao.insert(in, realFileName,type,va);//放入到數據庫中
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
這裡分離斷定能否是上傳的流或許表單外面的參數,好比文本框提交信息,然後將他們拔出到數據庫中。數據庫拔出
代碼以下
package oop.hu.ytu.dao;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import oop.hg.ytu.utils.JdbcUtils;
/**
* 供給文件上傳支撐
* @author Administrator
*
*/
public class UploadDomain {
/**
* 將上傳的文件放逐入到數據庫中
*/
public void insert(InputStream in, String fileName, String type,String describe) throws Exception{//向數據庫中寫入圖片
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
System.out.println(describe);
try {
// 2.樹立銜接
conn = JdbcUtils.getConnection();
// 3.創立語句
String sql = "insert into fileupload(file,filename,type,des) values (?,?,?,?)";
ps = conn.prepareStatement(sql);
ps.setBlob(1, in);
ps.setString(2, fileName);
ps.setString(3, type);
ps.setString(4, describe);
// 4.履行語句
ps.executeUpdate();
in.close();
} finally {
JdbcUtils.free(rs, ps, conn);
}
}
}
能夠會碰到數據庫默許問價年夜小限制,須要在mysql裝置目次上面的my.ini上面更改以下設置裝備擺設,
[mysqld]
max_allowed_packet=64M
如許便可以了。固然,留意編碼格局。上傳文件弄定。還有就是我的一個列名設置為describe,成果和Mysql保存字沖
突,湧現沒法拔出信息景象,今後必定要留意。
以上就是本文的全體內容,願望對年夜家的進修有所贊助,也願望年夜家多多支撐。