上传文件

JAVA 从网页上传文件到HDFS ,单文件上传和多文件上传 // 1文件上传 @Service public class HDFSClient<jsonObjectS> { public Boolean upload1(InputStream in, String remoteDst) { Configuration conf = new Configuration(); FileSystem ... 阅读详情

 

 

 



 



 

 

我的外网IP     192.168.1.15

 

 

 

 

启动tomcat

 

 

 

 

服务器端:

 

另起一个eclipse,换工作空间,新建一个java项目。

 

 

 

 

在包com.li.util里新建UploadFile.java:

 

package com.li.util;

 

import java.io.Serializable;

 

@SuppressWarnings("serial")

public class UploadFile implements Serializable {

  private String title ;

  private byte [] contentData ;

  private String mimeType ;

  private long contentLength ;

  private String ext ;

  public String getTitle() {

     return title;

  }

  public void setTitle(String title) {

     this.title = title;

  }

  public byte[] getContentData() {

     return contentData;

  }

  public void setContentData(byte[] contentData) {

     this.contentData = contentData;

  }

  public String getMimeType() {

     return mimeType;

  }

  public void setMimeType(String mimeType) {

     this.mimeType = mimeType;

  }

  public long getContentLength() {

     return contentLength;

  }

  public void setContentLength(long contentLength) {

     this.contentLength = contentLength;

  }

  public String getExt() {

     return ext;

  }

  public void setExt(String ext) {

     this.ext = ext;

  }

}

 

 

 

 

 

 

在包com.li.server里新建ServerThreadUtil.java:

 

package com.li.server;

 

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.ObjectInputStream;

import java.io.OutputStream;

import java.io.PrintStream;

import java.net.Socket;

import java.util.UUID;

 

import com.li.util.UploadFile;

 

public class ServerThreadUtil implements Runnable {

  private static final String DIRPATH = "D:" + File.separator + "liyewenfile"

       + File.separator; // 目录路径

  private Socket client = null;

  private UploadFile upload = null;

 

  public ServerThreadUtil(Socket client) {

     this.client = client;

     System.out.println("新的客户端连接...");

  }

 

  @Override

  public void run() {

     try {

       PrintStream out = new PrintStream(this.client.getOutputStream());

       ObjectInputStream ois = new ObjectInputStream(

            client.getInputStream()); // 反序列化

       this.upload = (UploadFile) ois.readObject(); // 读取对象

       System.out.println("文件标题:" + this.upload.getTitle());

       System.out.println("文件类型:" + this.upload.getMimeType());

       System.out.println("文件大小:" + this.upload.getContentLength());

       out.print(this.saveFile()) ;

     } catch (Exception e) {

       e.printStackTrace();

     } finally {

       try {

         this.client.close();

       } catch (IOException e) {

         e.printStackTrace();

       }

     }

  }

 

  private boolean saveFile() throws Exception { // 负责文件内容的保存

     File file = new File(DIRPATH + UUID.randomUUID() + "."

         + this.upload.getExt());

     if (!file.getParentFile().exists()) {

       file.getParentFile().mkdir();

     }

     OutputStream output = null;

     try {

       output = new FileOutputStream(file) ;

       output.write(this.upload.getContentData()) ;

       return true ;

     } catch (Exception e) {

       throw e;

     } finally {

       output.close();

     }

  }

}

 

 

 

 

 

在包com.li.server里新建MyServer.java:

 

package com.li.server;

 

import java.net.ServerSocket;

 

public class MyServer {

 

  public static void main(String[] args) throws Exception {

     ServerSocket server = new ServerSocket(8888); // 服务器端端口

     boolean flag = true; // 定义标记,可以一直死循环

    while (flag) { // 通过标记判断循环

       new Thread(new ServerThreadUtil(server.accept())).start(); // 启动线程

     }

     server.close(); // 关闭服务器

  }

 

}

 

 

 

 

 

 

 

 

客户端:

 

 

在sdcard里面存放一张名为disney的图片。

 

 

