検索
ホームページJava&#&はじめるJavaはファイルのアップロードおよびダウンロード機能を実装します

Javaはファイルのアップロードおよびダウンロード機能を実装します

准备工作

(视频教程推荐:java课程

需要导入的jar包

Javaはファイルのアップロードおよびダウンロード機能を実装します

运行截图

文件上传截图

Javaはファイルのアップロードおよびダウンロード機能を実装します

文件下载截图

Javaはファイルのアップロードおよびダウンロード機能を実装します

上传文件代码servlet

	@WebServlet(name = "UploadServlet",value = "/upload")
	@MultipartConfig(maxFileSize = 1024*1024*5,maxRequestSize = 1024*1024*20) //1 添加MultipartConfig注解
	public class UploadServlet extends HttpServlet {
	    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	        //存放文件的目录
	        String realPath = request.getServletContext().getRealPath("/WEB-INF/upload");
	        File dir=new File(realPath);
	        if(!dir.exists()){
	            dir.mkdirs();
	        }
	        List<String> allowExts=new ArrayList<String>();
	        allowExts.add("jpg");
	        allowExts.add("png");
	        allowExts.add("gif");
	
	        //1乱码
	        request.setCharacterEncoding("utf-8");
	        response.setContentType("text/html;charset=utf-8");
	        //2使用getParts()获取数据
	        Collection<Part> parts = request.getParts();
	        //3遍历
	        PrintWriter out = response.getWriter();
	        if(parts!=null&&parts.size()>0){
	            for (Part part : parts) {
	                //判断表单元素是普通字段,还是文件
	                String submittedFileName = part.getSubmittedFileName();
	                if(submittedFileName==null){//普通字段
	                    String name = part.getName();
	                    String value = request.getParameter(name);
	                    System.out.println(name+"..."+value);
	                }else{//文件
	
	                    //判断文件是否为""
	                    if(submittedFileName.equals("")){
	                        continue;
	                    }
	                    //System.out.println(submittedFileName);
	                    //从请求头中获取文件
	                    String dis = part.getHeader("content-disposition");
	                    String filename=dis.substring(dis.lastIndexOf("filename=")+10, dis.length()-1);
	                    filename=filename.substring(filename.lastIndexOf("\\")+1);
	                    System.out.println(filename);
	                    //获取文件名的后缀
	                    String ext=filename.substring(filename.lastIndexOf(".")+1);
	                    if(!allowExts.contains(ext)){
	                        out.println(filename+"不符合上传文件类型要求...");
	                        continue;
	                    }
	                    //把文件保存
	                    //1创建新的文件名
	                    String newFileName = UploadUtils.makeNewFileName(filename);
	                    //2创建新的路径
	                    String newPath = UploadUtils.makeNewPath(realPath, filename);
	                    part.write(newPath+File.separator+newFileName);
	                    //删除part
	                    part.delete();
	                    out.println("上传成功:"+filename);
	                }
	            }
	        }
	    }
	
	    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	        doPost(request,response);
	    }
	}

每个属性表示的内容

Javaはファイルのアップロードおよびダウンロード機能を実装します

文件下载代码servlet

@WebServlet(name = "DownLoadServlet",value = "/download")
public class DownLoadServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //乱码
        request.setCharacterEncoding("utf-8");
        //获取文件名
        String uuidFilename = request.getParameter("filename");//d578be74fd864ac2a879d77b07f13793_backg.jpg
        //去掉uuid
        String filename=uuidFilename.substring(uuidFilename.indexOf("_")+1);
        //存放文件的根路径
        String realPath = request.getServletContext().getRealPath("/WEB-INF/upload");
        //获取真正目录
        String path = UploadUtils.makeNewPath(realPath, filename);

        File file=new File(path+ File.separator+uuidFilename);
        if(file.exists()){
            response.setHeader("content-disposition", "attachment;filename="+ URLEncoder.encode(filename, "utf-8"));
            ServletOutputStream os = response.getOutputStream();
            FileInputStream fis=new FileInputStream(file);
            byte[] buf=new byte[1024*4];
            int len=0;
            while((len=fis.read(buf))!=-1){
                os.write(buf,0,len);
            }
        }else{
            response.setContentType("text/html;charset=utf-8");
            response.getWriter().write("文件不存在...");
        }

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }
}

每个属性表示的内容

Javaはファイルのアップロードおよびダウンロード機能を実装します

读取下载文件servlet

@WebServlet(name = "ListFileServlet",value = "/listfile")
public class ListFileServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1读取可以被下载的文件
        String realPath = request.getServletContext().getRealPath("/WEB-INF/upload");
        HashMap<String,String> map=new HashMap<>();
        UploadUtils.listFile(new File(realPath),map);
        //2放入域中
        request.setAttribute("map", map);
        //3转发
        request.getRequestDispatcher("/list.jsp").forward(request, response);

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }
}

工具类servlet

public class UploadUtils {
    public static void main(String[] args) {
        String s = makeNewFileName("aaa.jpg");
        System.out.println(s);
    }
    /**
     * 根据原始文件名产生一个新的文件名
     * @param filename
     * @return
     */
    public static String makeNewFileName(String filename){
        //UUID 统一唯一标识码
        String uuid = UUID.randomUUID().toString().replace("-", "");//默认32位的16进制
        return uuid+"_"+filename;
    }

    /**
     * 创建新的路径
     * @param path
     * @param filename
     * @return
     */
    public static String makeNewPath(String path,String filename){
        int num = filename.hashCode();//01101011001011011111111111 1111 0101 0101
        int path1=num&0xf;
        int path2=(num>>4)&0xf;
        String newPath=path+ File.separator+path1+File.separator+path2;
        File dir=new File(newPath);
        if(!dir.exists()){
            dir.mkdirs();
        }
        return newPath;
    }
    //遍历可以被下载的文件
    public static void listFile(File dir,HashMap<String,String> map){
        File[] files = dir.listFiles();
        if(files!=null&&files.length>0){
            for (File file : files) {
                if(file.isDirectory()){
                    listFile(file, map);
                }else{
                    //文件
                    String uuidFilename=file.getName();
                    String filename=uuidFilename.substring(uuidFilename.indexOf("_")+1);
                    map.put(uuidFilename,filename);
                }
            }
        }
    }


}

相关教程推荐:java入门教程

以上がJavaはファイルのアップロードおよびダウンロード機能を実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事はcsdnで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。