日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

后台(27)——文件上传

發(fā)布時(shí)間:2024/1/17 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 后台(27)——文件上传 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

探索Android軟鍵盤(pán)的疑難雜癥
深入探討Android異步精髓Handler
詳解Android主流框架不可或缺的基石
站在源碼的肩膀上全解Scroller工作機(jī)制


Android多分辨率適配框架(1)— 核心基礎(chǔ)
Android多分辨率適配框架(2)— 原理剖析
Android多分辨率適配框架(3)— 使用指南


自定義View系列教程00–推翻自己和過(guò)往,重學(xué)自定義View
自定義View系列教程01–常用工具介紹
自定義View系列教程02–onMeasure源碼詳盡分析
自定義View系列教程03–onLayout源碼詳盡分析
自定義View系列教程04–Draw源碼分析及其實(shí)踐
自定義View系列教程05–示例分析
自定義View系列教程06–詳解View的Touch事件處理
自定義View系列教程07–詳解ViewGroup分發(fā)Touch事件
自定義View系列教程08–滑動(dòng)沖突的產(chǎn)生及其處理


版權(quán)聲明

  • 本文原創(chuàng)作者:谷哥的小弟
  • 作者博客地址:http://blog.csdn.net/lfdfhl

文件上傳概述

文件上傳通常指的是用戶在瀏覽器中通過(guò)表單form將文件上傳至服務(wù)端

但是請(qǐng)注意該表單必須滿足如下三個(gè)條件:

  • form的method必須是post
  • form的enctype必須是multipart/form-data
  • form中利用input type=”file”提供上傳的入口

Commons-fileupload簡(jiǎn)介

Commons-fileupload是Apache提供的一個(gè)用來(lái)處理表單文件上傳的一個(gè)開(kāi)源組件。該組件操作簡(jiǎn)單、API通俗易懂、性能優(yōu)異。

使用Commons-fileupload需要導(dǎo)入兩個(gè)jar包:

  • commons-fileupload
  • commons-io

Commons-fileupload使用示例

我們先來(lái)準(zhǔn)備一個(gè)表單form

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>文件上傳</title> </head> <body><form enctype="multipart/form-data" action="${pageContext.request.contextPath }/servlet" method="post" >文件描述:<input type="text" name="description"/><br/><br/>選擇文件:<input type="file" name="photo"/><br/><br/><input type="submit" value="上傳"/><br/><br/></form> </body> </html>

運(yùn)行后效果如下圖所示:

再來(lái)寫(xiě)一個(gè)處理文件上傳的Servlet

/*** 本文作者:谷哥的小弟* 博客地址:http://blog.csdn.net/lfdfhl*/ package cn.com;import java.io.File; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import java.util.UUID; import javax.servlet.ServletException; 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.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.apache.commons.io.FilenameUtils;public class UploadServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {}@Overrideprotected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {// 判斷表單是否支持文件上傳boolean isMultipartContent = ServletFileUpload.isMultipartContent(request);if (isMultipartContent) {DiskFileItemFactory factory = new DiskFileItemFactory();ServletFileUpload servletFileUpload = new ServletFileUpload(factory);servletFileUpload.setHeaderEncoding("UTF-8");try {//得到并處理表單中的每個(gè)項(xiàng)List<FileItem> fileItems = servletFileUpload.parseRequest(request);for (FileItem fileitem : fileItems) {if (fileitem.isFormField()) {processFormField(fileitem);} else {processUploadField(fileitem);}}} catch (Exception e) {e.printStackTrace();}}}// 處理普通表單項(xiàng)private void processFormField(FileItem fileitem) {try {String fieldName = fileitem.getFieldName();String fieldValue = fileitem.getString("UTF-8");System.out.println(fieldName + "=" + fieldValue);} catch (UnsupportedEncodingException e) {e.printStackTrace();}}//處理上傳表單項(xiàng)private void processUploadField(FileItem fileItem) {try {//創(chuàng)建存放上傳文件的目錄String folderName="upload";String folderPath = getServletContext().getRealPath("/WEB-INF/"+folderName);File folder = new File(folderPath);if (!folder.exists()) {folder.mkdirs();}//生成不重復(fù)的文件名String fileName = fileItem.getName();if (fileName != null) {fileName = FilenameUtils.getName(fileName);}fileName = UUID.randomUUID() + "_" + fileName;//按照日期生成子文件名稱String dateDirectory = makeDateDirectory(folder);//存放被上傳的文件File file=new File(folder, dateDirectory + File.separator + fileName);fileItem.write(file);} catch (Exception e) {e.printStackTrace();}}//依據(jù)日期生成子文件夾private String makeDateDirectory(File folder) {SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");Date date=new Date();String dateDirectory = simpleDateFormat.format(date); File file = new File(folder, dateDirectory);if (!file.exists()) {file.mkdirs();}return dateDirectory;} }

嗯哼,鑒于該示例比較簡(jiǎn)單和代碼里已有的注釋,在此不再對(duì)代碼作詳解。


文件上傳的注意事項(xiàng)

實(shí)際開(kāi)發(fā)中,在處理文件上傳時(shí)請(qǐng)注意以下問(wèn)題:

  • 將保存上傳文件的目錄放在用戶直接訪問(wèn)不到的地方,比如WEB-INF
  • 上傳文件重名的處理,可用UUID+文件名的方式
  • 將上傳文件合理地存入子目錄中,比如按照日期
  • 限制上傳文件的大小,比如3M

總結(jié)

以上是生活随笔為你收集整理的后台(27)——文件上传的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。