在main.xml中:

 

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout

  xmlns:android="http://schemas.android.com/apk/res/android"

  android:orientation="vertical"

  android:layout_width="fill_parent"

  android:layout_height="fill_parent"

  android:gravity="center_horizontal"

  android:background="#000000">

  <Button

     android:id="@+id/send"

     android:layout_marginTop="8dp"

     android:layout_width="160dp"

     android:layout_height="40dp"

     android:background="#3399ff"

     android:textColor="#ffffff"

     android:text="连接SocketServer" />

  <TextView

     android:id="@+id/info"

     android:gravity="center_horizontal"

     android:layout_marginTop="8dp"

     android:layout_width="fill_parent"

     android:layout_height="wrap_content"

     android:textColor="#ffffff"

     android:text="等待服务器端发送回的显示信息...." />

</LinearLayout>

 

 

 

 

 

在com.li. util包UploadFile.java中:

 

package com.li.util;

 

import java.io.Serializable;

 

@SuppressWarnings("serial")

public class UploadFile implements Serializable {

  private String title ;

  private byte [] contentData ;

  private String mimeType ;

  private long contentLength ;

  private String ext ;

  public String getTitle() {

     return title;

  }

  public void setTitle(String title) {

     this.title = title;

  }

  public byte[] getContentData() {

     return contentData;

  }

  public void setContentData(byte[] contentData) {

     this.contentData = contentData;

  }

  public String getMimeType() {

     return mimeType;

  }

  public void setMimeType(String mimeType) {

     this.mimeType = mimeType;

  }

  public long getContentLength() {

     return contentLength;

  }

  public void setContentLength(long contentLength) {

     this.contentLength = contentLength;

  }

  public String getExt() {

     return ext;

  }

  public void setExt(String ext) {

     this.ext = ext;

  }

}

 

 

 

 

 

 

在com.li. clientproject包MyClientDemo.java中:

 

package com.li.clientproject;

 

import java.io.BufferedReader;

import java.io.ByteArrayOutputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.ObjectOutputStream;

import java.net.Socket;

 

import com.li.util.UploadFile;

 

import android.app.Activity;

import android.os.Bundle;

import android.os.Environment;

import android.os.Handler;

import android.os.Message;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.TextView;

 

public class MyClientDemo extends Activity {

  private Button send = null;

  private TextView info = null;

  private static final int FINISH = 0 ;

  private Handler myHandler = new Handler(){

 

     @Override

     public void handleMessage(Message msg) {

       switch(msg.what) {

       case FINISH:

         String result = msg.obj.toString() ; // 取出数据

         if ("true".equals(result)) {

            MyClientDemo.this.info.setText("操作成功!");

         } else {

            MyClientDemo.this.info.setText("操作失败!");

         }

         break ;

       }

     }

  } ;

 

  @Override

  public void onCreate(Bundle savedInstanceState) {

     super.onCreate(savedInstanceState);

     super.setContentView(R.layout.main);

     this.send = (Button) super.findViewById(R.id.send);

     this.info = (TextView) super.findViewById(R.id.info);

     this.send.setOnClickListener(new SendOnClickListener());

  }

 

  private class SendOnClickListener implements OnClickListener {

     public void onClick(View v) {

       try {

         final Socket client = new Socket("192.168.1.15", 8888);

         final BufferedReader buf = new BufferedReader(new InputStreamReader(

              client.getInputStream())); // 读取返回的数据

         new Thread(new Runnable() {

 

            public void run() {

              try {

                ObjectOutputStream oos = new ObjectOutputStream(

                     client.getOutputStream());

                UploadFile myFile = SendOnClickListener.this

                     .getUploadFile();

                oos.writeObject(myFile);

                String str = buf.readLine() ; // 读取数据

                oos.close();

                Message msg = MyClientDemo.this.myHandler

                     .obtainMessage(FINISH, str);

                MyClientDemo.this.myHandler.sendMessage(msg) ;

                buf.close();

                client.close();

              } catch (Exception e) {

                e.printStackTrace() ;

              }

            }

         }).start();

       } catch (Exception e) {

         e.printStackTrace();

       }

     }

 

