多用户图片上传代码

package com.neutron.network.tcp.thread;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

/**
 * 图片上传多线程类
 * @author zhanght
 *
 */
public class PictureThread implements Runnable {
	/**
	 * 客户端socke服务
	 */
	private Socket socket;
	
	public PictureThread(Socket socket) {
		this.socket = socket;
	}
	
	@Override
	public void run() {
		int count = 0;
		String filePath = "/home/zhanght/";
		try {
			// 获取客户端信息
			String hostName = socket.getInetAddress().getHostName();
			// 获取客户端服务输入流
			InputStream in = socket.getInputStream();
			// 定义图片接收文件
			File file = new File(filePath + hostName + "(" + count + ").jpg");
			while (file.exists()) {
				file = new File(filePath + hostName + "(" + count++ + ").jpg");
			}
			// 创建文件输出流
			FileOutputStream fos = new FileOutputStream(file);
			// 创建缓冲区
			byte[] buff = new byte[1024];
			int len = 0;
			while ((len = in.read(buff)) != -1) {
				fos.write(buff, 0, len);
			}
			
			// 获取客户端服务输出流
			OutputStream out = socket.getOutputStream();
			out.write("图片上传成功".getBytes());
			
			out.close();
			fos.close();
			in.close();
			socket.close();
			
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}
package com.neutron.network.tcp.thread;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class PictureServer {
	/*
	 * 此时服务器端有局限,即必须执行一个一个地进行图片上传。不能同时上传多个文件。
	 * 例如,当a客户端连接后,被服务器端获取,服务器端执行具体流程;此时如果b客户端连接,只能进行等待。
	 * 因为此时服务器端还没有处理完a客户端请求。
 	 */
	@SuppressWarnings("resource")
	public static void main(String[] args) throws IOException {
		// 建立服务端的服务,ServerSocket,服务端服务绑定端口
		ServerSocket server = new ServerSocket(10008);
		while (true) {
			Socket socket = server.accept();
			System.out.println("client ip ::" + socket.getInetAddress().getHostAddress());
			new Thread(new PictureThread(socket)).start();
		}
	}

}

package com.neutron.network.tcp.thread;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;

/**
 * 图片上传客户端
 * @author zhanght
 *
 */
public class PictureClient {

	public static void main(String[] args) throws UnknownHostException, IOException {
		// 创建客户端,并且绑定服务器主机和端口号
		Socket client = new Socket("127.0.0.1", 10008);
		// 定义文件输入流
		FileInputStream fis = new FileInputStream("/home/zhanght/Pictures/001.png");
		// 获取客户端输出流
		OutputStream out = client.getOutputStream();
		
		// 向服务器端发送文件
		int len = 0;
		while ((len = fis.read()) != -1) {
			out.write(len);
		}
		// 添加文件结束标识,-1
		client.shutdownOutput();
		
		// 获取客户端输入流
		InputStream in = client.getInputStream();
		byte[] buff = new byte[1024];
		in.read(buff);
		System.out.println("server return::" + new String(buff));
		
		in.close();
		out.close();
		fis.close();
		client.close();
	}

}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
iPhoto多用户相册系统 v2.2,iPhoto多用户相册系统(简称 iPhoto,中国国家版权局著作权登记号 2005SRBJ1880)是基于.NET2.0平台,c#开发的,运用于Windows NT服务环境下,多用户相册程序的最贴心解决方案。 卓越的访问速度和负载能力: iPhoto 从创立之初即以提高产品效率为突破口,随着URL重定向,静态模板, ,asp.net数据缓存等机制的完美结合,坚固的数据结构及最优化数据库查询设计,使得 iPhoto 可以在极为繁忙的服务器环境下快速稳定运行,切实节约网站成本,提升网站形象. 手机拍照上: iPhoto支持手机拍照后上图片到自己的手机相册中,自动识别手机,真正实现即拍即。相册在电脑上与手机上都可以浏览,照片上通过WAP方式实现,特别适合GPRS包月的用户。所有的服务对于用户来说都是免费的.. 强大的皮肤: 采用业内领先的 动态控件+XHTML+CSS对皮肤分层,站长可以随心所欲制作行列,多种机制并存。用户可以随心所欲拖拽更换界面和风格, 从而定制强烈个人风格的空间,不再拘泥于程式,告别繁复的上用户只要光标轻松一点,便已达到目的.. 搜索引擎优化: 使您向用户提供更友好的易记的URL地址,就像IIS中真实建立的二级域名一样!更容易被搜索引擎收录 以实现大流量站点的需要及提高对搜索引擎的友好度。 完善的web2.0理念支持: RSS聚合,TrackBack引用,标签,等的完善支持。充分体现共享、自主、自由的互联网精神,从而把个人定制个性化的互联网本质,更好的展示出来。 方便强大的扩展性: 您只需要一点点asp.net或者根本不需要编码基础,就可以在您的网站上扩展提供给用户的模块或服务,只要您愿意,完全可以通过简单的操作,把整个系统整合成别具匠心、网上独一无二的精致的Yupoo。 iPhoto v2.2 Build[2008-5-22] 1.增加Rar压缩包批量上。 2.重新设计系统设置向导。 3.加强管理员管理功能。 CHINAZ编辑注:程序安装中如果用127.0.0.1安装提示连接数据库失败,谢使用(local)或localhost安装。本系统注册的第一个ID为管理员ID。
以下是一个示例代码,可以实现在uniapp中同时上多个图片: ```javascript // 在页面中定义上图片的方法 uploadFile() { uni.chooseImage({ count: 9, // 最多可以选择的图片张数 sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有 sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有 success: (res) => { // 返回选定照片的本地文件路径列表,tempFilePath可以作为img标签的src属性显示图片 const tempFilePaths = res.tempFilePaths; // 循环上图片 for (let i = 0; i < tempFilePaths.length; i++) { // 上图片到服务器 uni.uploadFile({ url: 'https://example.com/upload', // 上图片的接口地址 filePath: tempFilePaths[i], // 需要上图片的本地文件路径 name: 'file', // 上图片对应的 key 值,后端会根据这个值来获取文件对象 success: (res) => { // 上成功后的处理逻辑 console.log(res); }, fail: (err) => { // 上失败后的处理逻辑 console.log(err); } }); } } }); } ``` 在这个示例代码中,我们通过`uni.chooseImage`方法从相册或相机中选择了需要上图片,然后通过循环遍历的方式,将每一张图片到服务器上。在`uni.uploadFile`方法中,我们指定了上图片的接口地址、需要上图片的本地文件路径、上图片对应的 key 值,以及上成功和上失败后的处理逻辑。 需要注意的是,上图片需要服务器端的支持,需要在服务器端编写相应的接口来接收并处理上图片。同时,由于上多个图片可能会比较耗费时间和流量,建议在上过程中加入相应的提示信息,让用户知道上进度和状态。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值