精华内容
下载资源
问答
  • java上传超大文件解决方案

    千次阅读 2019-11-14 11:24:54
    JAVA实现大文件上传及显示进度信息 ---解析HTTPMultiPart协议... ... 一.... 各种WEB框架中,对于浏览器上传文件的请求,都有自己的处理对象负责对HttpMultiPart协议内容进行解析,并供开发人员调用请求的表单内容。...

    JAVA实现大文件上传及显示进度信息

    ---解析HTTP MultiPart协议

     (本文提供全部源码下载,请访问 https://github.com/1269085759/up6-jsp-mysql)

     

    大文件上传基础描述:

      各种WEB框架中,对于浏览器上传文件的请求,都有自己的处理对象负责对Http MultiPart协议内容进行解析,并供开发人员调用请求的表单内容。

    比如:

    Spring 框架中使用类似CommonsMultipartFile对象处理表二进制文件信息。

    而.NET 中使用HtmlInputFile/ HttpPostedFile对象处理二进制文件信息。

    优点:使用框架内置对象可以很方便的处理来自浏览器的MultiPart二进制信息请求,协议分析操作不用开发人员参与。

    缺点:其接收数据包过程完全被封闭在框架内置对象中,直到本次请求信息处理(接收)完毕后,才允许开发人员从接口调取表单及文件内容。上传过程中的进度信息无法访问,无法上传大尺寸文件(比如几百兆以上的大文件二进制信息)。

    目标:我们要在JAVA WEB框架中,依靠Filter过滤器的能力,实现不依靠框架内置对象,从浏览器请求字节流中解析MultiPart协议,取得本次用户请求的所有信息,包括多二进制文件信息及其他表单项信息。用户上传的文件尺寸将不受限制。而且在传输过程中,我们可以实时获得当前传输进度信息。

     

    注:.NET框架中可依靠IHttpModule接口对象达到JAVA框架中Filter的能力,本文不做描述。

     

    本文最终完成图:

     https://img-blog.csdnimg.cn/20181205120104413.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JjdWlkZW5naG9uZw==,size_16,color_FFFFFF,t_70

     

    1.1 普通Post请求协议及MultiPart协议

    普通POST请求协议,见图:

     https://images2015.cnblogs.com/blog/299741/201601/299741-20160108211451496-1936592087.png

    Content-Length为请求信息内容的字节长度

    最下方红圈内为本次表单请求信息

    MultiPart请求协议,见图:

     https://images2015.cnblogs.com/blog/299741/201601/299741-20160108211511856-205591580.png

     

    Content-Length 为本次请求的内容长度字节,本例729366

    Content-Type 为multipart/form-data,二进制多段表单

    Boundary为多段表单信息的分隔符,这里为-----------------------------------7dflaxxxxxxxxxxx

    最后一段信息中,name="file1",为本文件表单的单元名称,filename="untitled2.png"为该文件名,content-type: image/png为内容区文件格式

    最下方的红框中为该文件的二进制信息。

     

    由以上两图可见,MultiPart与普通的POST在协议结构上有明显区别,所以我们接下来的工作就是按字节流的方式接收MultiPart请求数据包,并对其进行分析。

     

    1.2 可实时获取当前传输进度信息

      由于我们可以从上述的Http头中获取本次请求内容区长度,即字节总量。由于我们可以从Filter中按字节单位接收来自浏览器的数据包,所以我们也能实时的获得当前接收字节量。因此我们可以实时的获得当前传输进度百分比,用当前接收的字节量除以接收时间即可获得当前传输率(字节/秒)。

      由此,我们可获得以下传输过程信息:

    ·         本次数据包总字节数

    ·         当前已接收的字节数

    ·         本次请求发起时间

    ·         当前进度节点时间

    ·         当前进度状态(初始状态,接收数据中,接收数据完毕等)

     https://img-blog.csdnimg.cn/20181205120139594.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JjdWlkZW5naG9uZw==,size_16,color_FFFFFF,t_70

      接下来,我们只需把这些进度信息以进度Id做标识(progId),在SERVER端放入Java框架中的一个公有内存区即可,在浏览器中我们可使用JS以一定时间间隔访问SERVER中的某一URL,以进度Id为标识,从SERVER的公有内存区获得当前请求的进度信息。取得信息后,即可实时操控进度条运行。

      在Java框架中,公有内存区为ServletContext对象(例,使用setAttribute方法,以键值对的形式将单个用户进度信息存入HashMap对象)。在.NET框架中,公有内存区为HttpApplicationState对象。

    注:向公有内存区(HashMap对象)写操作时要进行同步锁控制(synchronized),因为公有内存区可能会产生多用户(多线程)并发操作的现象。

     

    问题点分析:

    2.1 分段接收:

    因为一次传输的大文件MultiPart数据包,字节数可能会很大(1G甚至以上),为了获取实时进度信息,以及内存开销控制,我们需要将接收过程分成多段处理,即将数据包分段循环接收(例:每次循环只接收64K数据,期间即可更新当前的进度信息)。

     

    2.2 完整数据包解析?/部分数据包实时解析?

      普通的解析协议方式是,将数据包全部接收后,再进行解析。以下有两种方式实现。

      数据包全部加载入内存:对于大文件的MultiPart数据量来说,这种方式会占用大量内存(比如一个用户正在上传1G的数据,那么内存区必须接收到全部1G数据后才能进行解析,如果多用户同时操作会导致服务器崩溃),这种方式不可用。

      数据包全部写入文件后再加载入内存:只能解决在接收过程中开启小内存并分段写入文件,当数据全部写入文件后,还需要加载入内存中进行整体协议分析,也会突发性导致内存开销过大,导致服务器崩溃,这种方式也不可取。

      我们这里采用的是分段接收,分段解析,分段写文件的处理方式。当数据包全部接收完毕后我们的整个分析过程也即终止,并得到用户上传的文件及其他表单信息结果。这样我们每次只需要很小的内存区(比如64K)即可完成任务。

      但这种方式会面临本次接收的分段信息内含有多个表单项信息及剩余的不完整表单信息,或本次接收的分段信息实际上不包含任何表单信息,仅仅是大文件二进制信息的一个片段。所以,这种方式在编码上会带来一定的复杂度。

     

    情况1:

     https://images2015.cnblogs.com/blog/299741/201601/299741-20160108211834918-211275358.png

    情况2:

     https://images2015.cnblogs.com/blog/299741/201601/299741-20160108211902075-1514620545.png

     

    情况3:

     https://images2015.cnblogs.com/blog/299741/201601/299741-20160108211919653-637467725.png

     

     

    源码解析

    3.1 项目构成要点

     https://images2015.cnblogs.com/blog/299741/201601/299741-20160108211955668-1635451144.png

    本次我们采用Spring框架来实现“大文件传输”功能,要点设计结构图如下:

     https://images2015.cnblogs.com/blog/299741/201601/299741-20160108212034153-369135212.png

     

     

    Filter对象:

      用于负责接收MultiPart原始数据的Filter,用以在Spring内置对象之前接收用户请求。需要在Web.xml中进行配置,Web启动后,该Filter即启动,当用户请求到来时需要判断该MultiPart数据信息是否合法,接收并进行解析。

    ServletInputStream/BufferedInputStream对象:

      使用以上两对象,可对本次请求进行按字节流接收。在此可创建比较小的接收缓冲区,依靠BufferedInputStream的read进行分段循环接收。 

    getBoundarySectFromBuf()函数:

      自定义函数,我们需要该函数从分段缓冲区中分析可能包含的多个Form表单信息,或者部分表单信息,或者二进制文件片段信息。对于表单信息分析后填充表单数据结构,对于二进制文件信息需要写文件。该函数需要完成边接收边解析边写文件的重要工作。

    ProgressInfo对象:

      进度信息类,描述了一次上传请求的进度信息。该对象会用来被客户端轮询请求,以获得当前传输大文件过程中的进度信息。

    FormPart对象及listFormPart集合:

    FormPart对于单个Form表单的描述。listFormPart为本次请求的全部表单描述集合。即供后续代码调用的全部表单项内容。

    ControllergetProgInfo()处理函数:

      该函数将接受来自浏览器的“获得进度信息请求”,并从当前ServletContext公共内存区中找到与Progesss ID对应的进度信息对象ProgressInfo,以XML的形式返回给浏览器。该函数会被客户端轮询请求。

    multi-form.jsp页面:

      本次表单的显示页面,包含多种表单项(Input,Textarea,File等)。该页面还将显示用于本次传输的进度条,传输状态,传输率等信息。页面中进度信息将使用js向服务器进行周期性轮询请求,获得及显示。

    upload-result.jsp页面:

      用来显示本次请求的所有表单项信息,包括普通Input表单,及File表单信息。

     

    3.2 重点模块解析

    3.2.1 服务器端:

    3.2.2 浏览器端:

    (本节可参考示例代码中注释)

     

    扩展及相关

    4.1断点续传:

      一般常说的断点续传是指文件下载的断点续传。 即利用HTTP协议中的Content-Range关键字(在HTTP Header中),向服务器发请求,服务器接收请求后,查看Content-Range属性的文件偏移量,从而发送后续文件二进制信息给浏览器。比如网络蚂蚁类的下载软件,即开启多线程利用Content-Range关键字将某个网络资源分布接收,最终整合保存在本地。

      而在WEB中我们所使用的上传文件断点续传功能,大多是需要下载ActiveX控件来实现。即相当于在本地下载了一个应用程序,同服务器间文件传输协议也不用使用HTTP协议,可自定义协议完成。

      利用存粹的HTTP协议进行上传文件的断点续传目前还比较少,据说利用Ajax 中的Slice方法把本地文件分成多个HTTP包POST给服务器,而服务器需要将这些包接收后并整合来实现。操作方式比较复杂,本人没尝试过,有感兴趣的朋友可深入探讨。

     

    4.2本项目待完善要点:

      由于时间仓促,本项目目前只完成了大文件上传及进度显示的主要功能。在浏览器前端进度信息的动态显示上,前端使用的JS框架(Ext JS, JQuery)等都需要更深入的支持。

      在服务器端,也可以依靠对Filter的配置信息,对文件上传信息进行核查或过滤,比如不能上传某些扩展名的文件,文件上传尺寸控制,另存后的文件名唯一性控制等也都需要更细致的描述。

     

    附件文件列表:

    MultiData.txt :一次截获的全部MultiPart数据包信息

    multi-form.jsp:多文件上传显示页面,包括获取进度信息JS脚本

    upload_result.jsp:用于显示上传结果的表单项集合页面

    MultiForm.java:主过滤器,Filter。用来处理全部上传过程。

    UploadProgInfo.java:Controller层的Spring Bean对象,用来获取当前的进度信息。

     

    作者自述:

    本人从事十六年WINDOWS应用/游戏/设备/WEB/APP等开发,目前从事Linux,IaaS/PaaS/Docker及CAAS云平台架构设计及开发。

    基于全球开源共享理念,本人会分享更多原创及译文,让更多的IT人从中受益,与大家一起进步!

    寻找对云计算,云平台,容器技术感兴趣的伙伴,让计算资源像水一样在世界流动~

    详细参考信息:http://blog.ncmem.com/wordpress/2019/11/14/java%e4%b8%8a%e4%bc%a0%e8%b6%85%e5%a4%a7%e6%96%87%e4%bb%b6%e8%a7%a3%e5%86%b3%e6%96%b9%e6%a1%88/

    展开全文
  • 通过这次HttpURLConnection上传超大文件了解了更多内容:1.Java nio的MappedByteBuffer(内存映射),更快更高效读取大文件,读取超过2g的大文件import java.io.FileInputStream; import java.io.IOException; import ...

    通过这次HttpURLConnection上传超大文件了解了更多内容:

    1.Java nio的MappedByteBuffer(内存映射),更快更高效读取大文件,读取超过2g的大文件

    import java.io.FileInputStream;
    import java.io.IOException;
    import java.nio.MappedByteBuffer;
    import java.nio.channels.FileChannel;
    
    public class MappedBiggerFileReader {
        private MappedByteBuffer[] mappedBufArray;
        private int count = 0;
        private int number;
        private FileInputStream fileIn;
        private long fileLength;
        private int arraySize;
        private byte[] array;
    
        public MappedBiggerFileReader(String filePath, int arraySize) throws IOException {
            this.fileIn = new FileInputStream(filePath);
            FileChannel fileChannel = fileIn.getChannel();
            this.fileLength = fileChannel.size();
            this.number = (int) Math.ceil((double) fileLength / (double) Integer.MAX_VALUE);
            // 内存文件映射数组
            this.mappedBufArray = new MappedByteBuffer[number];
            long preLength = 0;
            // 映射区域的大小
            long regionSize = (long) Integer.MAX_VALUE;
            // 将文件的连续区域映射到内存文件映射数组中
            for (int i = 0; i < number; i++) {
                if (fileLength - preLength < (long) Integer.MAX_VALUE) {
                    // 最后一片区域的大小
                    regionSize = fileLength - preLength;
                }
                mappedBufArray[i] = fileChannel.map(FileChannel.MapMode.READ_ONLY, preLength, regionSize);
                // 下一片区域的开始
                preLength += regionSize;
            }
            this.arraySize = arraySize;
        }
    
        public int read() throws IOException {
            if (count >= number) {
                return -1;
            }
            int limit = mappedBufArray[count].limit();
            int position = mappedBufArray[count].position();
            if (limit - position > arraySize) {
                array = new byte[arraySize];
                mappedBufArray[count].get(array);
                return arraySize;
            } else {
                // 本内存文件映射最后一次读取数据
                array = new byte[limit - position];
                mappedBufArray[count].get(array);
                if (count < number) {
                    // 转换到下一个内存文件映射
                    count++;
                }
                return limit - position;
            }
        }
    
        public void close() throws IOException {
            fileIn.close();
            array = null;
        }
    
        public byte[] getArray() {
            return array;
        }
    
        public long getFileLength() {
            return fileLength;
        }
    }
    2.HttpURLConnection设置分块传输

          HttpURLConnection的输出流默认是PosterOutputStream,会缓存数据直到调用connection的getInputStream()(使用out.flush()无效)才将数据发送到服务器,因此在文件过大时会导致OutOfMemoryError。

          需要调用HttpURLConnection的setChunkedStreamingMode(int chunklen),即分块流模式,参数chunklen为缓存大小。设置分块传输后,输出流类型为HttpURLConnection$StreamingOutputStream,当缓存满了即传输数据到服务器。

    展开全文
  • SwfUpload 上传文件 java版DEMO SwfUpload 官网提供的demo都没有java版的,自己用的官网的页面写的一个。上传成功回传上传信息到页面。优化了官网的demo,增加删除附件下载附件。兼容ff chrome ie ,下载导入到...
  • Java上传Excel文件

    千次阅读 2018-03-27 21:12:35
    通过MultipartFile 获取Excel文件 public Rest upload(HttpServletRequest request, HttpServletResponse response, @RequestParam("file") MultipartFile file) throws IOException, ...

    通过MultipartFile 获取Excel文件

        public Rest upload(HttpServletRequest request, HttpServletResponse response,
                @RequestParam("file") MultipartFile file) throws IOException, ServletException {
            Map<String, Object> upload = excelUploadService.upload(request, response, file);
            List<Map<String, String>> list = new ArrayList<Map<String,String>>();
            if(upload.containsKey("error")){
                return Rest.info(StateCode.STATUS_CODE_FAILURE, "operation failed");
            }else if(upload.containsKey("success")){
                list = (List<Map<String, String>>) upload.get("success");
                return Rest.item(StateCode.STATUS_CODE_SUCCESS, list);
            }
            return null;
        }

    判断Excel文件版本,并将数据封装成Map

        public Map<String, Object> upload(HttpServletRequest request,
                HttpServletResponse response, MultipartFile file) 
                throws IOException, ServletException {
            String info = FileUtils.isLegal(file);
            Map<String, Object> map = new HashMap<String, Object>();
            List<Map<String, String>> list = new ArrayList<Map<String,String>>();
            if(info.equals("")){
                String post_fix = FileUtils.getPostFix(file.getOriginalFilename());
                ExcelVersion ev = null;
                if(post_fix.toLowerCase().equals("xls")){
                    ev = ExcelVersion.OFFICE_EXCEL_2003;
                }else if(post_fix.toLowerCase().equals("xlsx")){
                    ev = ExcelVersion.OFFICE_EXCEL_2007;
                }
                list = ExcelUploadServiceImpl.getData(file.getInputStream(), ev);
                map.put("success", list);
            }else{
                map.put("error", info);
            }
            return map;
        }

    getData()方法,判断版本,获取数据

        public static List<Map<String, String>> getData(InputStream inputStream, ExcelVersion version) throws IOException {
            ExcelParser parser  = null;
            List<Map<String, String>>  data = new ArrayList<Map<String,String>>();
            switch (version) {
            case OFFICE_EXCEL_2003:
                parser = new HExcelParser();
                data = parser.parse(inputStream);
                break;
            case OFFICE_EXCEL_2007:
                parser = new XExcelParser();
                data = parser.parse(inputStream);
                break;
            default:
                break;
            }
            //遍历所有数据,把没有值的赋值null
            List<Map<String, String>> temList = fillNull(data);
            return temList;
        }

    parse()方法,拆解Excel,封装数据。

        public List<Map<String, String>> parse(InputStream inputStream) throws IOException {
            HSSFWorkbook hssfWorkbook = new HSSFWorkbook(inputStream);
            List<Map<String, String>> list = new ArrayList<Map<String, String>>();
            // 循环工作表Sheet
            for (int numSheet = 0; numSheet < hssfWorkbook.getNumberOfSheets(); numSheet++) {
                HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(numSheet);
                if (hssfSheet == null) {
                    continue;
                }
    
                // 循环行Row
                for (int rowNum = 0; rowNum <= hssfSheet.getLastRowNum(); rowNum++) {
                    HSSFRow hssfRow = hssfSheet.getRow(rowNum);
                    if (hssfRow == null) {
                        continue;
                    }
                    Map<String, String> map = new LinkedHashMap<String, String>();
    
                    // 循环列Cell
                    for (int cellNum = 0; cellNum < hssfRow.getLastCellNum(); cellNum++) {
                        HSSFCell hssfCell = hssfRow.getCell(cellNum);
                        if (hssfCell == null) {
                            map.put(cellNum + "", "");
                            continue;
                        }
                        map.put(cellNum + "", getValue(hssfCell));
                    }
                    list.add(map);
                }
                break;
            }
            return list;
        }

    OK,此时,我们已经将Excel数据封装成Map了。获取结果(Json)为:
    你可以的对该Excel中数据进程操作了。

    [
      {
        "0": "标题一",
        "1": "标题二",
        "2": "标题三",
        "3": "标题四",
        "4": "标题五"
      },
      {
        "0": "值1.1",
        "1": "值2.1",
        "2": "值3.1",
        "3": "值4.1",
        "4": "值5.1"
      },
        {
        "0": "值1.2",
        "1": "值2.2",
        "2": "值3.2",
        "3": "值4.2",
        "4": "值5.2"
      },
        {
        "0": "值1.3",
        "1": "值2.3",
        "2": "值3.3",
        "3": "值4.3",
        "4": "值5.3"
      }
    ]
    展开全文
  • java上传zip文件

    千次阅读 2020-03-10 16:44:32
    文件上传大家都是知道怎么写的,前几天用到了上传zip文件的方法,在这里记录一下,希望可以帮助到大家! /**** * 上传解析zip * @param file */ @RequestMapping("uploadZip") public void uploadZip...

    文件上传大家都是知道怎么写的,前几天用到了上传zip文件的方法,在这里记录一下,希望可以帮助到大家!

      /****
         * 上传解析zip
         * @param file
         */
        @RequestMapping("uploadZip")
        public void uploadZip(MultipartFile file) {
            String zipFileName;
            String teachId;
            String fileName;
            try {
                ZipInputStream zipInputStream = new ZipInputStream(file.getInputStream(), Charset.forName("GBK"));
                BufferedInputStream bs = new BufferedInputStream(zipInputStream);
                ZipEntry zipEntry;
                byte[] bytes = null;
                while ((zipEntry = zipInputStream.getNextEntry()) != null) {
                    zipFileName = zipEntry.getName();
                    // 只读取docx的文件
                    String docx = zipFileName.substring(zipFileName.length() - 4, zipFileName.length());
                    if (zipEntry.getSize() > 0 && docx != null && "docx".equals(docx)) {
                        bytes = new byte[(int) zipEntry.getSize()];
                        bs.read(bytes, 0, (int) zipEntry.getSize()); 
                        MultipartFile multipartFile = new MockMultipartFile(fileName, new ByteArrayInputStream(bytes));
                        
                    }
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    很简单,没有很多代码,拿到MultipartFile 就可以做我们的业务逻辑了

    pom文件引入

    <dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-test</artifactId>
    			<version>5.0.7.RELEASE</version>
    		</dependency>

    好了,到这里,上传zip文件的代码就没有了,希望可以帮助到大家!如果有用或者错误的话,希望大家多多评论,关注。

    展开全文
  • java上传zip文件并解压读取

    万次阅读 2019-09-27 17:59:56
    文件上传 文件上传有很多方法,这里推荐一个自己感觉挺好用的一种,代码奉上: @PostMapping(value = "/import", headers = "content-type=multipart/*") public R importSqlLite(@RequestParam...
  • java上传文件到服务器

    热门讨论 2009-06-17 16:36:22
    java上传文件到服务器,将本地的文件上传到服务器上去
  • java后台发起上传文件的post请求(http和https)

    万次阅读 多人点赞 2019-07-31 19:11:04
    对于文件上传,客户端通常就是页面,在页面里实现上传文件不是什么难事,写个form,加上enctype="multipart/form-data",在写个接收的就可以了,没什么难的。如: <!DOCTYPEhtml> <html> <head> ...
  • Java MultipartFile 上传文件/上传图片1. 判断允许上传文件的 后缀/图片后缀工具类2. 上传接口3. 上传成功 1. 判断允许上传文件的 后缀/图片后缀工具类 import org.springframework.stereotype.Component; import ...
  • java文件实现文件上传和下载

    万次阅读 多人点赞 2019-06-10 10:46:20
    ·简介  文件上传和下载是java web中常见... 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用Servlet获取上传文件的输入流然后再解析里面的请求参数是比较麻烦,所以一般选...
  • JAVA上传文件错误java.lang.NoSuchMethodException
  • Java上传文件到数据库

    千次阅读 2016-02-29 20:22:30
    Java上传文件到数据库  首先在开始本文之前推荐一篇我非常喜欢的博主——孤傲苍狼的一篇相关博文。  JavaWeb学习总结(五十)——文件上传和下载   http://www.cnblogs.com/xdp-gacl/p/4200090.html  本文主要...
  • java上传文件解决方案

    千次阅读 2019-08-09 14:03:29
    需求:项目要支持大文件上传功能,经过讨论,初步将文件上传大小控制在500M内,因此自己需要在项目中进行文件上传部分的调整和配置,自己将大小都以501M来进行限制。 第一步: 前端修改 由于项目使用的是BJUI...
  • java实现超大文件的读写

    千次阅读 2014-12-08 12:58:37
    一、对于几百M或上G的大文件可使用java nio进行读写 , 根据个人的需求 可能需要将一个超大文件读写形成很多较小的文件进行分析,这也不是什么难事,在读完一个缓冲区后 更换写入的对象即可,本文就不做详细介绍了...
  • Java图片上传/文件上传

    千次阅读 2016-11-18 11:23:33
    Spring+SpringMVC 图片上传/文件上传
  • edtftpj让Java上传FTP文件支持断点续传

    千次阅读 热门讨论 2012-12-05 14:50:14
    在用Java实现FTP上传文件功能时,特别是上传大文件的时候,可以需要这样的功能:程序在上传的过程中意外终止了,文件传了一大半,想从断掉了地方继续传;或者想做类似迅雷下载类似的功能,文件太大,今天传一半,睡...
  • JAVA上传文件到FTP

    千次阅读 2019-06-24 11:25:08
    需求说明:将指定文件上传到FTP,上传成功后修改文件名。 获取文件名及路径(这里是从数据库获取,所以前面的代码就不CV了) /** * 测试上传 * @param map 从数据库获取到的文件信息 (包含文件路径FILE_...
  • java上传文件到远程服务器七牛云

    千次阅读 2017-06-08 20:18:47
    如下: java上传文件到远程服务器(一)---HttpURLConnection方式java上传文件到远程服务器(二)---HttpClient方式如果说 不想自己搭建 静态资源Linux服务器的话,现在有很多免费的静态资源云服务可以使用。本文记录...
  • java上传 压缩包文件

    万次阅读 2014-12-11 13:23:43
    import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.Enumeration; impo
  • java上传图片文件

    万次阅读 多人点赞 2013-06-30 22:46:27
    总的说图片上传有两种方式,一种是把图片文件写到数据库中,另一种是存到服务器文件目录中。写到数据库中的图片文件需要转换成二进制流的格式,占用数据库空间比较,适合少量图片的存储,比如说,系统中某些小图标,...
  • Java文件上传实例并解决跨域问题

    千次阅读 多人点赞 2021-09-03 20:06:44
    本文内容为Java文件上传实例并解决跨域问题,其中重点讲解了文件上传,MultipartFile接口的使用,配置nginx,以及解决文件上传跨域的问题
  • java ftpClient 上传文件时总是卡在"storeFile()"方法解决方案。 搜集了很久的资料一直在找卡在storeFile()方法的原因,网上都说设置这行代码 ftpClient.enterLocalPassiveMode(); 但是我一开始就添加了。。。。。 ...
  • java上传本地文件到HDFS简单demo

    万次阅读 2018-01-15 15:10:52
    本文整理了上传文件到hdfs的三种java代码,均已测试通过 1、创建maven项目  2、pom依赖 junit junit 3.8.1 test org.apache.hadoop hadoop-client 2.7.3
  • JAVA上传文件图片到服务器保存

    万次阅读 热门讨论 2017-04-10 11:58:57
    这里我记录一个比较简单方便操作的JAVA上传文件图片到服务器并且保存! 首先是页面 html的 我这是提交一个文件和类型 <div style="border: 1px solid red;"> 我是添加一张临时图片得到微信的media_...
  • java 实现html5多文件选择上传_h5多文件上传_ajax异步多文件上传_java处理多文件上传 html页面如下 muti file upload method="POST" enctype="multipart/form-
  • FastDFS通过java上传文件到服务器

    万次阅读 多人点赞 2018-08-10 17:39:18
    ... ... ...三、FastDFS使用流程...我们在项目中使用fastdfs+nginx+mysql实现上传附件的功能,主要原理就是将附件上传到fastdfs得到一个文件的链接路径url,我们获取到这个url将他以字符串形式保存到我们的mysql中,下...
  • JAVA上传EXCEL文件

    千次阅读 2009-04-07 15:08:00
    //获取上传文件 MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; //将上传文件保存到临时目录 MultipartFile file = multipartRequest.getFile("file");
  • java+jquery文件上传,无刷新上传,显示上传进度(如5%),上传速度,已上传大小,剩于大小,已上传时间,统计上传所需时间,统计还剩多长时间
  • java上传文件到FTP服务器

    万次阅读 2019-03-17 00:58:52
    前段时间,项目中使用到了上传文件到FTP服务器,再此略作整理,形成一个util工具,方便日后使用。 项目代码已上传至github:https://github.com/hack-feng/ftpdemo.git 点击直接前往 首先定义一个FTP服务器和上传...
  • postman测试java接口上传文件

    千次阅读 2018-07-31 09:09:39
    打开postman,在网址栏写入自己上传文件的网址,也就是你有上传功能的java文件运行后出来的网址。 如图 ,然后选择body加入如图的键值对。点击send便成功了。 如果你报错 则说明你该目录下没有upload...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 412,211
精华内容 164,884
关键字:

java上传超大文件

java 订阅