     private UploadFile getUploadFile() throws Exception { // 包装了传送数据

       UploadFile myFile = new UploadFile();

       myFile.setTitle("图片"); // 设置标题

       myFile.setMimeType("image/jpeg"); // 图片的类型

       File file = new File(Environment.getExternalStorageDirectory()

            .toString() + File.separator + "disney.jpg");

       InputStream input = null;

       try {

         input = new FileInputStream(file); // 从文件中读取

         ByteArrayOutputStream bos = new ByteArrayOutputStream();

         byte data[] = new byte[1024];

         int len = 0;

         while ((len = input.read(data)) != -1) {

           bos.write(data, 0, len);

         }

         myFile.setContentData(bos.toByteArray());

         myFile.setContentLength(file.length());

         myFile.setExt("jpg");

       } catch (Exception e) {

         throw e;

       } finally {

         input.close();

       }

       return myFile;

     }

 

  }

 

}

 

 

 

在AndroidManifest.xml中修改权限:

 

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

    package="com.li.clientproject"

    android:versionCode="1"

    android:versionName="1.0" >

 

    <uses-sdk

        android:minSdkVersion="8"

        android:targetSdkVersion="15" />

  <uses-permission android:name="android.permission.INTERNET" />

    <application

        android:icon="@drawable/ic_launcher"

        android:label="@string/app_name"

        android:theme="@style/AppTheme" >

        <activity

            android:name=".MyClientDemo"

            android:label="@string/title_activity_my_client_demo" >

            <intent-filter>

                <action android:name="android.intent.action.MAIN" />

 

                <category android:name="android.intent.category.LAUNCHER" />

            </intent-filter>

        </activity>

    </application>

 

</manifest>

 

 

单文件上传和多文件上传 单文件上传和多文件上传需要导入的jar包前端代码单文件上传多文件上传 需要导入的jar包 commons-io.xx.jar commons-fileupload.xx.jar 前端代码 //前端 //表单必须是post方式提交,必须添加enctype属性,值为:multipart/form-data <form action= "${pageContext.request.contextPath}/dev/appInfo" method= "post" enctype ="multipart/fo 阅读详情

相关推荐

YOLOv5轻量化实战:从Ghost模块到工业级部署的完整指南

本文详细介绍了YOLOv5轻量化实战,重点解析了Ghost模块在工业检测中的应用及其优化策略。通过Ghost卷积技术,模型参数量和GFLOPs显著降低,同时保持高精度,适用于实时性要求严格的工业场景。文章还提供了从模型优化到TensorRT加速的完整部署指南,助力开发者实现高效工业级应用。

weixin_28223453的博客 487

大文件上传

大文件上传

lan7798的博客 5243

用UDP协议在dos命令行里模拟一个聊天程序

/* 需求: 在dos命令行里模拟一个聊天程序 有收数据的部分,和发数据的部分,这两部分需要同时执行。 那就需要用到多线程技术。 一个线程控制收,一个线程控制发。 */ import java.io.*; import java.net.*; class C

s_x_x的记录 1955

Java大文件上传、分片上传、多文件上传、断点续传、上传文件minio、分片上传minio等解决方案

文件上传花样百出,根据不同场景使用不同方案进行实现尤为必要。通常开发过程中,文件较小,直接将文件转化为字节流上传到服务器,但是文件较大时,用普通的方法上传,显然效果不是很好,当文件上传一半中断再次上传时,发现需要重新开始,这种体验不是很爽,下面介绍几种好一点儿的上传方式。这里讲讲如何在Spring boot 编写上传代码,如有问题可以在下留言,我并在文章末尾附上Java上传源码供大家下载。

经历过大厂、小厂风风雨雨的程序佬 4361

IEC61850建模实战:从标准解读到ICD文件生成

本文详细介绍了IEC61850建模的实战过程,从标准解读到ICD文件生成,涵盖了变电站自动化系统的结构化数据模型设计。通过分层结构、标准服务映射和XML文件解析,帮助读者掌握电力系统智能电子设备的标准化建模方法,提升工程实施效率。

weixin_30823001的博客 414

YALMIP介绍及怎么在Matlab中加YALMIP、SDPT3

