本文目錄一覽:
- 1、java 中如何向服務器上傳圖片
- 2、java實現圖片上傳至服務器並顯示,如何做?希望要具體的代碼實現
- 3、javaweb中為什麼要重啟服務器才能更新圖片
- 4、java實現圖片上傳至服務器並顯示,如何做?
- 5、java保存圖片到本地服務器共享
- 6、java 如何只通過後台把本地的圖片上傳的服務器上去?
java 中如何向服務器上傳圖片
我們使用一些已有的組件幫助我們實現這種上傳功能。
常用的上傳組件:
Apache 的 Commons FileUpload
JavaZoom的UploadBean
jspSmartUpload
以下,以FileUpload為例講解
1、在jsp端
form id=”form1″ name=”form1″ method=”post” action=”servlet/fileServlet” enctype=”multipart/form-data”
要注意enctype=”multipart/form-data”
然後只需要放置一個file控件,並執行submit操作即可
input name=”file” type=”file” size=”20″
input type=”submit” name=”submit” value=”提交”
2、web端
核心代碼如下:
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding(“UTF-8”);
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
try {
List items = upload.parseRequest(request);
Iterator itr = items.iterator();
while (itr.hasNext()) {
FileItem item = (FileItem) itr.next();
if (item.isFormField()) {
System.out.println(“表單參數名:” + item.getFieldName() + “,表單參數值:” + item.getString(“UTF-8”));
} else {
if (item.getName() != null !item.getName().equals(“”)) {
System.out.println(“上傳文件的大小:” + item.getSize());
System.out.println(“上傳文件的類型:” + item.getContentType());
System.out.println(“上傳文件的名稱:” + item.getName());
File tempFile = new File(item.getName());
File file = new File(sc.getRealPath(“/”) + savePath, tempFile.getName());
item.write(file);
request.setAttribute(“upload.message”, “上傳文件成功!”);
}else{
request.setAttribute(“upload.message”, “沒有選擇上傳文件!”);
}
}
}
}catch(FileUploadException e){
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
request.setAttribute(“upload.message”, “上傳文件失敗!”);
}
request.getRequestDispatcher(“/uploadResult.jsp”).forward(request, response);
}
java實現圖片上傳至服務器並顯示,如何做?希望要具體的代碼實現
很簡單。
可以手寫IO讀寫(有點麻煩)。
怕麻煩的話使用FileUpload組件 在servlet里doPost嵌入一下代碼
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException{
response.setContentType(“text/html;charset=gb2312”);
PrintWriter out=response.getWriter();
//設置保存上傳文件的目錄
String uploadDir =getServletContext().getRealPath(“/up”);
System.out.println(uploadDir);
if (uploadDir == null)
{
out.println(“無法訪問存儲目錄!”);
return;
}
//根據路徑創建一個文件
File fUploadDir = new File(uploadDir);
if(!fUploadDir.exists()){
if(!fUploadDir.mkdir())//如果UP目錄不存在 創建一個 不能創建輸出…
{
out.println(“無法創建存儲目錄!”);
return;
}
}
if (!DiskFileUpload.isMultipartContent(request))
{
out.println(“只能處理multipart/form-data類型的數據!”);
return ;
}
DiskFileUpload fu = new DiskFileUpload();
//最多上傳200M數據
fu.setSizeMax(1024 * 1024 * 200);
//超過1M的字段數據採用臨時文件緩存
fu.setSizeThreshold(1024 * 1024);
//採用默認的臨時文件存儲位置
//fu.setRepositoryPath(…);
//設置上傳的普通字段的名稱和文件字段的文件名所採用的字符集編碼
fu.setHeaderEncoding(“gb2312”);
//得到所有表單字段對象的集合
List fileItems = null;
try
{
fileItems = fu.parseRequest(request);//解析request對象中上傳的文件
}
catch (FileUploadException e)
{
out.println(“解析數據時出現如下問題:”);
e.printStackTrace(out);
return;
}
//處理每個表單字段
Iterator i = fileItems.iterator();
while (i.hasNext())
{
FileItem fi = (FileItem) i.next();
if (fi.isFormField()){
String content = fi.getString(“GB2312”);
String fieldName = fi.getFieldName();
request.setAttribute(fieldName,content);
}else{
try
{
String pathSrc = fi.getName();
if(pathSrc.trim().equals(“”)){
continue;
}
int start = pathSrc.lastIndexOf(‘\\’);
String fileName = pathSrc.substring(start + 1);
File pathDest = new File(uploadDir, fileName);
fi.write(pathDest);
String fieldName = fi.getFieldName();
request.setAttribute(fieldName, fileName);
}catch (Exception e){
out.println(“存儲文件時出現如下問題:”);
e.printStackTrace(out);
return;
}
finally //總是立即刪除保存表單字段內容的臨時文件
{
fi.delete();
}
}
}
注意 JSP頁面的form要加enctype=”multipart/form-data” 屬性, 提交的時候要向服務器說明一下 此頁面包含文件。
如果 還是麻煩,乾脆使用Struts 的上傳組件 他對FileUpload又做了封裝,使用起來更傻瓜化,很容易掌握。
—————————–
以上回答,如有不明白可以聯繫我。
javaweb中為什麼要重啟服務器才能更新圖片
javaweb中要重啟服務器才能更新圖片原因:這是服務器的自我保護機制,為了防止暴露絕對路徑。把靜態的文件在啟動的時候都會加載到classpath的目錄下的,package時把static目錄下的資源一起打包到了jar包或war包中,此時上傳的圖片並未傳入啟動了的項目中,所以訪問不到。項目重啟後又會打成新的jar包,包含上一次上傳的的圖片,此時才會在頁面上顯示簡單點說就是:上傳圖片後target包中沒有加載重啟服務器後target包內會重新加載。
java實現圖片上傳至服務器並顯示,如何做?
給你段代碼,是用來在ie上顯示圖片的(servlet):
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String id = request.getParameter(“id”);
File file = new File(getServletContext().getRealPath(“/”)+”out”+”/”+id+”.gif”);
response.setCharacterEncoding(“gb2312”);
response.setContentType(“doc”);
response.setHeader(“Content-Disposition”, “attachment; filename=” + new String(file.getName().getBytes(“gb2312″),”iso8859-1”));
System.out.println(new String(file.getName().getBytes(“gb2312″),”gb2312”));
OutputStream output = null;
FileInputStream fis = null;
try
{
output = response.getOutputStream();
fis = new FileInputStream(file);
byte[] b = new byte[1024];
int i = 0;
while((i = fis.read(b))!=-1)
{
output.write(b, 0, i);
}
output.write(b, 0, b.length);
output.flush();
response.flushBuffer();
}
catch(Exception e)
{
System.out.println(“Error!”);
e.printStackTrace();
}
finally
{
if(fis != null)
{
fis.close();
fis = null;
}
if(output != null)
{
output.close();
output = null;
}
}
}
這個程序的功能是根據傳入的文件名(id),來為瀏覽器返回圖片流,顯示在img標籤里
標籤的格式寫成如下:
img src=” “/br/
顯示的是111.gif這個圖片
你上面的問題:
1.我覺得你的第二個辦法是對的,我們也是這樣做的,需要的是把數據庫的記錄id號傳進servlet,然後讀取這條記錄中的路徑信息,生成流以後返回就是了
關於上傳文件的問題,我記得java中應該專門有個負責文件上傳的類,你調用就行了,上傳後存儲在指定的目錄里,以實體文件的形式存放
你可以參考這個:
回復:
1.是的,在response中寫入流就行了
2.是發到servlet中的,我們一般都是寫成servlet,短小精悍,使用起來方便,struts應該也可以,只是我沒有試過,恩,你理解的很對
java保存圖片到本地服務器共享
1、調用第一個接口時,先將多張圖片存到本地。再調用第二個接口,將圖片統一上傳到圖片服務器上。
2、根據類別,上傳多張圖片。
java 如何只通過後台把本地的圖片上傳的服務器上去?
這裡你弄錯了一個問題;\x0d\x0a你的程序是要傳遞圖片的二進制數據.\x0d\x0a而不是傳遞路徑,然後再到服務器讀取文件數據(你的服務器有這個文件?)\x0d\x0a只有當你的服務器下有這個文件了,你傳遞一個路徑,讀取是可以的.\x0d\x0a//—\x0d\x0a關於如何上傳文件, 自己google一下,很多教程
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/160912.html