精华内容
下载资源
问答
  • jquery多图片上传,手机图片上传电脑上传图片
  • ipad图片如何快速传到电脑.docx
  • android_Socket网络编程实现手机图片上传到电脑

    万次阅读 热门讨论 2013-11-22 17:39:48
    socket编程,实现手机图片上传到电脑

    socket编程机制:客户端与服务端通过socket套接字连接后都会返回一个实例对象,分别保存这个对象,就相当于保存的对方的地址。Socket理解为一个可以连通网络上不同计算机程序之间的管道,把一堆数据从管道的A端扔进去,则会从管道的B端出来。管道的端口由两个因素来唯一确认,即机器的IP地址和程序所使用的端口号。端口号就是程序员指定的一个数字,许多著名的木马程序在网络上扫描不同的端口号就是为了获取一个可以连通的端口从而进行破坏。程序不要使用太小的端口号,它们一般被系统占用了,也不要使用一些常用的端口,一般来说使用1000~5000之内的端口比较好

    实现功能:

    1.实现手机相册中的单个图片上传到电脑指定路径。(手机相册存在固定位置/sdcard/DCIM/Camera/...)

    输入*.jpg,*.jpeg等

    2.修改之前上传固定位置的单个图片为输入相册中的多个图片名称,用逗号“,”分隔开,然后上传到电脑,提示用户是否上传成功。

    3.因为上传照片很难分清哪个照片需要添加照片描述,后来想使用ExpandableListView下拉列表让用户选择图片内容类型,选择后自动添加到输入框和图片名称以“:”分开,上传电脑以此描述类型命名为图片名称,为防止图片重名,前面加上上传时原图片名称,上传同一张图片时才会发生覆盖,不会引起图片丢失,还能直观查看图片内容描述。

    4.改善项目功能范围太小的缺陷,添加输入手机内某个文件所在路径,就可获取路径下的所有图片全部上传到电脑。

    注意测试时最好用真机,否则虚拟机虚拟内存没有图片无法测试功能是否成功

    1.首先搭建好客户端环境,新建android-project ,新建activity

        将手机中的图片发送字节给服务端

    2.创建手机界面布局mainactivity.xml

          界面中有textview、EditText、Button、ExpandableListView控件

    这里的界面效果:

     

    3.MainActivity----socket客户端:接收手机图片信息并处理

    完成任务1.在固定路径下(sdcard/./.)查找图片文件,输入图片名称实现上传,

                   2.实现输入手机内图片文件的绝对路径,然后点击上传按钮,可将图片上传到电脑指定位置。服务器来接收图片并指定存放位置。

                   3.实现选择图片的类型并将其图片复制后重命名,以便用户在电脑分辨图片内容并使用。

                   4.ExpandableListView下拉列表的的学习和使用,重写下拉列表适配器,显示自定义样式

                   5.截取原图片的名称使其与图片内容类型共同组成上传后的图片名称。例如:a.jpg 图片内容类型为旅游,则重命名的名称为旅游a.jpg

    public class UploadPhotoActivity extends Activity {
    	private Socket socket;
    	private String ip = "10.11.204.34";//电脑ip地址,在本地连接的属性下查找本机地址
    	private int port = 4652;//端口号
    	String[] imgStrings;
    	BufferedReader reader;
    	ExpandableListView exp;
    	File file;
    	boolean result = false;
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_upload_photo);
    		查找组件img 、seriesUpload、filePath、exp。。。。
    		exp.setAdapter(getAdapter());
    		//点击子视图文本触发事件
    		exp.setOnChildClickListener(new OnChildClickListener() {
    			@Override
    			public boolean onChildClick(ExpandableListView parent, View v,
    					int groupPosition, int childPosition, long id) {
    				String nowString=img.getText().toString().concat(":"+getAdapter().getChild(groupPosition, childPosition).toString());
    				img.setText(nowString);
    				exp.collapseGroup(0);//选择子文本后收缩下拉列表
    				return false;
    			}
    		});
    		//根据图片名称实现上传
    		mButton.setOnClickListener(new Button.OnClickListener() {
    			@Override
    			public void onClick(View v) {
    				String strString = img.getText().toString();
    				imgStrings = new String[] {};
    				if (strString.trim().length() == 0)
    					return;
    				if (strString.contains(",")) {// 多张图片上传
    					imgStrings = strString.split(",");
    					for (int i = 0; i < imgStrings.length; i++) {
    						if(imgStrings[i].contains(":"))
    						    upload(imgStrings[i].split(":")[0],imgStrings[i].split(":")[1]);
    						else
    						    upload(imgStrings[i], "");
    						getResult(i+1);
    					}
    				} else {//只传一张图片
    					if(strString.contains(":")){//选择图片描述
    					    upload(strString.split(":")[0],strString.split(":")[1]);
    					}
    					else//没有选择图片描述
    					    upload(strString, "");
    					getResult(1);
    				}
    				
    			}
    		});
    		//根据文件夹路径上传文件内一系列图片
    		seriesUpload.setOnClickListener(new Button.OnClickListener() {
    			@Override
    			public void onClick(View v) {
    				String pathString = filePath.getText().toString();
    				imgStrings = new String[] {};
    				if (pathString.trim().length() == 0)
    					return;
    				String[] paths=listFile(filePath.getText().toString());
    				if (paths.length==0) {// 文件夹没有图片
    					Toast.makeText(UploadPhotoActivity.this, "文件夹内没有可传图片文件!",
    							Toast.LENGTH_SHORT).show();
    					return;
    				} else {
    					for (int j = 0; j < paths.length; j++) {
    						seriesUpload(paths[j]);
    						getResult(j);//提示是否已上传成功
    					}
    				}
    			}
    		});
    	}
    	//i代表上传的图片索引,返回上传结果
    	private void getResult(int i) {	
    		if (file.length() != 0)
    			Toast.makeText(UploadPhotoActivity.this, "上传成功!",
    					Toast.LENGTH_SHORT).show();
    		else
    			Toast.makeText(UploadPhotoActivity.this, "第"+i+"张上传失败,不存在此文件",
    					Toast.LENGTH_SHORT).show();
    	}
    	//得到文件夹下的所有图片绝对路径
             public  String[] listFile(String derect) {
                 File file = new File(derect);
                 File[] f = file.listFiles();
                 String Path[] = new String[f.length];
                 for (int i = 0; i < f.length; i++)
                 {
                         Path[i] = f[i].getPath();
                         System.out.println(Path[i]);
                 }
                 return Path;      
    }
    
    	// 根据图片名称上传照相机中单个照片
    	private void upload(String path,String scrip) {
    		DataOutputStream dos;
    		FileInputStream fis;
    		try {
    			///sdcard/DCIM/Camera/照相机拍摄后图片所存路径
    			file = new File("/sdcard/DCIM/Camera/" + path.trim());
    			if (file.length() == 0) {
    				return;
    			} else {
    				socket = new Socket(ip, port);
    				dos = new DataOutputStream(socket.getOutputStream());
    				fis = new FileInputStream(file);
    				dos.writeUTF(path.substring(0,path.indexOf("."))+scrip+path.substring(path.indexOf(".")));
    				dos.flush();
    				byte[] sendBytes = new byte[1024 * 8];
    				int length;
    				while ((length = fis.read(sendBytes, 0, sendBytes.length)) > 0) {
    					dos.write(sendBytes, 0, length);
    					dos.flush();// 发送给服务器
    				}
    				dos.close();//在发送消息完之后一定关闭,否则服务端无法继续接收信息后处理,手机卡机
    				/*reader = new BufferedReader(new InputStreamReader(
    						socket.getInputStream()));
    				result = Boolean.parseBoolean(reader.readLine().toString());
    				System.out.println("上传结果" + result);//运行时总是提示socket关闭,不能接收服务端返回的消息
    				reader.close();*/
    				fis.close();
    				socket.close();
    			}
    		} catch (UnknownHostException e) {
    			e.printStackTrace();
    		} catch (FileNotFoundException e) {
    			e.printStackTrace();
    
    		}catch (SocketTimeoutException e) {
    			e.printStackTrace();
    			Toast.makeText(UploadPhotoActivity.this, "超时,上传失败",
    					Toast.LENGTH_LONG).show();
    		}catch (IOException e) {
    			e.printStackTrace();
    		}
    	}
    	//根据文件夹路径上传所有的图片到服务器
    	//此dirpath是图片绝对路径
    	private void seriesUpload(String dirpath) {
    		DataOutputStream dos;
    		FileInputStream fis;
    		try {
    			file = new File(dirpath);
    			if (file.length() == 0) {
    				return;
    			} else {
    				socket = new Socket(ip, port);
    				dos = new DataOutputStream(socket.getOutputStream());
    				fis = new FileInputStream(file);
    				dos.writeUTF(dirpath.substring(dirpath.lastIndexOf("/")+1));//截取图片名称
    				dos.flush();
    				byte[] sendBytes = new byte[1024 * 8];
    				int length;
    				while ((length = fis.read(sendBytes, 0, sendBytes.length)) > 0) {
    					dos.write(sendBytes, 0, length);
    					dos.flush();// 发送给服务器
    				}
    				dos.close();//在发送消息完之后一定关闭,否则服务端无法继续接收信息后处理,手机卡机
    				fis.close();
    				socket.close();
    			}
    		} catch (UnknownHostException e) {
    			e.printStackTrace();
    		} catch (FileNotFoundException e) {
    			e.printStackTrace();
    		}catch (SocketTimeoutException e) {
    			e.printStackTrace();
    			Toast.makeText(UploadPhotoActivity.this, "超时,上传失败",
    					Toast.LENGTH_LONG).show();
    		}catch (IOException e) {
    			e.printStackTrace();
    		}
    	}
    	//下拉列表适配器设置成自己需要的样式
    	private ExpandableListAdapter getAdapter(){
    		 final String[] generalsTypes = new String[] { "图片分类"};
    		 //子视图显示文字
    	     final String[] generals = new String[] { "地方特色风景", "个人生活写照、旅游怀念","地图拍摄","美食", "工作需求图片", "办公环境写实","天气图片","幸福一家人", "好友、同事照片", "汽车","明星写真"};
            //重写adapter类,创建新适配置
    		 ExpandableListAdapter adapter=new ExpandableListAdapter(){
    				@Override
    				public boolean areAllItemsEnabled() {return false;}
    				@Override
    				public Object getChild(int groupPosition, int childPosition) {
    					return generals[childPosition];
    				}
    				@Override
    				public long getChildId(int groupPosition, int childPosition) {
    					return childPosition;
    				}
    				@Override
    				public View getChildView(int groupPosition, int childPosition,
    						boolean isLastChild, View convertView, ViewGroup parent) {
    					 LinearLayout ll = new LinearLayout(
    							 UploadPhotoActivity.this);
    		                ll.setOrientation(0);
    		                TextView textView = new TextView(UploadPhotoActivity.this);
    		                AbsListView.LayoutParams lp = new AbsListView.LayoutParams(
    		                        ViewGroup.LayoutParams.FILL_PARENT, 64);
    		                textView.setLayoutParams(lp);
    		                textView.setGravity(Gravity.CENTER_VERTICAL);
    		                textView.setPadding(36, 0, 0, 0);
    		                textView.setTextSize(18);
    		                textView.setText(getChild(groupPosition, childPosition)
    		                        .toString());
    		                ll.addView(textView);
    		                return ll;
    				}
    				@Override
    				public int getChildrenCount(int groupPosition) {return generals.length;}
    				@Override
    				public Object getGroup(int groupPosition) {return generalsTypes[groupPosition];}
    				@Override
    				public int getGroupCount() {return generalsTypes.length;}
    				@Override
    				public long getGroupId(int groupPosition) {return groupPosition;}
    				@Override
    				public View getGroupView(int groupPosition, boolean isExpanded,
    						View convertView, ViewGroup parent) {
    		                LinearLayout ll = new LinearLayout( UploadPhotoActivity.this);
    		                ll.setOrientation(0);
    		                TextView textView = new TextView(UploadPhotoActivity.this);
    		                AbsListView.LayoutParams lp = new AbsListView.LayoutParams(
    		                        ViewGroup.LayoutParams.FILL_PARENT, 50);
    		                textView.setLayoutParams(lp);
    		                textView.setGravity(Gravity.CENTER_VERTICAL);
    		                textView.setPadding(80, 5, 0, 0);
    		                textView.setTextSize(20);
    		                textView.setTextColor(Color.BLACK);
    		                textView.setText(getGroup(groupPosition).toString());
    		                ll.addView(textView);
    		                return ll;
    				}
    				@Override
    				public boolean hasStableIds() {
    					return true;
    				}
    				@Override
    				public boolean isChildSelectable(int groupPosition,
    						int childPosition) {
    					return true;
    				}
    				@Override。。。。。。一系列要实现的父类的方法
    			};
    			return adapter;
    	}
    }

     

    4.创建服务器端,新建java-project,在main方法中写入服务器接收信息代码

         服务端接收字节写入本地电脑文件内

    //服务器
    public class TransFileServer {
    	public static void main(String[] args) {
    		uploadThread t = new uploadThread();
    		t.start();
    	}
    }
    class uploadThread extends Thread {
    	private static final int HOST_PORT = 4652;
    	DataInputStream inputStream;
    	FileOutputStream fos;
    	boolean flag = false;
    	@Override
    	public void run() {
    		Socket skt = null;
    		try {
    			ServerSocket server = new ServerSocket(HOST_PORT);
    			while (true) {
    				skt = server.accept();
    				System.out.println("接收到Socket请求");
    				//接收客户端文件
    				inputStream = new DataInputStream(skt.getInputStream());
    				PrintWriter writer = new PrintWriter(skt.getOutputStream());
    				String trueName = inputStream.readUTF();
    				fos = new FileOutputStream("D://" + trueName);
    				byte[] inputByte = new byte[1024 * 8];
    				int length;
    				while ((length = inputStream.read(inputByte,0,inputByte.length)) > 0) {
    					System.out.println("正在接收数据..." + length);
    					flag = true;
    					fos.write(inputByte, 0, length);
    					fos.flush();
    				}
    				System.out.println("图片接收完成");
    				fos.close();
    				inputStream.close();
    				// 服务器发送消息
    				writer.println(flag);// 返回是否接收到图片
    				writer.flush();
    				writer.close();
    				skt.close();
    			}
    		}catch (IOException e) {
    			e.printStackTrace();
    		}
    	}
    }


    5.可选择使用较完善的获取图片列表方法代码段:

    public List<STRING> getPictures(final String strPath) { 
    		  List<STRING> list = new ArrayList<STRING>(); 		    
    		  File file = new File(strPath); 
    		  File[] files = file.listFiles(); 		    
    		  if (files == null) { 
    		      return null; 
    		  } 		    
    		  for(int i = 0; i < files.length; i++) { 
    		      final File f = files[i]; 
    		      if(f.isFile()) { 
    		          try{ 
    		              int idx = f.getPath().lastIndexOf("."); 
    		              if (idx <= 0) { 
    		                  continue; 
    		              } 
    		              String suffix = f.getPath().substring(idx); 
    		              if (suffix.toLowerCase().equals(".jpg") || 
    		                  suffix.toLowerCase().equals(".jpeg") || 
    		                  suffix.toLowerCase().equals(".bmp") || 
    		                  suffix.toLowerCase().equals(".png") || 
    		                  suffix.toLowerCase().equals(".gif") ) 
    		              { 
    		                  list.add(f.getPath()); 
    		              } 
    		          } catch(Exception e) { 
    		              e.printStackTrace(); 
    		          } 
    		      } 
    		  } 		    
    		  return list; 
    }

    6.扩展功能;后期将介绍实现文件检索批量上传图片,用户通过Checkbox复选框选择自己要上传的图片(必须是图片文件才可上传,不是图片给用户提示信息),将这些选中的图片可获取图片名称加入到一个list数组保存起来,然后统一上传。

     

     

    展开全文
  • 主要介绍了JS文件/图片电脑里面拖拽浏览器上传文件/图片,需要的朋友可以参考下
  • 上传图片编辑器电脑版.rar
  • 安卓APP上传图片到服务端并保存到电脑文件夹,适配9.0,可以同时上传9张照片。服务端是springMVC,导入即可使用,安卓项目也是,导入即可使用。
  • fine-uploader-demo 基于fine-uploader 图片上传,可以在移动端,电脑端上传图片. 具体api 查看fine-uploader 演示
  • 文件上传时一般生成临时文件来保存目录,这个临时文件在tomcat下,修改代码或重启tomcat临时文件下保存的文件或图片都会消失不见了,但是若保存在本地磁盘上,用&lt;img&gt;标签中的src直接访问本地图片路径...

    问题:

    文件上传时一般生成临时文件来保存目录,这个临时文件在tomcat下,修改代码或重启tomcat临时文件下保存的文件或图片都会消失不见了,但是若保存在本地磁盘上,用<img>标签中的src直接访问本地图片路径的话,会使图片破裂,显示不出来

    解决:

    把文件存储在本地,并且在tomcat里面的server.xml配置虚拟路径

    具体代码:

    1、html代码(layui前端框架,可参考layui官方文档)

    layui文件上传:https://www.layui.com/doc/modules/upload.html

    ......
    <div class="layui-form-item">
    	    <label class="layui-form-label">商品封面图片上传路径</label>
    		<div class="layui-upload">
    		  <button type="button" class="layui-btn" id="imagebtn">上传图片</button><!--点击图片上传的按钮-->
    		  <input type="hidden" id="image" name="image" value=""/><!--存储后台传来的图片路径和图片名称-->
    		  <div class="layui-upload-list">
    		    <img class="layui-upload-img" id="imageshow"><!--显示图片-->
    		    <p id="demoText"></p><!--或图片上传失败,显示重传-->
    		  </div>
    		</div> 
       </div> 
    ......

    页面效果:

    2、script代码

    <script type="text/javascript" th:inline="javascript">
       layui.use(['jquery','upload'],function(){
          var $=layui.$,upload=layui.upload;
          var uploadInst=upload.render({
             elem:'#imagebtn'
             ,url:'/text'
             ,accept:'images'  //允许上传的文件类型
             ,field:'file'   //设定文件域的字段名
             before:function(obj){  //文件上传前的回调
                //预读本地文件示例,不支持ie8
                obj.preview(function(index,file,result){
                   $("#imageshow").attr('src',result);
                });
             }
             ,done:function(res){ //上传后的回调
                //如果上传失败
                if(res.code>0){
                   return layer.msg('上传失败');
                }else{
                   $("#image").val(res,image);//上传成功之后,从后台传来的图片存储路径和名称
                }
             }
             ,error:function(){
                //演示失败状态,并实现重传
                var demoText=$('#demoText');
                demoText.html('<span style="color: #FF5722;margin-left: 2%;">上传失败</span> <a class="layui-btn layui-btn-xs demo-reload">重试</a>');
                 demoText.find('.demo-reload').on('click', function(){
    	        uploadInst.upload();
    	     });
             }
          })
       })
    </script>

    页面效果:

    没有后台之前会提示“上传失败”,但还是会显示图片,同时页面左下角,会提示“上传失败重试”,我这里是上传成功了

    3、后端代码

    @RequestMapping(value="/text" ,method=RequestMethod.Post)
    @ResponseBody
    public Map<Strring,Object> text(@RequestParam("file") MultipartFile file,HttpServletRequest request,HttpServletResponse){
       response.setContType("text/html;charset=utf-8");
       String tempPath="G:/images/upload/";  //存到本地
       File tmpFile=new File(tempPath);
       if(!tmpFile.exists()){
          //创建临时目录
          tmpFile.mkdir();
       }
       Map<String,Object> map =new HashMap<>();
       //获取原始文件名
       String fileName=file.getOriginalFilename();
       String houzuiming=fileName.substring(fileName.lastIndexOf(".")+1);//后缀名
       //新文件名
       String newFileName=UUID.randomUUId()+"."+houzuiming;  //这里也可用随机数作新文件名
       try{
          FileOutputStream fos=new FileOutputStream(tempPath+newFileName);
          InputStream in=file.getInputStream();
          int b=0;
          while((b=in.read()) != -1){
             fos.write(b);
          }
          fos.close();
          in.close();
          map.put("code",0);//上传成功
          map.put("image","/imagespath/"+newFileName);  //server.xml中的虚拟路径
       }catch(Exception e){
          map.put("code",1);
          e.printStackTrace();
       }
       return map;
    }

    4、tomcat的server.xml中配置虚拟路径(重要)

    <!--Host中加入以下代码-->
    <Context docBase="G:\\images\\upload" path="/imagespath" reloadable="true"></Context>

    5、前台显示

    <img src="/imagespath/图片名称"></img>

     

    最后,把项目重启就可以了

    页面效果:

    展开全文
  • 之前有个需求要手机的照片上传到服务器的,还想着在网上看看有没有适合的,结果都是多年前的案例,而且试了很多次APP不是闪退,就是没法上传到服务器。还是自己写吧。 先看一下效果吧! 二、实现工具与环境 1....

    一、前言

    之前有个需求要把手机的照片上传到服务器的,还想着在网上看看有没有适合的,结果都是多年前的案例,而且试了很多次APP不是闪退,就是没法上传到服务器。还是自己写吧。
    先看一下效果吧!
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    二、实现工具与环境

    1.AndroidStudio (9.0)
    2.springmvc(eclipse)

    三、代码的实现

    直接给源码

    没有积分的留下邮箱。

    有问题可以留言。

    有网友反映会上传不成功,原因可能如下:

    1.电脑ip地址没有修改成代码的一致;
    2.电脑D盘没有对应的PersonalHomePage/chat/文件夹;
    3.虽然有文件夹了,但是文件夹没有映射到Tomcat上:
    具体操作—> 把Tomcat的server.xml添加一行代码:(在 的前面添加即可)

    然后再重启项目试试。
    我所说的Tomcat不是springboot内置的那个哦,是xampp的Tomcat。
    在这里插入图片描述

    不懂怎么弄xampp的,可以去看看我的

    另外一篇文章 地址:https://wangjinchan.blog.csdn.net/article/details/106612935

    xampp真的很方便哦。

    展开全文
  • 在很多的网站都可以实现上传头像,可以选择自己喜欢的图片做头像,从本地上传,下次登录时可以直接显示出已经上传的头像,那么这个是如何实现的呢? 下面说一下我的实现过程(只是个人实现思路,实际网站怎么实现的...

    在很多的网站都可以实现上传头像,可以选择自己喜欢的图片做头像,从本地上传,下次登录时可以直接显示出已经上传的头像,那么这个是如何实现的呢?

    下面说一下我的实现过程(只是个人实现思路,实际网站怎么实现的不太清楚)

    实现的思路:

    工具:MySQL,eclipse

    首先,在MySQL中创建了两个表,一个t_user表,用来存放用户名,密码等个人信息,

    一个t_touxiang表,用来存放上传的图片在服务器中的存放路径,以及图片名字和用户ID,

    T_touxiang表中的用户ID对应了t_user中的id。

    t_user表SQL:

    DROP TABLE IF EXISTS `t_user`;
    CREATE TABLE `t_user` (
      `id` int(10) NOT NULL AUTO_INCREMENT,
      `username` varchar(20) NOT NULL,
      `password` varchar(255) NOT NULL,
      PRIMARY KEY (`id`),
      UNIQUE KEY `username` (`username`)
    ) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8;

    T_touxiang表SQL:

    DROP TABLE IF EXISTS `t_touxiang`;
    CREATE TABLE `t_touxiang` (
      `id` int(10) NOT NULL AUTO_INCREMENT,
      `image_path` varchar(255) DEFAULT NULL,
      `user_id` int(11) DEFAULT NULL,
      `old_name` varchar(255) DEFAULT NULL,
      PRIMARY KEY (`id`),
      KEY `img_user` (`user_id`),
      CONSTRAINT `img_user` FOREIGN KEY (`user_id`) REFERENCES `t_user` (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

    首先,写一个UploadServlet.java,用来处理图片文件的上传,并将图片路径,图片名称等信息存放到t_touxiang数据表中,代码如下:

    @WebServlet("/UploadServlet.do")
    public class UploadServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
     
        protected void service(HttpServletRequest request, HttpServletResponse response)
    	    throws ServletException, IOException {
    	// 判断上传表单是否为multipart/form-data类型
    	HttpSession session = request.getSession();
    	User user = (User) session.getAttribute("user"); // 在登录时将 User 对象放入了 会话
    						 // 中
     
    	if (ServletFileUpload.isMultipartContent(request)) {
     
    	    try {
    		// 1. 创建DiskFileItemFactory对象,设置缓冲区大小和临时文件目录
    		DiskFileItemFactory factory = new DiskFileItemFactory();
    		// System.out.println(System.getProperty("java.io.tmpdir"));//默认临时文件夹
     
    		// 2. 创建ServletFileUpload对象,并设置上传文件的大小限制。
    		ServletFileUpload sfu = new ServletFileUpload(factory);
    		sfu.setSizeMax(10 * 1024 * 1024);// 以byte为单位 不能超过10M 1024byte =
    						 // 1kb 1024kb=1M 1024M = 1G
    		sfu.setHeaderEncoding("utf-8");
     
    		// 3.
    		// 调用ServletFileUpload.parseRequest方法解析request对象,得到一个保存了所有上传内容的List对象。
    		@SuppressWarnings("unchecked")
    		List<FileItem> fileItemList = sfu.parseRequest(request);
    		Iterator<FileItem> fileItems = fileItemList.iterator();
     
    		// 4. 遍历list,每迭代一个FileItem对象,调用其isFormField方法判断是否是上传文件
    		while (fileItems.hasNext()) {
    		    FileItem fileItem = fileItems.next();
    		    // 普通表单元素
    		    if (fileItem.isFormField()) {
    			String name = fileItem.getFieldName();// name属性值
    			String value = fileItem.getString("utf-8");// name对应的value值
     
    			System.out.println(name + " = " + value);
    		    }
    		    // <input type="file">的上传文件的元素
    		    else {
    			String fileName = fileItem.getName();// 文件名称
    			System.out.println("原文件名:" + fileName);// Koala.jpg
     
    			String suffix = fileName.substring(fileName.lastIndexOf('.'));
    			System.out.println("扩展名:" + suffix);// .jpg
     
    			// 新文件名(唯一)
    			String newFileName = new Date().getTime() + suffix;
    			System.out.println("新文件名:" + newFileName);// image\1478509873038.jpg
     
    			// 5. 调用FileItem的write()方法,写入文件
    			File file = new File("D:/lindaProjects/mySpace/wendao/WebContent/touxiang/" + newFileName);
    			System.out.println(file.getAbsolutePath());
    			fileItem.write(file);
     
    			// 6. 调用FileItem的delete()方法,删除临时文件
    			fileItem.delete();
    
    			/*
    			 * 存储到数据库时注意 1.保存源文件名称 Koala.jpg 2.保存相对路径
    			 * image/1478509873038.jpg
    			 * 
    			 */
    			if (user != null) {
    			    int myid = user.getId();
    			    String SQL = "INSERT INTO t_touxiang(image_path,user_id,old_name)VALUES(?,?,?)";
    			    int rows = JdbcHelper.insert(SQL, false, "touxiang/" + newFileName, myid, fileName);
    			    if (rows > 0) {
    				session.setAttribute("image_name", fileName);
    				session.setAttribute("image_path", "touxiang/" + newFileName);
    				response.sendRedirect(request.getContextPath() + "/upImage.html");
    			    } else {
     
    			    }
     
    			} else {
    			    session.setAttribute("loginFail", "请登录");
    			    response.sendRedirect(request.getContextPath() + "/login.html");
    			}
     
    		    }
    		}
    	    } catch (FileUploadException e) {
    		e.printStackTrace();
    	    } catch (Exception e) {
    		e.printStackTrace();
    	    }
    	}
        }
    }

    在完成图片上传并写入数据库的同时,将图片路径通过session的方式发送到HTML界面

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>更换头像</title>
    </head>
    <body>
    <formaction="UploadServlet.do" method="post"enctype="multipart/form-data">
    本地目录:<inputtype="file" name="uploadFile">
    <img src="${image_path}" width="200" height="200">
    <inputtype="submit" value="上传头像"/>
    </form>
    </body>
    </html>

    至此,图片上传数据库和本地服务器已经实现,那么如何在HTML界面显示出个人信息以及上传的头像呢?

    首先定义一个PersonServlet类,用来读取数据库的内容,并发送到HTML界面。

    代码如下:

    @WebServlet("/persons.do")
    public class PersonServlet extends HttpServlet {
     
        private static final long serialVersionUID = -800352785988546254L;
     
        protected void service(HttpServletRequest request, HttpServletResponse response)
    	    throws ServletException, IOException {
    	// 判断上传表单是否为multipart/form-data类型
    	Touxiang tx=null;
    	
    	HttpSession session = request.getSession();
    	User user = (User) session.getAttribute("user"); // 在登录时将 User 对象放入了 会话
    	if(user!=null){
    	    int myid=user.getId();
    	    String SQL="SELECT id,image_path,old_name FROM t_touxiang WHERE user_id=?";
    	    ResultSet rs=JdbcHelper.query(SQL,myid);
    	    String uSQL="SELECT username,password FROM t_user WHERE id=?";
    	    ResultSet urs=JdbcHelper.query(uSQL,myid);
    	    System.out.println( "我的个人id是: " + myid);
    	    final List<Touxiang> touxiang=new ArrayList<>();
    	    try {
    		if(rs.next())
    		{
    		    tx=new Touxiang();
    		    tx.setId(rs.getInt(1));
    		    tx.setImage_path(rs.getString(2));
    		    tx.setOld_name(rs.getString(3));
    		    touxiang.add(tx);
    		}
    		if(urs.next()){
    		    user.setUsername(urs.getString(1));
    		    user.setPassword(urs.getString(2));
    		    user.setTouxiang(touxiang);
    		}
    		
    	    } catch (SQLException e) {
    		// TODO Auto-generated catch block
    		e.printStackTrace();
    	    }
    	   
    		session.setAttribute("user", user);
    		System.out.println( "我的id: " + myid);
    		response.sendRedirect( request.getContextPath() + "/person.html");
    	}
        }
    }

    在HTML界面接收信息,并显示出来,代码如下:

    <div>
    <form action="UploadServlet.do" method="post" enctype="multipart/form-data">
             <div><a href="$path/upImage.html">更换头像</a></div>
            
            #foreach( $ut in  $user.getTouxiang() )
             <img src=" $ut.getImage_path()"  width="200" height="200">
             #end
             <div>我的头像:</div>
             <div>我的姓名:$user.getUsername()</div>
             <div><a href="$path/myAnswer.do">我的解答</a></div>
      <div><a href="$path/myQuestion.do">我的提问</a></div>
       </form>
    </div>
    <div>
    <form action="UploadServlet.do" method="post" enctype="multipart/form-data">
             <div><a href="$path/upImage.html">更换头像</a></div>
            
            #foreach( $ut in  $user.getTouxiang() )
             <img src=" $ut.getImage_path()"  width="200" height="200">
             #end
             <div>我的头像:</div>
             <div>我的姓名:$user.getUsername()</div>
             <div><a href="$path/myAnswer.do">我的解答</a></div>
      <div><a href="$path/myQuestion.do">我的提问</a></div>
       </form>
    </div>

    至此,一个基于Java的头像上传服务器,路径存储在MySQL,并在HTML界面读取出来的功能就基本实现了。头像上传之前进行处理等操作,可以选择一些插件来完成。这里只是简单的实现了基本功能。

    补充
    对于图片上传,这里只是简单的用Servlet实现了一下最基本的功能,仅提供思路。如果使用spring等框架,他都对图片上传做了很好的封装,应该更加容易。

    后台实现图片上传应该来说比较容易,但是比较头疼的是图片上传原生的按钮丑出天际,这里推荐俩实用的上传控件,应该算比较好看。

    1,H5实现的图片上传,可多张上传,可点击可拖拽上传,大概是这个样子:

    2,jQuery图像裁剪插件,大概长这样

    不仅提供上传,还有裁剪等功能,UI做的也美,

    地址:http://www.jq22.com/jquery-info318

    需要 demo 源码的,加我微信号:xttblog,备注:demo。我发你们。

     我的个人小程序和公众号!

    展开全文
  • 微信企业号中办公逸审批应用在电脑版微信上传(下载)图片补丁
  • 用java做个后台运行的程序...电脑到手机 图片的传送,尝试用了http,不清楚怎么主动让电脑把图片发送手机端。本人比较小白。求个思路。 本人新来没几天,C币都下载资源了,没有C币给各位大神。。 真心求个完整思路
  • 我的是 如何找到这个路径? 1,传输图片是不会有这个选项“在文件中显示” 2 但是传输文件->右键->会有这个选项“在文件中显示” 然后就可以看到路径了 ...
  • Android 调试桥 (adb) 是一种功能多样的命令行工具,可让您与设备进行通信。adb 命令可用于执行各种设备操作(例如安装和调试应用),并提供对 Unix shell(可用来在设备上运行各种命令)的访问权限。...
  • net的web系统如何在平板电脑的Android系统中开启摄像头拍照功能???~~~~
  • 是这样,我现在的项目能够上传一张图片到页面,但是如果之前上传图片,再上传就会原先的替换掉,现在要求上传第二次的话不替换第一次的图片,依次排开。。。最好我还可以手动删除(这个顺带着) 有没有谁会的?...
  • 在手机端上传图片到java服务器上 所需的jar包 common-io.jar common-fileupload.jar apicloud 上的html代码,以下是注意点 1、action是你后台服务器的ip地址+端口号+项目名+类名 2、method="...
  • 原文地址:在instagram上面如何利用电脑上传图片 作者:小北的梦呓 我们都知道instagram是一个手机版的app,instagram官方不支持通过电脑上传图片,而利用手机又很麻烦,那么如果作为外贸营销的小伙伴们...
  • 服务器端用的thinkphp,这里只是个控制器, 如果不知道控制器该放在什么位置,请自行百度。 自行拼接请求服务器的完整的网址。 调整一下: 服务端创建文件夹的代码改为如下: if(!is_dir("./".$img_url)){ ...
  • 当我们手机里面存了大量照片又不舍得删除,但是内存又不够用时就想到手机里的图片传到电脑上,有些人不知道操作方法,下面,小编就给大家介绍一下手机照片如何导入到电脑在这个网络的时代,随时随地都能看到有人在...
  • 电脑内无法预览图片

    千次阅读 2015-09-14 22:12:47
    今天从公司新领的笔记本,是款旧的本本,本来想上传图片,发现不是预览的图片。 这样的: 从网上查阅了一下之后发现,原来在文件夹设置那搞的鬼。 解决方法如下: 1、打开我的电脑,在窗口的工具栏里找到...
  • 电脑里面的照片或图片网上去吗?很方便的一个工具
  • 基于百度webuploader+php图片上传,已经修改过,可以接收上传成功后图片路径,单图上传带预览功能,电脑版和手机版,手机版点击上传可弹出提示选择照相或从相册中选择图片,可以自己参考百度webuploader相关文档进行...
  • 泰克示波器的上位机 - OpenChoice。官网下载太慢,搬运。可以将示波器的图像同步到电脑并保存图片。只能保存图片,而且同步图像时是一张一张的图片,不是连续的图像,就像给示波器截屏一样。
  • 电脑无法显示图片说内存不足的解决方法如下:1、首先打开电脑的系统属性,然后在系统属性中找到高级系统设置;2、打开系统高级设置后,点击高级,然后找到环境变量,点击环境变量;3、然后找到用户变量,在用户变量...
  • 可以上传的格式有: You can send the following file types with Send to Kindle for PC: Microsoft Word (.DOC, .DOCX)PDF (.PDF)Text (.TXT)Images (.JPG, .JPEG, .PNG, .BMP)Kindle Format (.AZW, ....
  • 1、批量上传 断点续 web上传 页面上显示显示本地电脑文件夹信息 多种上传方式 可控制上传文件的格式和大小 2、可以直接选择文件夹上传上传到服务器后,可以根据文件夹的目录结构重新建立文件夹结构 3、显示...
  • 小米8 se图片备份到电脑

    千次阅读 2019-07-26 13:47:30
    这个时候,在电脑浏览器输入ftp的地址,你发现就可以找到手机上的所有文件了,里面必定有个文件装着你的照片;但是等你找到之后,就奔溃了,这个怎么样才能批量复制。唉,我自己是之前不知道咋批量复制过一次,现在...
  • 但发现word中的图片粘贴后变成了file:///xxxx.jpg这种内容,如果上传到服务器后其他人也访问不了,网上找了很多编辑器发现没有一个能直接解决这个问题 考虑自己除了工作其他时间基本上不使用windows,因此打算...
  • 这两天在使用ftp上传图片时遇到了一个问题:图片上传以后需要移动文件夹。 我实现的思路大概是这样的: 1.先根据原图片路径找到对应的文件,拿文件流 InputStream inputStream = ftp.retrieveFileStream(new ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 69,250
精华内容 27,700
关键字:

怎么把图片上传电脑