如何在Jsp上传图片
1. 新建一個(gè)Dynamic Web Project:
2. 鍵入工程名UploadImage:
3. 選擇Dynamic web module version :2.5
4. 點(diǎn)擊“Finish”
5. 新建兩個(gè)jsp文件:ImageUpload.jsp和ImageUploadHandler.jsp
6. 新建一個(gè)類(lèi),專(zhuān)門(mén)用來(lái)處理圖片上傳
新建一個(gè)包mytest:
在包下新建一個(gè)類(lèi)FileUpload:
代碼內(nèi)容:
package mytest;
import java.awt.image.BufferedImage;
import java.io.*;
import java.awt.Image;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
public class FileUpload
{
public static void uploadImage(String imgFolderPath,String srcFileName,String dstFileName) throws IOException
{
//判斷文件夾image是否存在,若不存在則創(chuàng)建
File folder = new File(imgFolderPath);
System.out.println("function 'uploadFileTest2'-imgFolderPath'"+imgFolderPath);
if(!folder.exists())
{
folder.mkdir();
System.out.println("maked a folder!");
}
File _file = new File(srcFileName); //讀入文件
Image src = javax.imageio.ImageIO.read(_file); //構(gòu)造Image對(duì)象
int wideth=src.getWidth(null); //得到源圖寬
int height=src.getHeight(null); //得到源圖長(zhǎng)
BufferedImage tag = new BufferedImage(wideth,height,BufferedImage.TYPE_INT_RGB);
tag.getGraphics().drawImage(src,0,0,wideth,height,null);
FileOutputStream out=new FileOutputStream(dstFileName); //輸出到文件流
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
encoder.encode(tag); //JPEG編碼
out.close();
System.out.println("function 'uploadFileTest2'-status:A Image File Saved!");
}
}
發(fā)現(xiàn)報(bào)錯(cuò):
找到代碼的庫(kù)Libraries:
打開(kāi)rt.jar所在文件夾:
復(fù)制這個(gè)文件:
右鍵粘貼到WEB_INF\lib下:
效果:
沒(méi)再報(bào)錯(cuò)。
7. 修改ImageUpload.jsp
說(shuō)明:這個(gè)jsp文件,需要一個(gè)能選擇文件的控件<input type=”file”
保存時(shí)出現(xiàn)問(wèn)題:
改3個(gè)地方,全部改成gb2312:
8. 修改ImageUploadHandler.jsp
說(shuō)明:這個(gè)jsp文件需要對(duì)從ImageUpload.jsp傳過(guò)來(lái)的文件上傳到服務(wù)器,并讀取服務(wù)器上的圖片文件,把它顯示出來(lái)。
改幾個(gè)地方:
(1)引入包及修改編碼gb2312
(2)修改編碼gb2312
(3)修改標(biāo)題
(4)上傳圖片代碼
<%
String filePath = request.getSession().getServletContext().getRealPath("");//獲取該項(xiàng)目的真實(shí)路徑
out.println(filePath+"<br/>");
String photo=request.getParameter("imgUpload");//獲取file控件里的路徑(絕對(duì)路徑)
int indexOfLine = photo.lastIndexOf("\\");
String fileName = photo.substring(indexOfLine+1,photo.length());//文件名(含后綴,不包含路徑信息)
String destFilePathAndName = filePath+"\\image\\"+fileName;//要保存文件的路徑
FileUpload.uploadImage(filePath+"\\image\\",photo,destFilePathAndName);//上傳圖片到目的路徑
String relativeFilePath = ".\\image\\"+fileName;//用來(lái)顯示圖片的相對(duì)路徑
out.println(photo+"<br/>");
out.println(destFilePathAndName+"<br/>");
%>
(5)顯示圖片
上傳的圖片:<img src="<%=relativeFilePath%>" width=100 height=112 border=0 alt="image display"/>
(6)全版布局
9. 運(yùn)行
選中ImageUpload.jsp這個(gè)文件,并點(diǎn)擊“運(yùn)行”三角形:
出現(xiàn)問(wèn)題:
看來(lái)一開(kāi)始把版本設(shè)置成2.5無(wú)效。打開(kāi)該項(xiàng)目所在目錄:
技巧:右鍵項(xiàng)目,選擇Properties:
看到Loacation:
復(fù)制這個(gè)路徑,打開(kāi)“我的電腦”并在地址欄上粘貼,回車(chē):
打開(kāi).settings:
使用記事本打開(kāi)這個(gè)XML文檔:
把“jst.web”的version改成2.5
右鍵點(diǎn)項(xiàng)目,刷新一下:
注:也可以安裝一些插件,可以右鍵直接打開(kāi)文件夾。
10. 重新運(yùn)行
點(diǎn)擊OK:
選擇“Manually define a new server”,并選擇一個(gè)Tomcat(因示例使用Tomcat 6.0,配置時(shí)看具體版本而定)
點(diǎn)擊“Add”:
在Browse…選擇安裝Tomcat6.0的路徑,點(diǎn)擊“Finish”,離開(kāi)這個(gè)對(duì)話(huà)框,并回到上一層對(duì)話(huà)框,再點(diǎn)擊“Finish”開(kāi)始運(yùn)行。
出現(xiàn)問(wèn)題:
關(guān)閉這個(gè)文件,重新點(diǎn)擊運(yùn)行(保證當(dāng)前打開(kāi)的文件是ImageUpload.jsp):
選擇一個(gè)文件:
發(fā)現(xiàn)沒(méi)有提交按鈕,回去修改ImageUpload.jsp:
再次運(yùn)行,運(yùn)行后點(diǎn)擊進(jìn)行刷新:
點(diǎn)擊“提交”:
刪除調(diào)試信息及修改圖片大小:
注釋掉out:
加寬圖片:
重新運(yùn)行:
實(shí)際上,會(huì)出現(xiàn)圖片能在eclipse內(nèi)置的瀏覽器中正常顯示,但卻不能在外部瀏覽器中顯示,原因在于,顯示圖片時(shí)用的文件必須是已經(jīng)上傳到服務(wù)器的圖片,而不能是服務(wù)端的本地文件,而客戶(hù)端是不允許直接訪(fǎng)問(wèn)服務(wù)器的本地文件,所以導(dǎo)致了錯(cuò)誤,因此,在瀏覽器中檢驗(yàn)一下:
復(fù)制選中的URL:
打開(kāi)IE瀏覽器,在地址欄粘貼并回車(chē):
選擇一個(gè)文件:
點(diǎn)擊“提交”:
OK!
注:由于eclipse經(jīng)常有一些Bug,所以,如果修改的代碼總是不生效,可以考慮下面兩種方法,“嚴(yán)酷”程序由低到高:
(一) 停止程序并清除編譯文件
停止程序:
清除編譯文件:
(二) 最狠的莫過(guò)于重啟eclipse,不過(guò),這仍不失為一個(gè)相當(dāng)有效而又沒(méi)法解釋的好辦法。
轉(zhuǎn)載于:https://www.cnblogs.com/xiaxiazl/archive/2012/03/28/2420972.html
總結(jié)
以上是生活随笔為你收集整理的如何在Jsp上传图片的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 数值操作之四舍五入
- 下一篇: halcon基本,vb,vc连接halc