第一次寫博客,但願能幫到之後接觸到這裏的同窗,廢話很少說,面對疾風吧。服務器
/**
* 獲取文件相信信息
* @param request HttpServletRequest實例
* @param imgPath 圖片路徑
* @param fileName 圖片名
* @param path ftp保存的位置
* @return
* @throws IOException
*/
public static Map getFileMessage(HttpServletRequest request,String imgPath,String fileName,String path) throws IOException {
Map map=null;
if (ServletFileUpload.isMultipartContent(request)){
//建立ServletFileUpload實例
ServletFileUpload fileUpload = new ServletFileUpload();
FileItemIterator iter=null;
FileItemStream item=null;
InputStream is = null;
try {
//解析request請求 返回FileItemStream的iterator實例
iter = fileUpload.getItemIterator(request);
//迭代取出
while (iter.hasNext()){
item = iter.next();//獲取文件流
if(!item.isFormField()){url
//爲何要這麼取出這個流呢,由於request.getInputStream()中,表單提交上來的不單單包含了文件,還帶有參數,就算不帶參數,也還有request中自己的一些其餘東西(ps:沒有研究過,可是試過不帶參數拿到的流也是不對的。)直接拿會致使讀取出來的文件變大,圖片讀取失敗orm
//這裏主要針對圖片來寫的,由於我用到的是轉成圖片,獲取圖片屬性。
is = item.openStream();
if (is.available()>0){
map=saveToImgByInputStream(is, imgPath, fileName,path);
}
}
}
} catch (Exception e) {
e.printStackTrace();
// return is;
return map;
} finally {
fileUpload=null;
iter=null;
if(is!=null){
is.close();
is=null;
}
item=null;
}
}
//return is;
return map;
}圖片
/**
* 獲取文件屬性
* @param in InputStream
* @param imgPath 圖片的保存路徑
* @param imgName 圖片的名稱
* @return
* @throws IOException
*/
@SuppressWarnings( { "rawtypes", "unchecked", "null" } )
public static Map saveToImgByInputStream(InputStream in,String imgPath,String imgName,String path) throws IOException{ ip
//將流轉成臨時存儲文件,拿到屬性存儲在map裏面而後刪除臨時文件。
Map map =null;
FileOutputStream fos=null;
BufferedImage bufferedImage=null;
File file,f;
byte[] b=null;
FileInputStream fis=null;
try {
map =new HashMap();
// 將上面生成的圖片格式字符串 imgStr,還原成圖片顯示
file=new File(imgPath,imgName);//能夠是任何圖片格式.jpg,.png等
fos=new FileOutputStream(file);
b = new byte[1024];
int nRead = 0;
while ((nRead = in.read(b)) != -1) {
fos.write(b, 0, nRead);
}
fos.flush();
map.put("size", getPrintSize(file.length()));
bufferedImage = ImageIO.read(file);
map.put("width", bufferedImage.getWidth());
map.put("height", bufferedImage.getHeight());字符串
//這裏爲何要新獲得一個流呢,由於上面流寫入完了,發現傳到存儲服務器的文件是空的,我的猜想,流空了,沒有深刻研究過=.=
f=new File(imgPath+"/"+imgName);
fis=new FileInputStream(f);get
//這個方法是將文件傳到存儲服務器,裏面涉及到公司源碼,不便透露
saveFileToFtpServer(fis, path, imgName);
map.put("url",Constant.systemUserCenterFileServerUrl+path+"/"+imgName);
} catch (Exception e) {
e.printStackTrace();
map.put(UserCenterResultEnum.OPEN_OUTPUTSTREAM_FAILED.getCode(), UserCenterResultEnum.OPEN_OUTPUTSTREAM_FAILED.getDesc());
} finally {
bufferedImage = null;
file=null;
if(fos!=null){
fos.close();
}
if(fis!=null){
fis.close();
fis=null;
}
f=null;
if(in!=null){
in.close();
}
delFolder(imgPath+"/"+imgName);
}
return map;
} 源碼
/**
* 將文件大小b轉爲mb
* @param size
* @return
*/
public static String getPrintSize(long size) {
//若是字節數少於1024,則直接以B爲單位,不然先除於1024,後3位因太少無心義
if (size < 1024) {
return String.valueOf(size) + "B";
} else {
size = size / 1024;
}
//若是原字節數除於1024以後,少於1024,則能夠直接以KB做爲單位
//由於尚未到達要使用另外一個單位的時候
//接下去以此類推
if (size < 1024) {
return String.valueOf(size) + "KB";
} else {
size = size / 1024;
}
//if (size < 1024) {
//由於若是以MB爲單位的話,要保留最後1位小數,
//所以,把此數乘以100以後再取餘
size = size * 100;
return String.valueOf((size / 100)) + "."+ String.valueOf((size % 100)) + "MB";
/*} else {
//不然若是要以GB爲單位的,先除於1024再做一樣的處理
size = size * 100 / 1024;
return String.valueOf((size / 100)) + "."
+ String.valueOf((size % 100)) + "GB";
} */
} 博客
/**
* 刪除指定文件或者指定文件夾下的文件
* @param folderPath 路徑
*/
public static void delFolder(String folderPath) {
File myFilePath=null;
try {
//delAllFile(folderPath); // 刪除完裏面全部內容
myFilePath = new File(folderPath);
myFilePath.delete(); // 刪除空文件夾
} catch (Exception e) {
e.printStackTrace();
}finally {
myFilePath=null;
}
}it
以上都是代碼,但願能幫到閱讀的人