精华内容
下载资源
问答
  • Java 上传下载

    万次阅读 2015-02-05 21:50:20
    (1) Java Servlet 实现  1.上传  1) 前端页面写法 String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; ...

    (1) Java Servlet 实现

      1.上传

        1) 前端页面写法

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    <%@page import="com.test.action.FileBean"%>
    <%@page import="com.test.action.DB"%>
    <%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <base href="<%=basePath%>">
        
        <title>My JSP 'upload.jsp' starting page</title>
        
    	<meta http-equiv="pragma" content="no-cache">
    	<meta http-equiv="cache-control" content="no-cache">
    	<meta http-equiv="expires" content="0">    
    	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    	<meta http-equiv="description" content="This is my page">
    	<!--
    	<link rel="stylesheet" type="text/css" href="styles.css">
    	-->
    
      </head>
      
      <body>
        
        	<form action="/abc/app1/file" method="post" enctype="multipart/form-data">
        	
        		选择文件1:<input type="file" name="sourceFile" style="width: 70" value="浏览">
        		<br/>
        		选择文件2:<input type="file" name="sourceFile" style="width: 70" value="浏览">
        		<br/>
        		选择文件3:<input type="file" name="sourceFile" style="width: 70" value="浏览">
        		<br/>
        		
        		<input type="submit" value="上传" style="width: 50">
        	
        	</form>
        <div> 
        <table>
        <tr>
        <td style="width: 82%">文件名称</td><td>下载选项</td>
        </tr>
        </table>
        	<%!private List<FileBean> getFiles(){
    DB db=new DB();
    List<FileBean> al = db.fileBeans();
    return al;} %>
    <table>
        <%
        List<FileBean>  al = getFiles(); 
         for(int i = 0; i < al.size(); i++){
          %><tr><td style="width: 90%">
         <span style="width: 30"><%=al.get(i).getName()%></span></td>
        <td> <a href="/abc/app1/download?name=<%=al.get(i).getName()%>">下载</a><td></tr>
     <% }%>
        
        </table>
        </div>
      </body>
    </html>
    

        2) 后台servlet (FileUtils.copyFile(sourceFile[i], newFile)需要包commons-fileupload-1.2.1.jar、commons-io-1.3.2.jar.这两个文件可以从http://commons.apache.org/下载)

    package com.test.action;
    
    import java.io.File;
    import java.io.IOException;
    
    import org.apache.commons.io.FileUtils;
    import org.apache.struts2.ServletActionContext;
    
    public class FileAction {
    
    	private String dol;
    	private File[] sourceFile;
    	private String[] sourceFileFileName;
    	public String getDol() {
    		return dol;
    	}
    	public void setDol(String dol) {
    		this.dol = dol;
    	}
    	public File[] getSourceFile() {
    		return sourceFile;
    	}
    	public void setSourceFile(File[] sourceFile) {
    		this.sourceFile = sourceFile;
    	}
    	public String[] getSourceFileFileName() {
    		return sourceFileFileName;
    	}
    	public void setSourceFileFileName(String[] sourceFileFileName) {
    		this.sourceFileFileName = sourceFileFileName;
    	}
    
    	public String execute() {
    		System.out.println("shangchuan...");
    		String path = ServletActionContext.getServletContext().getRealPath(
    				"/imgs");
    		path += File.separator;
    		try {
    			for (int i = 0; i < sourceFile.length; i++) {
    				File newFile = new File(path + this.sourceFileFileName[i]);
    				DB db = new DB(newFile.toString());
    				if(db.addFile()){
    					System.out.println("true");
    //					byte[] b=new byte[1222];
    //					InputStream in=new FileInputStream(path);
    //					OutputStream out=new FileOutputStream(path);
    //					while(in.read(b)>0){
    //						out.write(b);
    //					}
    					FileUtils.copyFile(sourceFile[i], newFile);
    				}
    				if(!db.addFile()){
    					System.out.println("false");
    					this.dol="0";
    				}
    			}
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    		return "upload";
    	}
    	
    }
    

      2.下载

        1) 前端页面写法(只要有链接到后台servlet就可以,如上↑↑)

        2) 后台servlet

    package com.servlet;
    
    import javax.servlet.*;
    import javax.servlet.http.*;
    import java.io.*;
    /**
     * 实现java的下载功能,先读取资源流,然后再利用response.getOutputStream()输出,此类是servlet;
     * @author Administrator
     *
     */
    public class FileDownServlet extends HttpServlet {
    	private static final String CONTENT_TYPE = "text/html; charset=GBK";
    
    	// Initialize global variables
    	public void init() throws ServletException {
    	}
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp)
    		throws ServletException, IOException {
    	System.out.println("service");
    	doGet(req,resp);
    }
    	// Process the HTTP Get request
    	public void doGet(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    		response.setContentType(CONTENT_TYPE);
    		// 得到下载文件的名字
    		// String filename=request.getParameter("filename");
    		// 解决中文乱码问题
    		// String filename=new
    		// String(request.getParameter("filename").getBytes("iso-8859-1"),"gbk");
    		String filename = "rss.xml";
    		// 创建file对象
    		File file = new File("F://" + filename);
    		// 设置response的编码方式
    		response.setContentType("application/x-msdownload");
    		// 写明要下载的文件的大小
    		response.setContentLength((int) file.length());
    		// 设置附加文件名
    		// response.setHeader("Content-Disposition","attachment;filename="+filename);
    		// 解决中文乱码
    		response.setHeader("Content-Disposition", "attachment;filename="
    				+ new String(filename.getBytes("gbk"), "iso-8859-1"));
    		// 读出文件到i/o流
    		FileInputStream fis = new FileInputStream(file);
    		BufferedInputStream buff = new BufferedInputStream(fis);
    
    		byte[] b = new byte[1024];// 相当于我们的缓存
    		long k = 0;// 该值用于计算当前实际下载了多少字节
    		// 从response对象中得到输出流,准备下载
    		OutputStream myout = response.getOutputStream();
    		// 开始循环下载
    
    		while (k < file.length()) {
    			int j = buff.read(b, 0, 1024);
    			k += j;
    			// 将b中的数据写到客户端的内存
    			myout.write(b, 0, j);
    		}
    		// 将写入到客户端的内存的数据,刷新到磁盘
    		myout.flush();
    
    	}
    	// Process the HTTP Post request
    	public void doPost(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    		System.out.println("doPost");
    		doGet(request, response);
    	}
    
    	// Clean up resources
    	public void destroy() {
    	}
    }

    (2) Struts 功能实现

      1.上传

        1) 前端页面写法

        2) 后台action(同上java的上传雷同)

      2.下载

       1) 前端页面写法(只要有链接到后台servlet就可以)

       2) 后台action

    package com.test.action;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.InputStream;
    
    import com.opensymphony.xwork2.ActionSupport;
    
    public class DownloadAction extends ActionSupport{
    	private String name;
        private String DownloadFileName;
    	private InputStream inputStream;  
      
        public String getDownloadFileName() {
    		return DownloadFileName;
    	}
    	public void setDownloadFileName(String downloadFileName) {
    		DownloadFileName = downloadFileName;
    	}
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	@Override  
        public String execute() throws Exception {  
    		String temp=this.name;
    		String tem= new String(temp.getBytes("ISO8859-1"),"utf-8");
    		String path="F:\\apache-tomcat-6.0.36\\webapps\\abc\\imgs\\"+tem;
    		String filename=tem;
            inputStream = new FileInputStream(new File(path));  
            this.DownloadFileName=new String(filename.getBytes(),"ISO8859-1");
            return SUCCESS;  
        }  
        public InputStream getInputStream() {  
            return inputStream;  
        }  
        public void setInputStream(InputStream inputStream) {  
            this.inputStream = inputStream;  
        }  
    }
    
      3) struts.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
    <struts>
    	<constant name="struts.multipart.maxSize" value="104857600"></constant>
    	<constant name="struts.enable.DynamicMethodInvocation" value="false" />
    	<constant name="struts.devMode" value="false" />
    	<package name="app" namespace="/app1" extends="struts-default">
    		
    		<action name="download" class="com.test.action.DownloadAction">
    			<result name="success" type="stream">
    				<param name="contentType">application/octet-stream</param>
    				<param name="inputName">inputStream</param>
    				<param name="contentDisposition">attachment;filename=${DownloadFileName}</param>
    				<param name="bufferSize">1024</param>
    			</result>
    		</action>
    		
    	</package>
    </struts>    
    

    (2) 使用io的开源项目完成上传文件的功能

          1.  jsp写法

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    	<form action="/web/ManageServlet" method="post" enctype="multipart/form-data">
    		文件:<input type="file" name="videofile"/><!-- 此处的参数名称不重要 -->
    		<input type="submit" value=" 提 交 "/>
    	</form>
    </body>
    </html>

          2. 后台servelt写法

    package cn.itcast.servlet;
    
    import java.io.File;
    import java.io.IOException;
    import java.util.List;
    
    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.FileItemFactory;
    import org.apache.commons.fileupload.disk.DiskFileItemFactory;
    import org.apache.commons.fileupload.servlet.ServletFileUpload;
    
    public class ManageServlet extends HttpServlet {
    	private static final long serialVersionUID = 1L;
    
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		String title = request.getParameter("title");		
    		String timelength = request.getParameter("timelength");
    		System.out.println("视频名称:"+ title);
    		System.out.println("时长:"+ timelength);
    	}
    
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		boolean isMultipart = ServletFileUpload.isMultipartContent(request);
    		if(isMultipart){
    			try{
    				FileItemFactory factory = new DiskFileItemFactory();
    //                File filetemp = new File("d:/a");
    //                if(!filetemp.exists()){filetemp.mkdirs();}
    //                factory.setRepository(new File("d:/a")); //设置临时目录
    //                factory.setSizeThreshold(1024*8); //8k的缓冲区,文件大于8K则保存到临时目录
                      ServletFileUpload upload = new ServletFileUpload(factory);
    				upload.setHeaderEncoding("UTF-8");
    //                upload.setFileSizeMax(1024 * 1024 * 10*2);// 设置每个文件最大为20M
    //                upload.setSizeMax(1024 * 1024 * 100);// 一共最多能上传100M
     List<FileItem> items = upload.parseRequest(request);
    				String dir = request.getSession().getServletContext().getRealPath("/files");
    				File dirFile = new File(dir);
    				if(!dirFile.exists()) dirFile.mkdirs();
    				for(FileItem item : items){
    					if(item.isFormField()) {//如果文本类型参数
    						String name = item.getFieldName();
    						String value = item.getString("UTF-8");
    						System.out.println(name+ "="+ value);
    					}else{//如果文件类型参数
    						System.out.println(dir);
    						File saveFile = new File(dirFile, item.getName());
    						item.write(saveFile);
    					}
    				}
    			}catch (Exception e) {
    				e.printStackTrace();
    			}
    		}else{
    			doGet(request, response);
    		}
    	}
    
    }
    

          3. 所需要的包

    展开全文
  • java上传下载通用方法总结 java开发中上传下载,很多地方用。每次都去写的话会很麻烦。这里写一个通用方法,以后遇到了只要准备好对应参数,调方法即可。 一、文件上传: /** * 文件上传工具类 */ public class ...

    java上传下载通用方法总结之FileUtils.copyInputStreamToFile(一)

    java开发中上传下载,很多地方用。每次都去写的话会很麻烦。这里写一个通用方法,以后遇到了只要准备好对应参数,调方法即可。
    这里引入的是

    <dependency>
                <groupId>commons-io</groupId>
                <artifactId>commons-io</artifactId>
                <version>2.7</version>
            </dependency>
    
    一、文件上传:
    /**
     * 文件上传工具类
     */
    public class FileUpload {
        /**
         * @param file     多媒体文件
         * @param filePath 文件上传到的目的路径
         * @param fileName 文件名称(不包括扩展名,即后缀)
         * @return
         */
        public static String fileUpload(MultipartFile file, String filePath, String fileName) throws IOException {
            //扩展名
            String exeName = "";
    
                if (file.getOriginalFilename().lastIndexOf(".") >= 0) {
                    exeName = file.getOriginalFilename().
                            substring(file.getOriginalFilename().lastIndexOf("."));
                }
                copyFile(file.getInputStream(), filePath, fileName + exeName);
    
    
            return fileName + exeName;
        }
    
        /**
         * @param inputStream 文件流
         * @param dir         目的文件夹
         * @param realName    文件全名
         * @return
         * @throws IOException
         */
        private static File copyFile(InputStream inputStream, String dir, String realName) throws IOException {
    
            File destFile = new File(dir, realName);
            return copyFile(inputStream, destFile);
        }
    
        private static File copyFile(InputStream inputStream, File destFile) throws IOException {
            if (null == inputStream) {
                return null;
            }
            if (!destFile.exists()) {
                if (!destFile.getParentFile().exists()) {
                    destFile.getParentFile().mkdir();
                }
                destFile.createNewFile();
            }
            FileUtils.copyInputStreamToFile(inputStream, destFile);
            return destFile;
        }
     }
    

    这里就是公共方法了。调用的时候,可以这样:(注意:这里的fileName只是纯名字,无后缀)

      @PostMapping("/upload")
        public R upload(@RequestBody MultipartFile file){
    
            String filePath="E:\\2020-in-beijing\\uploadanddownload";
            String fileName = "我的上传文件";
            String s = null;
            try {
                s = FileUpload.fileUpload(file, filePath, fileName);
            } catch (IOException e) {
                e.printStackTrace();
                return R.error("上传失败!");
            }
            return R.ok("上传成功!").put("data",s);
        }
    
    二 文件下载
    package com.sinux.cc.fileuploadanddownload;
    
    import org.apache.tomcat.util.http.fileupload.RequestContext;
    import org.springframework.web.context.request.RequestContextHolder;
    import org.springframework.web.context.request.ServletRequestAttributes;
    
    import javax.print.DocFlavor;
    import javax.servlet.http.HttpServletResponse;
    import java.io.*;
    
    /**
     * 文件下载工具类
     */
    public class FileDownload {
        /**
         * @param response
         * @param filePath 文件完整路径包括:文件完整名,扩展名
         */
        public static void fileDownLoad(HttpServletResponse response, String filePath) {
            OutputStream os = null;
            try {
                File file = new File(filePath);
                if (!file.exists()) {
                    return;
                }
                String fileName = file.getName();
                response.setContentType("application/octet-stream;charset=ISO8859-1");
                //解决中文乱码
                String fileNameStr = new String(fileName.getBytes("utf-8"), "ISO8859-1");
                response.setHeader("Location", fileNameStr);
                response.setHeader("Content-Disposition", "attachment;filename=" + fileNameStr);
                os = response.getOutputStream();
                download(os, filePath);
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (null != os) {
                    try {
                        os.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
    
        }
    
        private static void download(OutputStream os, String filePath) {
            File file = new File(filePath);
            if (!file.exists()) {
                return;
            }
            FileInputStream is = null;
            try {
                is = new FileInputStream(file);
                int BUFFERSIZE = 2 << 10;
                int length = 0;
                byte[] buffer = new byte[BUFFERSIZE];
                while ((length = is.read(buffer, 0, BUFFERSIZE)) >= 0) {
                    os.write(buffer, 0, length);
                }
                os.flush();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (null != os) {
                    try {
                        os.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                if (is != null) {
                    try {
                        is.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    
        /**
         * 浏览器下载
         */
        public static void download(InputStream in, String fileName) {
            HttpServletResponse res =
                    ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();
    
    
            try {
                res.reset();
                res.setCharacterEncoding("utf-8");
                res.setContentType("application/octet-stream");
                res.setHeader("Content-Disposition", "attachment;filename=" + fileName);
    
            } catch (Exception e) {
                e.printStackTrace();
            }
            byte[] buffer = new byte[1024];
            BufferedInputStream bi = null;
            OutputStream os = null;
            try {
                os = res.getOutputStream();
                bi = new BufferedInputStream(in);
                int i = bi.read(buffer);
                while (i != -1) {
                    os.write(buffer, 0, buffer.length);
    
                    i = bi.read(buffer);
                }
                os.flush();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (null != bi) {
                    try {
                        bi.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
    

    这里提供了多种文件下载的方法:择其善者而用之

    展开全文
  • Java上传下载完全解析(一)

    千次阅读 2016-12-14 22:14:21
    Java Web开发中,经常会用到上传下载文件,典型的案例即为服务器获取上传的文件,将其保存至本地,并获取其下载的文件url,客户端在获取下载的url后,在服务器进行下载。下面我们就来说一下Java中文件的上传。 ...

      在Java Web开发中,经常会用到上传与下载文件,典型的案例即为服务器获取上传的文件,将其保存至本地,并获取其下载的文件url,客户端在获取下载的url后,在服务器进行下载。下面我们就来说一下Java中文件的上传。

      一、设置CommonsMultipartResolver

      在Spring中,我们可以使用CommonsMultipartResolver来上传文件,所以我们需要声明一个CommonsMultipartResolver的bean对象,也可以明确的告诉Spring上传文件的大小限制:

      <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
            <property name="defaultEncoding" value="utf-8"></property>
            <property name="maxUploadSize" value="10485760"></property>
            <property name="maxInMemorySize" value="40960"></property>
     </bean>

     其中的maxUploadSize即为最大上传的大小,单位为B,所以10485760为10M


     二、CommonsMultipartResolver的使用:

      1、得到CommonsMultipartResolver对象:

    CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext()); //其中request即为我们请求的HttpServletRequest对象

      2、判断请求是否为MultiPart File文件上传请求:

    boolean isFileUpload = multipartResolver.isMultipart(request);


    三、MultipartHttpServletRequest的使用

      在确定了是多文件上传的请求后,即可以将HttpServletRequest转成MultipartHttpServletRequest对象,MultipartHttpServletRequest对象封装了文件上传的文件对象,可以通过此对象直接得到文件对象。

      1、得到文件名称列表的迭代器:

      Iterator<String> iter = multiRequest.getFileNames();

      2、取得上传的文件:

     MultipartFile file = multiRequest.getFile(iter.next());


    四、上传的示例代码:

        @ResponseBody
        @RequestMapping("/up")
        public FileUploadResponse upload(HttpServletRequest request) throws IllegalStateException, IOException, NoSuchAlgorithmException {
    
            String fileHttpPath = "";
            //创建一个通用的多部分解析器
            CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());
            //判断 request 是否有文件上传,即多部分请求
            if (multipartResolver.isMultipart(request)) {
                //转换成多部分request
                MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
                //取得request中的所有文件名
                Iterator<String> iter = multiRequest.getFileNames();
                while (iter.hasNext()) {
                    //记录上传过程起始时的时间,用来计算上传时间
                    int pre = (int) System.currentTimeMillis();
                    //取得上传文件
                    MultipartFile file = multiRequest.getFile(iter.next());
                    if (file != null) {
                        //取得当前上传文件的文件名称
                        String myFileName = file.getOriginalFilename();
                        //如果名称不为空,说明该文件存在,否则说明该文件不存在
                        if (!myFileName.trim().isEmpty()) {
                            System.out.println(myFileName);
    
                            String fileName = getRondomFileName() + getFileType(myFileName);
                            //定义本地路径
                            String path = filePath + fileName;
                            File localFile = new File(path);
                            file.transferTo(localFile);
    
                            fileHttpPath = fileDownloadPath + fileName;
                        }
                    }
                    //记录上传该文件后的时间
                    int finaltime = (int) System.currentTimeMillis();
                    System.out.println(finaltime - pre);
                }
    
            }
            FileUploadResponse uploadResponse = new FileUploadResponse();
            uploadResponse.setFilePath(fileHttpPath);
            return uploadResponse;
        }


    五、

      下一篇的地址为Java上传下载完全解析(二) ,会讲Java Web中文件的下载与文件位置配置信息在开发与生产环境中的切换方法。  

      另外此项目的github地址为FileService,里面会有上面源码中没有的一些工具类,欢迎大家下载,如果感觉有帮助的话,也可以star一下哦。


    展开全文
  • Java 上传下载文件到Minio

    千次阅读 2019-09-25 16:15:28
    Java 1.8或更高版本: OracleJDK 8.0 OpenJDK8.0 使用maven <dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> <version>3.0.8<...

    最低需求:

    Java 1.8或更高版本:

     

    使用maven

    <dependency>
        <groupId>io.minio</groupId>
        <artifactId>minio</artifactId>
        <version>3.0.8</version>
    </dependency>
    
    <dependency>
    	<groupId>net.coobird</groupId>
    	<artifactId>thumbnailator</artifactId>
    	<version>0.4.8</version>
    </dependency>

    使用gradle

    dependencies {
        compile 'io.minio:minio:3.0.10'
    }

    直接下载JAR

    你可以到maven仓库直接下载最新版的JAR

     

     

    程序连接到一个对象存储服务,创建一个存储桶并上传一个文件到该桶中。

    你需要有存储服务的三个参数才能连接到该服务。

    参数 说明
    Endpoint 对象存储服务的URL
    Access Key Access key就像用户ID,可以唯一标识你的账户。
    Secret Key Secret key是你账户的密码。

     

    2019-9-25 16:31:49突然有事

    等着有时间了接着写

    有问题留言!

     

    接着补充完,已经过去这么久了哈。

    其实本来是打算把这些打包到csdn下载那,象征挂1分,弄个下载分自己也可以用。可csdn把下载那改的太恶心了,都懒得往那放,直接开放给粉丝了。

    我写的这个工具主要是做图片和头像的处理,文件的可自行改动一下就行了。

     

    其实可以看一下官方文档,也挺详细的,简单使用等。

    https://docs.min.io/cn/how-to-use-aws-sdk-for-java-with-minio-server.html

    MinioUtil

    import java.io.File;
    import java.util.ArrayList;
    import java.util.List;
    import com.google.common.io.Files;
    import net.coobird.thumbnailator.Thumbnails;
    import org.apache.commons.codec.binary.Hex;
    import org.apache.commons.collections4.CollectionUtils;
    import org.apache.commons.io.FilenameUtils;
    import org.apache.commons.lang3.ArrayUtils;
    import org.apache.commons.lang3.RandomUtils;
    import org.apache.commons.lang3.tuple.Pair;
    import org.springframework.web.multipart.MultipartFile;
    
    import io.minio.MinioClient;
    
    public final class MinioUtil {
        private MinioUtil(){
    
        }
    
        private static final String bucketName = "images";
        
    	
    	private static MinioClient minioClient;
    
        public static Pair<String, String> saveFaceImage(MultipartFile image, UploadConfig uploadConfig) throws Exception {
    		if (image == null || image.isEmpty()) {
    			return null;
    		}
    		return CollectionUtil.getOne( saveImages(new MultipartFile[] { image } , UserUtils.FACE_THUMBNAIL_SIZE, UserUtils.FACE_THUMBNAIL_SIZE, uploadConfig) );
    	}
    
        public static List<String> saveImages(MultipartFile[] images, UploadConfig uploadConfig) throws Exception {
            List<Pair<String, String>> pairList = saveImages(images , -1, -1, uploadConfig);
            if (CollectionUtils.isEmpty(pairList)) {
                return new ArrayList<>(0);
            }
            List<String> list = new ArrayList<>(pairList.size());
            for (Pair<String, String> pair : pairList) {
                list.add(pair.getLeft());
            }
            return list;
        }
    
        private static List<Pair<String, String>> saveImages(MultipartFile[] images, int width, int height, UploadConfig uploadConfig) throws Exception {
            if (ArrayUtils.isEmpty(images)) {
                return null;
            }
            minioClient = new MinioClient("http://x.x.x.x:9000", "xxx", "xxxxxxxxx");
            // 检查存储桶是否已经存在
            boolean isExist = minioClient.bucketExists(bucketName);
            if(isExist) {
              //System.out.println("bucketName already exists.");
            }else {
            	//System.out.println("bucketName not exists.");
            	return null;
    		}
    
            List<Pair<String, String>> attachments = new ArrayList<>();
            for (MultipartFile multipartFile : images) {
                if (multipartFile==null || multipartFile.isEmpty()) {
                    continue ;
                }
    
                String resourceDirectory = uploadConfig.getResourceDirectory();
                String resourcePath = uploadConfig.getResourcePath();
    
                String hex = Hex.encodeHexString(RandomUtils.nextBytes(20));
                String imgPrefix = hex.charAt(0) + "/" + hex.charAt(1) + "/" + hex.charAt(2) + "/" + hex;
                String imgFile = "/" + imgPrefix + fileTypeWithDot(multipartFile);
                String imgThumbnailFile = "/" + imgPrefix +"_" + width + "_" + height + fileTypeWithDot(multipartFile);
    
                Files.createParentDirs(new File(resourceDirectory + imgFile));
                multipartFile.transferTo(new File(resourceDirectory + imgFile));
                
                if (width > 0 && height > 0) {
                    Thumbnails.of(new File(resourceDirectory + imgFile))
                            .size(width, height)
                            .keepAspectRatio(false)
                            .outputQuality(0.85)
                            .toFile(new File(resourceDirectory + imgThumbnailFile));
                    minioClient.putObject(bucketName,uploadConfig.getKeyPrefix() + imgThumbnailFile, resourceDirectory + imgThumbnailFile);
                }
                attachments.add(Pair.of(resourcePath + imgFile, resourcePath + imgThumbnailFile));
                minioClient.putObject(bucketName,uploadConfig.getKeyPrefix() + imgFile, resourceDirectory + imgFile);
            }
            return attachments;
        }
        
        public static String fileTypeWithDot(MultipartFile mfile) {
            if (mfile == null) {
                return "";
            }
            String ft = getFileType(mfile);
            return "".equals(ft) ? "" : "." + ft;
        }
        
        private static String getFileType(MultipartFile mfile) {
            return FilenameUtils.getExtension(mfile.getOriginalFilename());
        }
    }
    

    UploadConfig

    public class UploadConfig {
    	private String resourceDirectory;
    	private String resourcePath;
    	private String resourceHost;
    	private String keyPrefix;
    	public String getResourceDirectory() {
    		return resourceDirectory;
    	}
    	public void setResourceDirectory(String resourceDirectory) {
    		this.resourceDirectory = resourceDirectory;
    	}
    	public String getResourcePath() {
    		return resourcePath;
    	}
    	public void setResourcePath(String resourcePath) {
    		this.resourcePath = resourcePath;
    	}
    	public String getResourceHost() {
    		return resourceHost;
    	}
    	public void setResourceHost(String resourceHost) {
    		this.resourceHost = resourceHost;
    	}
    	public String getKeyPrefix() {
    		return keyPrefix;
    	}
    	public void setKeyPrefix(String keyPrefix) {
    		this.keyPrefix = keyPrefix;
    	}
    }
    

    UploadConfig记得配置初始化参数,可以做多种使用,比如ImageUploadConfig、FileUploadConfig等等。

    啥?看完就想走,白嫖是不好的行为,记得随手点赞哦。

    展开全文
  • 寻思着再搭建一个文件服务器,可以通过api进行文件上传下载就可以了。 对着方面不太了解,不知道可以采用哪个。 最好是流行,开源的,稍微了解了一下seafile,FASTDfs。 希望熟悉的人能给我推荐一个啊。
  • HDFS的JAVA上传下载简单实现

    千次阅读 2019-04-01 19:30:38
    1.HDFS的Java基本操作非常重要 2.Haoop的常用shell操作 1.hadoop fs -ls hdfs://haoop1:8020/目录 2.hadoop fs -copyFromLocal|put 文件地址 目的目录 3.hadoop fs -copyToLocal|get 文件地址 目的目录 ...
  • 项目遇到上传下载,在windows系统上测试都可以,但是部署到linux上就不行,试了很多种方法,只有这种才通过了。 首先上传 /**  * 上传  */  @RequestMapping(value="/upload",method = RequestMethod.POST) ...
  • java文件上传下载完整demo

    千次下载 热门讨论 2008-12-30 16:34:18
    java文件上传下载完整demo,很完整,只需要导入到你的工作环境中即可。
  • Java文件上传下载

    千次阅读 2016-04-21 08:23:42
    Java文件上传下载在上传图片之前,预览图片,可参考Preview an image before it is uploaded基本原理文件上传原理通过为表单元素设置Method="post" enctype="multipart/form-data"属性,让表单提交的数据以二进制...
  • Java文件上传下载删除(下载中文乱码问题)
  • java实现文件上传下载

    万次阅读 2015-08-08 13:59:19
    JAVA中文件上传下载知识点整理, 东风化宇,文件上传 一、对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,Servlet获取上传文件的输入流然后再解析里面的请求参数是比较麻烦。 JSP...
  • java实现上传下载积分方法

    千次阅读 2014-07-02 09:58:57
    java实现上传下载积分方法 代码下载:http://www.zuidaima.com/share/1550463242472448.htm
  • Java web文件上传下载

    千次阅读 2016-07-27 19:37:16
    并且在服务器端进行数据文件存储,主要分享了文件上传原理、使用第三方开源工具进行上传以及一些文件上传时需要注意的地方,文件的优化处理,还有简易分享了从我们刚才上传进去的文件进行下载。需要掌握基本的开发...
  • Java 使用 FTP 实现大文件上传下载

    万次阅读 2017-05-08 02:22:12
    Java 上传下载 1G 以上的文件可以通过 http 协议或 ftp 实现,但是 http 协议对文件上传大小有限制,而且还不稳定,因此这里使用 ftp 上传。 ftp 上传方式有两种: 一、ASCII 传输方式:假定用户正在拷贝的文件...
  • java文件上传下载

    千次阅读 2011-06-17 16:24:00
    文件上传在web应用中非常普遍,要在jsp环境中实现文件上传功能是非常容易的,因为网上有许多用java开发的文件上传组件,本文以commons-fileupload组件为例,为jsp应用添加文件上传功能。common-fileupload组件是...
  • Java实现文件上传下载工具类

    千次阅读 2017-10-10 08:52:54
    本篇文章在Eclipse环境下采用Java语言实现文件上传下载工具类。上传时,为避免文件名在服务器中重复,采用“服务器时间(定义到毫秒)+文件名+文件后缀“的方式作为服务器上的文件名;下载过程中利用 spring mvc ...
  • 阿里对象存储 OSS 文件上传下载,图片上传java前言创建oss 空间购买流量获取Access Key文件上传和下载安装sdk上传下载图片上传和遍历图片上传遍历endpoint 一定要看这个,记着这个词,看这个 前言 本文章文字介绍...
  • java文件实现文件的上传下载

    万次阅读 多人点赞 2019-06-10 10:46:20
     文件上传下载java web中常见的操作,文件上传主要是将文件通过IO流传放到服务器的某一个特定的文件夹下,而文件下载则是与文件上传相反,将文件从服务器的特定的文件夹下的文件通过IO流下载到本地。...
  • java操作ftp上传下载文件(项目可下载) 1.java操作ftp需要引入外部的jar包 这里采用最新版本的commons-net-3.6.jar 下载链接 http://mvnrepository.com/artifact/commons-net/commons-net/3.6 -如果只是下载...
  • 使用AWS SDK for Java 上传下载文件

    千次阅读 2017-12-01 18:17:05
    使用AWS SDK for Java 上传下载文件。 已有 amazonaws.cn 中国区账号。 本文叙述了怎样获取访问密钥,进行demo配置,demo运行出错的解决办法。 1. 获取访问密钥 登录 https://console.amazonaws.cn/iam/home...
  • java上传下载、删除ftp文件

    万次阅读 2013-12-11 14:18:01
    java上传下载、删除ftp文件
  • java文件上传下载

    万次阅读 2019-03-06 19:54:21
    java文件上传下载,特记录,方便以后直接使用。不走弯路。 package com.bootdo.common.utils; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 223,616
精华内容 89,446
关键字:

java上传下载

java 订阅