目录YALMIP简介怎么在Matlab中加YALMIP?1. 创建决策变量:2. 添加约束:3. 参数配置4. 求解怎么在MatlabR2019a中加YALMIP?1.下载工具包2.放置工具包3.添加路径4.测试安装结果怎么在MatlabR2019a中加SDPT3? YALMIP简介 怎么在Matlab中加YALMIP? yalmip是一位“集大成者”,它不仅自己包含基本的线性规划求解算法,比如linprog(线性规划)、bintprog(二值线性规划)、bnb(分支界定算法)等,他还提供了对cpl

m0_51431440的博客 2万+

servlet文件上传、多文件上传

文章目录一、课程目标二、基于Jar文件上传2.1 原理2.2 书写2.3 多文件上传三、基于注解文件上传3.1 原理2.2 书写四、文件下载4.1 原理4.2 书写五、LayUI文件上传组件5.1 使用5.2 配置属性 一、课程目标 【理解】servlet文件上传原理 【理解】servlet基于jar包文件上传 【掌握】servelt3.0注解形式的文件上传 【理解】多文件上传 【了解】文件下载原理 【理解】LayUi文件上传组件的使用 二、基于Jar文件上传 2.1 原理 将客户端的文件以流的形式进行解

温故。的博客 2539

CMIP6数据处理及在气候变化、水文、生态等领域中的应用

CMIP6、Biome-BGC、生态、气候变化、气象、水文、气候模式、植被、生态模式、遥感、极端气候、降水、WRF模式、动力降尺度、RCM、大气环流模型、贝叶斯模型、、降尺度

PhyliciaFelicia的博客 1539

PHP的单个文件上传、多个单文件上传、多文件上传

单文件上传 upload1.php 单文件上传 请选择您要上传的文件: 我们提交到 doAction5.php <?php /** * Created by PhpStorm. * User: DreamBoy * Date: 2016/4/8 * Time: 21

梦空间 4847

【Azure 架构师学习笔记】- Azure Databricks (1) - 环境搭建

Databricks 已经成为了数据科学的必备工具,今时今日你已经很难抛开它来谈大数据,它常用于做复杂的ETL中的T, 数据分析,数据挖掘等,特别适用于做数据建模,机器学习等。那么顺应时代,现在也来看看这个工具的内容。首先要有一个环境,基于Azure 的Databricks简称ADB。托管在Azure 上的Databricks已经被Azure进行了很大的优化, 在搭建时只需要简单的几步即可拥有一个环境,不过要提醒一句ADB的集群并不便宜,用完马上删掉或停止, 否则一晚过百美金就会烧掉。

MVP黄钊吉(發糞塗牆) 2298

2025最新正版Autodesk 3ds Max 2022安装教程:从下载到中文环境配置全流程解析

Autodesk 3ds Max 2022是一款专业的三维建模、动画和渲染软件,广泛应用于影视制作、游戏开发、建筑可视化等领域。

waicsdn_haha的博客 1万+

Java文件上传(最详细的单文件上传,多文件上传和异步上传)

form>

刘浩琦的博客 5440

C#解析基恩士(KEYENCE)PLC数据:KV协议通信与实时监控实现

KV协议是基恩士PLC使用的一种专用通信协议,通常用于与上位机进行数据交换。KV协议通过RS-232C、RS-485、Ethernet等接口与上位机通信,支持多种数据类型的读写,包括但不限于位、字、双字、浮点数等。简洁易用:KV协议的通信格式简单,易于实现。支持多种数据类型:支持位数据、字数据、定长字符串等。高效实时性:能够提供较高的实时数据交换性能,适合实时监控应用。本文介绍了如何通过C#与基恩士KV系列PLC进行通信,实现数据的解析和实时监控功能。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1806

【SpringBoot】文件上传(基础上传、上传文件限制、上传多个文件)

文件上传 文件上传是Web开发非常重要的操作 结合SpringBoot实现文件上传操作 1、基础上传 SpringBoot采用FileUpload组件实现上传处理,在控制器中可以使用MultipartFile类进行接收。 FileUpload上传 MultipartFile接收 1、建立上传控制器UploadController,利用MultipartFile将上传文件保存在本地磁盘。 一个上传文件的接口,访问接口选择把要上传的文件利用MultipartFile上传保存在本地磁盘中。 @Controlle

渐若窥宏大的博客 2万+

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

java文件上传Minio——文件、文件分片上传

关于文件上传Minio的一些基本介绍(如文件上传、分片上传、md5值秒传、断点续传等); 本文主要介绍的是单文件上传minio、多文件分片上传minio的demo!其他上传方式请留言主页文章哦!

qq_45778079的博客 8363

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

【JavaWeb】文件的上传

文件上传:将本地的文件通过流写入到服务器的过程。

wang_qiu_hao的博客 6829

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

SpringMVC的文件上传、多文件上传

对于上传功能,我们在项目中是经常会用到的,比如用户注册的时候,上传用户头像,这个时候就会使用到上传的功能。而对于下载,使用场景也很常见,比如我们项目中有个使用说明是是pdf版的,会提供给用户进行下载的功能。默认情况下,enctype的值是有三个: 1、application/x-www-form-urlencoded,只能上传文本格式的文件,用文本的传输和MP3等大型文件的时候,使用这种编码就显得 效率低下。表单的enctype属性是:enctype=“multipart/form-data”

weixin_51996255的博客 1794

超大文件上传-如何上传文件-大文件上传

总结一下大文件分片上传和断点续传的问题。因为文件过大(比如1G以上),必须要考虑上传过程网络中断的情况。http的网络请求中本身就已经具备了分片上传功能,当传输的文件比较大时,http协议自动会将文件切片(分块),但这不是我们现在说的重点,我们要做的事是保证在网络中断后1G的文件已上传的那部分在下次网络连接时不必再重传。所以我们本地在上传的时候,要将大文件进行分片,比如分成1024*1024B,即...

Mr_Zang666的博客 932

文件上传下载之文件上传

13.1  文件上传 13.1.1  概述 在开发基于Web的应用的时候,经常会碰到需要实现文件上传、下载的功能,比如编辑某个商品,需要给它上传一个图片等等。 不使用Struts2的话,可以有很多种方式来实现文件上传,比如使用Apache的Common-FileUpload等。但是这些传统的方式,实现起来非常麻烦,需要写很多代码来进行控制。 现在使用Struts2来实现文件上传的功能,会

吧主 1344

SpringMVC使用MultipartFile文件上传,多文件上传,带参数上传

一、配置SpringMVC 二、单文件与多文件上传 三、多文件上传 四、带参数上传 一、配置SpringMVC 在spring.xml中配置: <!-- springmvc文件上传需要配置的节点--> <bean id="multipartResolver" class="org.springframework.web.multipart.comm...

weixin_39214481的博客 5848

上传大文件 —— 切片上传

切片上传是将大文件分割成小块(分片),分别上传到服务器,然后在服务器端重新组装成完整的文件。这种方法可以减少单次上传的负载,同时更容易处理网络中断或失败的情况。

QiuXiang_的博客 1693

文件的上传

文件的上传 文件上传的概述 问题:什么是文件上传?为什么使用文件上传? 就是将客户端资源,通过网络传递到服务器端。 就是因为数据比较大,我们必须通过文件上传才可以完成将数据保存到服务器端操作. 文件上传的本质:就是IO流的操作。 演示:文件 上传应该 怎样操作? 浏览器端: 1.method=post 只有post才可以携带大数据 2.必须使用<input type='file...

SYJ_1835_LPM的博客 1178

文件上传下载系列——大文件分片上传

文件分片上传又叫文件切片上传,是将大文件切分成小的文件片段,分别上传到服务器,并在服务器端将这些文件片段合并成完整的文件。

devops 1505

大文件分片上传、断点上传

大文件分片上传断点续传

weixin_43190539的博客 4415

在html中实现文件上传、文件分块上传功能

在html中实现文件上传、文件分块上传功能

easydvlp的博客 3211

flex struts2单文件上传、同名文件上传、多文件上传

flexbuilder:3 ,Myeclipse:10.0,struts:2.3. 工程可以在http://download.csdn.net/detail/fansy1990/6621255下载 flex使用FileReference实现单文件上传,使用FileReferenceList实现多文件上传。 1. 单文件上传: flex单文件上传,一般要经过哪些步骤呢? (1)初始化一个F

fansy1990的专栏 3134
上一篇: Echo程序
下一篇: 使用HTML定义界面
Android人生
博客等级 码龄14年 14粉丝 184原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值