js获取文件流图片如何存储?

js获取的第三方OCX控件返回的文件流,如何转换成图片存储?并且自动在浏览器中打开?求大神帮忙jie'da

1个回答

通过io写 就可以把文件流转换 为自己本地服务器的 图片 服务器的图片可以通过网络请求访问

weixin_43702437
oqmzla 能帮忙写个例子么。。。是在js里获取的文件流,怎么传到后台java中?多谢。。
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
httpurlconnection上传多图片后文件流保存图片无法打开

//上传多个图片文件的APPLET public void uploadMutilFile(String []uploadFiles, String actionUrl){ String BOUNDARY = java.util.UUID.randomUUID().toString(); String PREFIX = "--", LINEND = "\r\n"; String MULTIPART_FROM_DATA = "multipart/form-data"; String CHARSET = "UTF-8"; try{ URL uri = new URL(actionUrl); HttpURLConnection conn = (HttpURLConnection) uri.openConnection(); conn.setReadTimeout(10* 1000); // 缓存的最长时间 conn.setDoInput(true);// 允许输入 conn.setDoOutput(true);// 允许输出 conn.setUseCaches(false); // 不允许使用缓存 conn.setRequestMethod("POST"); conn.setRequestProperty("connection", "Keep-Alive"); conn.setRequestProperty("Charsert", "UTF-8"); conn.setRequestProperty("Content-Type", "text/html"); DataOutputStream outStream = new DataOutputStream(conn.getOutputStream()); InputStream in = null; // 发送文件数据 if(uploadFiles.length>0){ for(int i=0;i<uploadFiles.length;i++){ File uploadFile = new File(uploadFiles[i]); StringBuilder sb1 = new StringBuilder(); sb1.append(PREFIX); sb1.append(BOUNDARY); sb1.append(LINEND); sb1.append("Content-Disposition: form-data; name=\"file\"; filename=\"" + uploadFile.getName() + "\"" + LINEND); //sb1.append("Content-Type: application/octet-stream; charset=" + CHARSET + LINEND); sb1.append("Content-Type: image/jpeg"+ LINEND); sb1.append(LINEND); System.out.println(sb1.toString()); outStream.writeBytes(sb1.toString()); FileInputStream is = new FileInputStream(uploadFile); byte[] buffer = new byte[(int)uploadFile.length()]; int len = 0; while ((len = is.read(buffer)) != -1) { outStream.write(buffer, 0, len); } outStream.write(LINEND.getBytes()); is.close(); } // 请求结束标志 outStream.writeBytes(PREFIX + BOUNDARY + PREFIX + LINEND); outStream.flush(); outStream.close(); // 得到响应码 int res = conn.getResponseCode(); if (res == 200) { in = conn.getInputStream(); int ch; StringBuilder sb2 = new StringBuilder(); while ((ch = in.read()) != -1) { sb2.append((char) ch); } System.out.println(sb2.toString()); } conn.disconnect(); } }catch(Exception e){ e.printStackTrace(); } } //调用的ACTION public String SaveImgAction(){ request = ServletActionContext.getRequest(); /*try{ ServletInputStream mRead = request.getInputStream(); byte[] bytes = new byte[1024]; int len = mRead.read(bytes,0,1024); StringBuffer str = new StringBuffer(); while(len != -1){ String str1 = new String(bytes,0,1024); str.append(str1); len = mRead.read(bytes,0,1024); } System.out.println(new String(str.toString().getBytes(),"UTF-8")); }catch(Exception e){ e.printStackTrace(); }*/ try{ int totalbytes = request.getContentLength(); byte[] dataOrgin = new byte[totalbytes]; byte[] b = new byte[totalbytes]; Map<String,byte[]>mapfile = new HashMap<String , byte[]>(); DataInputStream in = new DataInputStream(request.getInputStream()); in.readFully(dataOrgin); in.close(); String reqcontent = new String(dataOrgin); BufferedReader reqbuf = new BufferedReader(new StringReader(reqcontent)); String s = reqbuf.readLine(); String startStr = s; System.out.println(s); String fname=""; while((s=reqbuf.readLine())!=null){ if(s.startsWith("Content-Disposition")){ String filename = s.substring(s.indexOf("filename=")+"filename=".length()+1,s.length()-1); fname = filename; } if(s.startsWith("Content-Type")){ s= reqbuf.readLine(); s=reqbuf.readLine(); System.out.println(s.getBytes().length); File f = new File("E:"+File.separator+fname); DataOutputStream fileout = new DataOutputStream(new FileOutputStream(f)); byte []arr = s.getBytes(); fileout.write(s.getBytes()); fileout.close(); //mapfile.put(fname, arr); } if(s.startsWith(startStr+"--")){ System.out.println("结束"); break; } } }catch(Exception e){ e.printStackTrace(); } return null; } 通过JS调用applet方法 <script type="text/javascript"> function fz(){ var arr=[]; arr[0]="D:\\test3.jpg"; arr[1]="D:\\test4.jpg"; var str = "http://192.168.253.61:7001/TestProject/saveImg.action"; document.appTest.uploadMutilFile(arr , str); } </script> 结果:上传的文件大小跟ACTION获取保存到服务器上的文件大小不一样,无法打开。各位大侠帮忙看看啊

js怎么根据服务器图片路径而获取图片,并保存到本机?急急急

![图片说明](https://img-ask.csdn.net/upload/201604/25/1461575567_471231.png) 这个是数据库表的图片路径,一个是本机,picPPath是服务器保存的图片路径。我现在想根据这个picPPath路径获取图片,并保存到picTPath这个路径。求大神,求大腿。QQ945655649

如何从base64编码字符串获取原始文件大小

<div class="post-text" itemprop="text"> <p>I want to get size of the original file from a string variable, which is obtained by using a base64 encode file.</p> <pre class="lang-golang prettyprint-override"><code> package main import ( "bufio" "encoding/base64" "io/ioutil" "os" ) func encodeFile(file string) string { f, err := os.Open(file) if err != nil { panic(err) } reader := bufio.NewReader(f) content, _ := ioutil.ReadAll(reader) encoded := base64.StdEncoding.EncodeToString(content) return encoded } func main() { datas := encodeFile("/tmp/hello.json") //how to get file size from datas } </code></pre> <p>how to get the file size from <code>datas</code>? thks.</p> </div>

后台读取视频文件,转成数据流,前台想用video标签的src引用该视频流,做成播放效果

现在后台视频流数据无法传到前台啊, 后台java读取视频文件,转化为二进制存储, 怎样传到前台啊,求大神讲解。 不知道我描述清楚没?

请问一下在通过js用xlsx读取excel时,怎么才能获取每一个单元的内容

![图片说明](https://img-ask.csdn.net/upload/202004/04/1585964645_729473.png) ``` var fileReader = new FileReader(); fileReader.onload = function (ev) { try { var data = ev.target.result, workbook = XLSX.read(data, { type: 'binary' }), // 以二进制流方式读取得到整份excel表格对象 persons = []; // 存储获取到的数据 } catch (e) { console.log('文件类型不正确'); return; } var sheet0 = workbook.Sheets[workbook.SheetNames[0]];//sheet0代表excel表格中的第一页 var str = XLSX.utils.sheet_to_json(sheet0);//利用接口实现转换。 console.log(str[0]); ``` 我像获取上面excel表格的每一个数据,我用str[0]只能获取到第二行. 这张表我想按照第一行和第一列来精准的找到某一个数据,比如我想找1和0.03Km的数据就是0.175496,但现在我只能获取一整行的数据,请问一下大佬怎么能获取单独的数据,并且我想要把0.03也获取到而不是把第一行当做标题.

请问JS 如何保存后端传来的图片到本地计算机

有后端图片的url,请问怎么保存到本地计算机。我用blob保存数据流的方式保存后发现图片不能打开,而且图片大小小于后端图片大小 $.ajax({ type: "GET", url: '/api/settings/downLoad', success: function(response, status, xhr) { var filename = "down.jpeg"; var blob = new Blob([response], { type: 'image/jpeg' }); if (typeof window.navigator.msSaveBlob !== 'undefined') { window.navigator.msSaveBlob(blob, filename); } else { var URL = window.URL || window.webkitURL||window; var downloadURL = URL.createObjectURL(blob); var a = document.createElement("a"); if (typeof a.download == "undefined") { window.location = downloadURL; } else { /*var evt=document.createEvent("HTMLEvents"); evt.initEvent("click", false, false);*/ $(a).attr("href", downloadURL); $(a).attr("download", filename); $(a).attr("target", "_blank"); $(a).css({ "position": "absolute", "opacity": "0" }); document.body.appendChild(a); a.click();

javaweb上传文件到本机时,文件一直占用在内存中导致OutOfMemoryError,求前辈指点

下面是上传代码和java内存监视图 以上传一个300M文件大小为示例 ``` @RequestMapping("/uploads") public @ResponseBody String upload(MultipartHttpServletRequest request, HttpServletResponse response) throws Exception { String result = ""; // 获取上传的所有文件名 Iterator<String> itr = request.getFileNames(); MultipartFile mpf = null; while (itr.hasNext()) { // 取出文件 mpf = request.getFile(itr.next()); try { File file = new File(UPLOADFILEPATH); if (!file.exists()) { file.mkdirs(); } // 输出(保存)文件 FileOutputStream fos = new FileOutputStream(new File(UPLOADFILEPATH + mpf.getOriginalFilename())); //获取文件的输入流并写入文件 InputStream fis = mpf.getInputStream(); byte[] buffer = new byte[1024]; int len = 0; while ((len = fis.read(buffer)) != -1) { fos.write(buffer, 0, len); fos.flush(); } //关闭流 fis.close(); fos.close(); mpf = null; result = "{\"success\":true}"; } catch (IOException e) { result = "{\"success\":false}"; e.printStackTrace(); } } itr = null; System.gc(); return result; } ``` 下面是内存监视图 上传前的JvisualVM内存视图 ![上传前的JvisualVM内存视图](https://img-ask.csdn.net/upload/201604/23/1461382789_537921.png) 上传后的JvisualVM内存视图 ![上传后的JvisualVM内存视图](https://img-ask.csdn.net/upload/201604/23/1461382868_807914.png) 上传后的jconsole内存视图 ![上传后的jconsole内存视图](https://img-ask.csdn.net/upload/201604/23/1461382900_24115.png) 上传后的jconsole--old gen内存视图 ![上传后的jconsole--old gen内存视图](https://img-ask.csdn.net/upload/201604/23/1461382970_970546.png) 手动执行JvisualVM-GC清理后的内存视图 ![手动执行JvisualVM-GC清理后的内存视图](https://img-ask.csdn.net/upload/201604/23/1461383171_250156.png) 大概情况就是这样子了.文件上传本地后,内存一直被占用无法释放,导致内存溢出.困扰我很久了.希望有前辈能指点一下.谢谢!

二进制文件blob类型,图片设置长宽展示

将读取到的图片以流的形式保存到数据库中,现在从数据库中查出但要修改图片大小如何设置?

php如何上传图片到第三方API取返回地址

网上有找到一个源码,但是太花俏了,用的全是JS,我完全看不懂。 所以在这请教大哥们能帮我写个简单的,只需要提交上传取返回地址。 我菜鸟,太复杂看不懂! https://sm.ms/api/upload 这是post API接口 这是提交参数描述 ``` 参数名称 类型 是否必须 描述 smfile File 是 表单名称。上传图片用到 ssl Bool 否 是否使用 https 输出,强制开启 format String 否 输出的格式。可选值有 json、xml。默认为 json ``` 这是返回值 ``` 名称 类型 示例值 描述 code String success 上传文件状态。正常情况为 success。出现错误时为 error filename String smms.jpg 上传文件时所用的文件名 storename String 561cc4e3631b1.png 上传后的文件名 size Int 187851 文件大小 width Int 1157 图片的宽度 height Int 680 图片的高度 hash String nLbCw63NheaiJp1 随机字符串,用于删除文件 delete String https://sm.ms/api/delete/nLbCw63NheaiJp1 删除上传的图片文件专有链接 url String https://ooo.0o0.ooo/2015/10/13/561cfc3282a13.png 图片服务器地址 path String /2015/10/13/561cfc3282a13.png 图片的相对地址 msg String No files were uploaded. 上传图片出错时将会出现 ``` 问题已解决!!!!!!!!!!!!!! ![图片说明](https://img-ask.csdn.net/upload/201806/13/1528866247_344411.jpg)

请问 nodejs 怎么在页面把图片以二进制的格式保存到mongodb数据库中

请问 nodejs 怎么在页面把图片以二进制的格式保存到mongodb数据库中

PHP接收前端传来的图片并转化为base64格式

前端表单提交一个图片,PHP如何对这个图片进行处理,转化为base64格式? (不用储存到服务器,仅仅转化一下格式,并把base64代码输出即可)

nginx静态资源无法完全加载的问题

我目前碰到的问题具体是这样的: 1. 若不开启静态资源压缩,则所有静态资源都无法加载。 2. 开启静态资源压缩后,部分静态资源可以访问,当某个超过40KB左右的JS文件无法访问时,其后续的静态资源都无法加载,各种浏览器试了都是同样的现象。 以上都是在Windows1809系统下,没有任何后端,纯前端静态。 nginx设置了MB级别的请求大小限制,绝对够KB级的静态资源访问用了,也设置了各种超时时长以及缓存,静态资源文件的访问权限也是有的,同时我查看了nginx本身的日志,所有请求的状态码都是200,并没有任何异常或报错,就浏览器那端报4XX或5XX。 此情况只出现在我本机上,局域网下其他机器访问我本机的nginx服务与资源都是完全正常的,而且我把同样的nginx配置和资源挪到其他机器跑起来然后自访问也是完全正常的,所以这个就很诡异了。 我个人怀疑可能是Windows防火墙、Defender杀毒软件、某一次系统更新,因为去年这些都是正常的,不太记得是哪一次系统升级或更新之后就出现这种情况了。 如果实在没办法了我只好重装系统来解决了 贴一下nginx主配置: ``` http { include mime.types; default_type application/octet-stream; #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; # 日志格式 #access_log logs/access.log main; sendfile on; #on/off #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 300s 300s; fastcgi_connect_timeout 6000s; fastcgi_send_timeout 6000s; fastcgi_read_timeout 6000s; fastcgi_buffer_size 256k; fastcgi_buffers 8 256k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; # 压缩配置 gzip on; #开启gzip压缩功能,默认是关闭的。 gzip_static on; #开启gzip静态资源 gzip_min_length 1k; #允许压缩的页面最小字节数,默认是全部都压缩,最好不要小于1k,因为小于1k的可能越压越大。 gzip_buffers 16 128k; #设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。4 16k代表以16k为单位,安装原始数据大小以16k为单位的4倍申请内存。 gzip_http_version 1.1; #设置http协议版本,只对1.1版本进行压缩。 gzip_comp_level 9; #gzip压缩比/压缩级别,压缩级别 1-9,级别越高压缩率越大,当然压缩时间也就越长(传输快但比较消耗cpu)。 gzip_types text/plain text/xml text/css text/javascript application/xml application/json application/javascript application/x-javascript image/x-icon image/jpg image/jpeg image/gif image/png application/x-font-ttf application/font-woff application/font-woff2; #设置压缩文件类型,这里指定了text/html text html js css json xml image font。 gzip_disable "MSIE [1-6]\."; #IE1-6版本不支持gzip压缩 gzip_proxied any; gzip_vary off; #给http请求增加vary字段,不支持gzip的不进行压缩处理。 # 设置上传文件大小限制 client_max_body_size 50M; client_body_buffer_size 512K; client_header_buffer_size 10M; client_header_timeout 120s; client_body_timeout 120s; # http_proxy proxy_buffers 32 256k; #缓冲区,nginx针对单个连接缓存来自后端real-server的响应 proxy_buffer_size 256k; #设置代理服务器(nginx)从后端real-server读取并保存用户头信息的缓冲区大小,默认与proxy_buffers大小相同,其实可以将这个指令值设的小一点 proxy_busy_buffers_size 256k; #高负荷下缓冲大小(proxy_buffers*2) proxy_max_temp_file_size 1024M; #当proxy_buffers放不下后端服务器的响应内容时,会将一部分保存到硬盘的临时文件中,这个值用来设置最大临时文件大小,默认1024M,它与proxy_cache没有关系。大于这个值,将从upstream服务器传回。设置为0禁用。 proxy_temp_file_write_size 256k; #当缓存被代理的服务器响应到临时文件时,这个选项限制每次写临时文件的大小。 proxy_connect_timeout 300s; proxy_send_timeout 300s; proxy_read_timeout 300s; upstream nacos-server { server 127.0.0.1:8848; #server 127.0.0.1:8841; #server 127.0.0.1:8842; #server 127.0.0.1:8843; } include ../servers/*.conf; } ``` --- 某一个次配置: ``` server { # 设置端口监听 listen 80; # 设置监听的域名(此处的域名为自定义配置,请在host文件中添加) server_name nacos.cn; # 统一字符编码 charset utf-8; # 资源根路径 root static; #access_log logs/host.access.log main; # 默认配置 #location / { # index login.html; #} # 端口转发配置 location /nacos/ { proxy_pass http://nacos-server/nacos/; add_header From nacos.cn; proxy_redirect default; proxy_set_header Host $host; proxy_set_header Server-Name $server_name; proxy_set_header Http-Host $http_host; proxy_set_header Cookie $http_cookie; proxy_set_header Referer $http_referer; proxy_set_header Nginx_Version $nginx_version; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Real-Port $remote_port; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Nginx-Proxy true; proxy_cookie_path / /; } # 异常处理 #error_page 404 /404.html; error_page 500 502 503 504 /50x.html; } ```

Laravel转换base64并以php格式保存

<div class="post-text" itemprop="text"> <p>I am using the Croppie script to edit images before uploading to my server. </p> <p><a href="https://foliotek.github.io/Croppie/" rel="nofollow noreferrer">https://foliotek.github.io/Croppie/</a></p> <p>The problem is Croppie encodes the cropped image in a base64 format. I have created a hidden input and attached the base64 string. I need to know how to grab the string so i can decode it and post it with my form.</p> <p>I have tried so many methods but i am stuck. Any help will be appreciated </p> <p>Controller</p> <pre><code>$post = new Post; $post-&gt;post_category_id = $request-&gt;post_category_id; $post-&gt;title = $request-&gt;title; $post-&gt;body = $request-&gt;body; $post-&gt;meta_description = $request-&gt;meta_description; $post-&gt;slug = $request-&gt;slug; $post-&gt;user_id = auth()-&gt;id(); $image = $request-&gt;input('featimage'); // image base64 encoded preg_match("/data:image\/(.*?);/",$image,$image_extension); // extract the image extension $image = preg_replace('/data:image\/(.*?);base64,/','',$image); // remove the type part $image = str_replace(' ', '+', $image); $imageName = 'image_' . time() . '.' . $image_extension[1]; //generating unique file name; \Storage::disk('public')-&gt;put($imageName,base64_decode($image) $post-&gt;save(); } </code></pre> <p>View</p> <pre><code> &lt;form class="form-horizontal" action="{{route('posts.store')}}" method="POST" enctype="multipart/form-data"&gt; {{ csrf_field() }} &lt;fieldset&gt; &lt;div class="form-group row"&gt;&lt;label class="col-md-2 col-form-label"&gt;Title&lt;/label&gt; &lt;div class="col-md-10"&gt;&lt;input class="form-control" name="title" type="text"&gt;&lt;span class="form-text"&gt;Please insert a title &lt;small&gt;eg. Exciting new event coming to London&lt;/small&gt; &lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;/fieldset&gt; &lt;fieldset class=""&gt; &lt;div class="form-group row"&gt;&lt;label class="col-md-2 col-form-label"&gt;Category&lt;/label&gt; &lt;div class="col-md-10"&gt;&lt;select name="post_category_id" class="custom-select custom-select-sm"&gt; @foreach($postCategories as $postCategory) &lt;option value="{{ $postCategory-&gt;id }}"&gt;{{ $postCategory-&gt;name }}&lt;/option&gt; @endforeach &lt;/select&gt;&lt;/div&gt; &lt;/div&gt; &lt;/fieldset&gt; &lt;fieldset&gt; &lt;div class="form-group row"&gt;&lt;label class="col-md-2 col-form-label"&gt;Post Body&lt;/label&gt; &lt;div class="col-md-10"&gt; &lt;textarea type="textarea" class="form-control" rows="10" name="body"&gt;&lt;/textarea&gt; &lt;/div&gt; &lt;/div&gt; &lt;/fieldset&gt; &lt;fieldset&gt; &lt;div class="form-group row"&gt;&lt;label class="col-md-2 col-form-label"&gt;Meta Description&lt;/label&gt; &lt;div class="col-md-10"&gt; &lt;textarea type="textarea" class="form-control" rows="4" name="meta_description"&gt;&lt;/textarea&gt; &lt;/div&gt; &lt;/div&gt; &lt;/fieldset&gt; &lt;fieldset&gt; &lt;select name="tags[]" multiple="multiple" class="form-control select2-multi"&gt; @foreach($tags as $tag) &lt;option value="{{ $tag-&gt;id }}"&gt;{{ $tag-&gt;name }}&lt;/option&gt; @endforeach &lt;/select&gt; &lt;/fieldset&gt; &lt;/div&gt; &lt;/div&gt;&lt;!-- END card--&gt; &lt;/div&gt; &lt;div class="col-md-4"&gt; &lt;div class="card card-default"&gt; &lt;div class="card-header"&gt;Featured Image&lt;/div&gt; &lt;div class="card-body"&gt; &lt;fieldset&gt; &lt;figure&gt; &lt;img src="" class="gambar img-responsive img-thumbnail" id="item-img-output" /&gt;&lt;/figure&gt; &lt;input type="hidden" id="featimage" name="featimage"&gt; &lt;/fieldset&gt; &lt;input type="file" class="item-img file center-block" name="upload"/&gt; &lt;/label&gt; &lt;/div&gt; &lt;div&gt; &lt;/div&gt; &lt;!-- START card--&gt; &lt;div class="card card-default"&gt; &lt;div class="card-header"&gt;Slug&lt;/div&gt; &lt;div class="card-body"&gt; &lt;div class="input-group mb-3"&gt; &lt;div class="input-group-prepend"&gt;&lt;span class="input-group-text" id="basic-addon1"&gt;www.sixmedia.co.uk/&lt;/span&gt;&lt;/div&gt;&lt;input class="form-control" name="slug" type="text" placeholder="slug" aria-label="Username" aria-describedby="basic-addon1"&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&lt;!-- END card--&gt; &lt;!-- START card--&gt; &lt;div class="card card-default"&gt; &lt;div class="card-header"&gt;Featured&lt;/div&gt; &lt;div class="card-body"&gt; &lt;div class="col-md-12"&gt; &lt;fieldset&gt; &lt;div class="form-group row"&gt; @foreach($featured as $feat) &lt;div class="checkbox c-checkbox"&gt;&lt;label&gt;&lt;input name="featured[]" type="checkbox" value="{{$feat-&gt;id}}"&gt;&lt;span class="fa fa-check"&gt;&lt;/span&gt;{{ $feat-&gt;name }} &lt;/label&gt;&lt;/div&gt; @endforeach &lt;/div&gt; &lt;/fieldset&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&lt;!-- END card--&gt; &lt;button class="btn btn-primary btn-block" name="submit"&gt;Save&lt;/button&gt; &lt;button class="btn btn-danger btn-block" name="submit"&gt;Cancel&lt;/button&gt; &lt;/form&gt; </code></pre> <p>JS</p> <pre><code>&lt;script type="text/javascript"&gt; $(".gambar").attr("src", "http://www.pngall.com/wp-content/uploads/2/Upload-PNG-Image-File.png"); var $uploadCrop, tempFilename, rawImg, imageId; function readFile(input) { if (input.files &amp;&amp; input.files[0]) { var reader = new FileReader(); reader.onload = function (e) { $('.upload-demo').addClass('ready'); $('#cropImagePop').modal('show'); rawImg = e.target.result; } reader.readAsDataURL(input.files[0]); } else { swal("Sorry - you're browser doesn't support the FileReader API"); } } $uploadCrop = $('#upload-demo').croppie({ viewport: { width: 500, height: 281, }, enforceBoundary: false, enableExif: true }); $('#cropImagePop').on('shown.bs.modal', function(){ // alert('Shown pop'); $uploadCrop.croppie('bind', { url: rawImg }).then(function(){ console.log('jQuery bind complete'); }); }); $('.item-img').on('change', function () { imageId = $(this).data('id'); tempFilename = $(this).val(); $('#cancelCropBtn').data('id', imageId); readFile(this); }); $('#cropImageBtn').on('click', function (ev) { $uploadCrop.croppie('result', { type: 'base64', format: 'png', size: {width: 350, height: 200} }).then(function (resp) { $('#item-img-output').attr('src', resp); $('#featimage').attr('src', resp); $('#cropImagePop').modal('hide'); }); }); // End upload preview image &lt;/script&gt; </code></pre> </div>

有没有大神能指点一下哪里错了。。。。

package Frame; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.sql.*; import javax.swing.*; import db.DButil; public class login extends JFrame implements ActionListener{ private JPanel jp=new JPanel(); //创建标签数组 private JLabel[] jlArray={new JLabel("用户名"), new JLabel("密 码"),new JLabel("")}; private JButton jb1; private JButton jb2; private JButton jb3; private JTextField jtf=new JTextField(); private JPasswordField jpf=new JPasswordField(); //布局构造实现方法 public login(){ Icon icon1=new ImageIcon("login.jpg"); Icon icon2=new ImageIcon("reset.jpg"); Icon icon3=new ImageIcon("zhuce.jpg"); JPanel jp=new JPanel(){ protected void paintComponent(Graphics g) { ImageIcon icon = new ImageIcon("bg.jpg"); Image img = icon.getImage(); g.drawImage(img, 0, 0, icon.getIconWidth(), icon.getIconHeight(), icon.getImageObserver()); }}; jp.setLayout(null); jb1=new JButton(icon1); jb2=new JButton(icon3); jb3=new JButton(icon2); jlArray[0].setBounds(70,120,90,32); jb1.setBounds(365,110,130,60); jb2.setBounds(365,170,130,60); jlArray[1].setBounds(70,170,90,32); //将标签与按钮添加到JPanel容器中 jp.add(jlArray[0]); jp.add(jlArray[1]); jp.add(jb1); jp.add(jb2); jb1.addActionListener(this); jb2.addActionListener(this);//为按钮注册动作事件监听器 //添加修改密码的按钮 jb3.setBounds(365,230,130,60); jp.add(jb3); jp.add(jtf); jtf.setBounds(140,120,180,30);//设置文本框位置 jp.add(jpf); jpf.setBounds(140,170,180,30);//设置密码框位置 jpf.setEchoChar('*'); //密码显示字符形式 jpf.addActionListener(this); //为密码框注册动作事件监听器 this.setVisible(true);//设置窗体的可见性 jpf.addActionListener(this); //为密码框注册动作事件监听器 //设置用于显示登陆状态的标签大小位置,并将其添加进JPanel容器 jlArray[2].setBounds(70,220,300,30); jp.add(jlArray[2]); this.setTitle("登陆");//设置窗体标题 this.setBounds(450,200,500,318);//设置窗体的大小 this.setResizable(false);//设置窗体不让用户调整大小 this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); this.setVisible(true);//设置窗体的可见性 this.add(jp);//将窗体添加到面板中 jp.setBackground(Color.blue); } public static void main(String[] args) { new login();//创建登陆窗体 } public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub //得到用户名与密码 String user=jtf.getText().trim(); String pwd=String.valueOf(jpf.getPassword());//返回密码的字符串表示方式 String sql=""; if(e.getSource()==jtf){//事件源为文本框,切换焦点到密码框 jpf.requestFocus(); } else if(e.getSource()==jb1||e.getSource()==jpf){ //判断用户名和密码是否匹配 查询数据库 if(DButil.check(user, pwd)){ //登陆成功 MainFrame mf=new MainFrame(jtf.getText());//主窗体 this.dispose(); } else{ //登陆失败 jlArray[2].setText("对不起,非法的用户名和密码"); this.clear(); } } else if(e.getSource()==jb2) {//事件源为注册按钮 if(user.equals("")||pwd.equals("")) {//如果注册的用户名为空或者密码为空 jlArray[2].setText("用户名和密码都不得为空!!!"); this.clear();//清空输入文本框 } else { sql="select uid from user where uid='"+user+"'"; if(DButil.isExist(sql)) {//用户名已经存在 jlArray[2].setText("对不起,用户名已存在!!!"); this.clear();//清空输入文本框 } else { sql="insert into user values('"+user+"','"+pwd+"')"; if(DButil.update(sql)>0) {//注册成功 jlArray[2].setText("恭喜您!!!注册成功,请登陆"); } } } } else if(e.getSource()==jb3)//修改密码的监听 { //判断是否已经输入用户名和密码 if(user.equals("")||pwd.equals("")) { jlArray[2].setText("修改密码先输入正确的用户名和密码!!!"); this.clear();//清空输入文本框 } //判断是否输入了正确的用户名和密码 else if(DButil.check(user,pwd)) { //正确的用户名和密码 String password=JOptionPane.showInputDialog(this,"修改密码:","请输入新密码", JOptionPane.PLAIN_MESSAGE); //得到新的密码为空 if(password==null||password.equals("")) { JOptionPane.showMessageDialog(this,"密码不得为空!!!","错误", JOptionPane.WARNING_MESSAGE); } else {//密码不为空 sql="update user set pwd='"+password+"' where uid='"+user+"'";//更新密码的SQL if(DButil.update(sql)>0) {//密码修改成功 this.clear();//清空输入文本框 jlArray[2].setText("恭喜您!!!密码修改成功,请用新密码登陆"); } } } else { JOptionPane.showMessageDialog(this,"用户名或者密码错误!!!","错误", JOptionPane.WARNING_MESSAGE); this.clear();//清空输入文本框 } } } package Frame; import javax.swing.*; import javax.swing.table.DefaultTableModel; import db.DButil; import java.awt.*; import java.awt.event.*; import java.sql.*; import java.io.*; import java.util.*; public class MainFrame extends JFrame implements ActionListener,ItemListener { private String uname=null;//当前用户的名字 private boolean isInsert=false;//是否为添加默认为否 private JPanel topjp=new JPanel();//界面上半部分的JPanel容器 private JButton jba=new JButton("模糊查询"); private JButton jbs=new JButton("查找"); private JTextField jtfs=new JTextField();//按给出信息查找联系人信息 private JRadioButton jrbxm=new JRadioButton("按姓名查找",true); private JRadioButton jrbbh=new JRadioButton("按学号查找",false); private ButtonGroup bg=new ButtonGroup();//单选按钮组 private JPanel jpbr=new JPanel();//单选按钮面板 private JPanel jpyInfo=new JPanel();//右侧显示个人信息的面板 private JTextArea jta=new JTextArea(); // 模糊查询得到的信息文本区 private JLabel[] jlInfo={new JLabel("学号:"),new JLabel("姓名:"), new JLabel("性别:"),new JLabel("出生日期:"), new JLabel("电话号码:"),new JLabel("QQ:"), new JLabel("Email:"),new JLabel("地址:"), new JLabel("添加相片")}; private JButton[] jbInfo={new JButton("编辑"),new JButton("保存"), new JButton("浏览"), new JButton("上传"),}; private JLabel jlPhoto=new JLabel();//显示图像的JLabel控件 private JTextField[] jtfInfo=new JTextField[10]; private JTextField jtfPhoto=new JTextField();//添加照片到相册的路径 private JFileChooser jfcPic=new JFileChooser();//上传图像的文件选择器 private DefaultTableModel tableModel; private JTable table; //性别部分 private JRadioButton jrbMale=new JRadioButton("男",true); private JRadioButton jrbFemale=new JRadioButton("女"); private ButtonGroup bgGender=new ButtonGroup(); private JPanel jpGender=new JPanel();//单选按钮面板 private JLabel jlDetail=new JLabel();//右侧显示一幅图片的标签 private JSplitPane jspOuter=//上下分割的JSplitPane new JSplitPane(JSplitPane.VERTICAL_SPLIT,true); //系统托盘部分 private PopupMenu popup=new PopupMenu(); private SystemTray tray;//定义SystemTray成员变量 private TrayIcon trayIcon;//定义TrayIcon成员变量 private MenuItem exit=new MenuItem("退出程序");//定义菜单 public void initJps() {//界面上半部分的初始化 topjp.setLayout(null);//设置topjp布局管理器为null //设置按钮大小并添加到JPanel面板里 jba.setBounds(5,10,120,26); jba.addActionListener(this);//为模糊查询按钮注册事件监听器 topjp.add(jba); jbs.setBounds(130,10,80,26); jbs.addActionListener(this);//为查找按钮注册事件监听器 topjp.add(jbs);//添加按钮到topjp面板里 //设置jtfs文本框大小并添加到jps面板里 jtfs.setBounds(215,10,120,26); jtfs.addActionListener(this);//为文本框注册事件监听器 topjp.add(jtfs); //设置单选按钮大小和位置并添加到jpbr面板里同时添加到bg单选按钮组里 jrbxm.setBounds(5,3,50,26); jrbxm.addItemListener(this);//为单选按钮注册ItemEvent事件监听器 bg.add(jrbxm); jpbr.add(jrbxm); jrbbh.setBounds(60,3,50,26); jrbbh.addItemListener(this); bg.add(jrbbh); jpbr.add(jrbbh); jpbr.setBounds(360,10,200,26); topjp.add(jpbr); } public void initInfo() {//初始化信息界面 jpyInfo.setLayout(null);//设置布局管理器为空 jpyInfo.setBounds(50,50,380,360);//设置信息面板的大小和位置 jlPhoto.setBounds(220,10,150,170);//设置联系人图像JLabel的大小和位置 jlPhoto.setBorder(BorderFactory.createLineBorder(Color.BLACK));//将JLbel的边框线显现出来 jpyInfo.add(jlPhoto);//将显示联系人照片的JLabel添加到信息面板 tableModel=new DefaultTableModel(); Vector vector1 = new Vector(); DButil db = new DButil(); vector1.add("学号"); vector1.add("姓名"); vector1.add("性别"); vector1.add("出生日期"); vector1.add("电话号码"); vector1.add("QQ"); vector1.add("Email"); vector1.add("地址"); vector1.add("照片路径"); tableModel.setDataVector(null, vector1); System.out.print(123); table=new JTable(tableModel); //table.addMouseListener((MouseListener) this); table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); JScrollPane js=new JScrollPane(table); //添加相片部分的控件 jtfPhoto.setBounds(80,250,200,26);//设置得到照片路径的文本框的大小和位置 jpyInfo.add(jtfPhoto);//将得到照片路径的文本框添加到信息面板 jbInfo[2].setBounds(285,250,80,26); jbInfo[2].addActionListener(this);//为添加照片的浏览按钮注册事件监听器 jpyInfo.add(jbInfo[2]); //上传按钮 jbInfo[3].setBounds(380,250,80,26); jbInfo[3].addActionListener(this);//为添加照片的浏览按钮注册事件监听器 jpyInfo.add(jbInfo[3]); for(int i=0;i<9;i++)//添加JLabel,并设置大小和位置 { jlInfo[i].setBounds(20,10+i*30,60,26); jpyInfo.add(jlInfo[i]); } for(int i=0;i<10;i++) {//初始化一些文本框 jtfInfo[i]=new JTextField(); } //学号 jtfInfo[0].setBounds(80,10,135,26); jpyInfo.add(jtfInfo[0]); //姓名 jtfInfo[1].setBounds(80,40,135,26); jpyInfo.add(jtfInfo[1]); //出生日期 jtfInfo[3].setBounds(80,100,135,26); jpyInfo.add(jtfInfo[3]); //电话号码 jtfInfo[4].setBounds(80,130,135,26); jpyInfo.add(jtfInfo[4]); //QQ jtfInfo[5].setBounds(80,160,135,26); jpyInfo.add(jtfInfo[5]); //Email jtfInfo[6].setBounds(80,190,135,26); jpyInfo.add(jtfInfo[6]); //地址文本框的添加 jtfInfo[7].setBounds(80,220,285,26); jpyInfo.add(jtfInfo[7]); //模糊查询信息文本区的添加 js.setBounds(0,350,600,100); jpyInfo.add(js); //编辑、保存按钮 jbInfo[0].setBounds(160,300,80,26); jbInfo[0].addActionListener(this); jpyInfo.add(jbInfo[0]); jbInfo[1].setBounds(260,300,80,26); jbInfo[1].addActionListener(this); jpyInfo.add(jbInfo[1]); //性别部分 jrbMale.setBounds(5,3,50,26); jrbMale.addItemListener(this); //为单选按钮注册ItemEvent事件监听器 bgGender.add(jrbMale); jpGender.add(jrbMale); jrbFemale.setBounds(60,3,50,26); jrbFemale.addItemListener(this); //为单选按钮注册ItemEvent事件监听器 bgGender.add(jrbFemale); jpGender.add(jrbFemale); jpGender.setBounds(60,70,125,26); jpyInfo.add(jpGender); } public void clearInfo()//清空信息面板 { for(int i=0;i<10;i++) { jtfInfo[i].setText("");//清空文本框 } jlPhoto.setIcon(null);//清空图像 } public void setjtaArea(String information){ if(information.isEmpty()){ JOptionPane.showMessageDialog(this,"所查用户不存在!!!","错误", JOptionPane.WARNING_MESSAGE); } else { jta.setText(information); } } public void setInfo(Vector<String> pInfo)//将信息向量设置到信息面板中 {//将信息向量按规则填到信息面板里 this.clearInfo(); if(pInfo.size()==0) { JOptionPane.showMessageDialog(this,"所查用户不存在!!!","错误", JOptionPane.WARNING_MESSAGE); } else { for(int i=0;i<2;i++) {//显示联系人编号和姓名 jtfInfo[i].setText(pInfo.get(i)); } if(pInfo.get(2).equals("男")) {//显示性别 jrbMale.setSelected(true); } else {//显示性别 jrbFemale.setSelected(true); } for(int i=3;i<9;i++) {//显示出生日期、电话号码和QQ jtfInfo[i].setText(pInfo.get(i)); } } } public Vector<String> getInfo()//从信息面板得到用户输入的信息 { Vector<String> pInfo=new Vector<String>(); pInfo.add(jtfInfo[0].getText().trim());//添加pid pInfo.add(jtfInfo[1].getText().trim());//添加pname String gender=jrbMale.isSelected()?"男":"女"; pInfo.add(gender);//添加性别 pInfo.add(jtfInfo[3].getText().trim());//出生日期 pInfo.add(jtfInfo[4].getText().trim());//电话号码 pInfo.add(jtfInfo[5].getText().trim());//QQ pInfo.add(jtfInfo[6].getText().trim());//Email pInfo.add(jtfInfo[7].getText().trim());//地址 String photoPath=jtfPhoto.getText().trim();//得到照片路径 pInfo.add(photoPath);//照片路径 return pInfo; } public void monitorSaveButton() //监听保存按钮的方法 { String sql=""; String pid=jtfInfo[0].getText().trim();//得到联系人的编号 String pname=jtfInfo[1].getText().trim();//得到联系人的姓名 String gender=jrbMale.isSelected()?"男":"女"; String s1=jtfInfo[3].getText().trim(); String s2=jtfInfo[4].getText().trim(); String s3=jtfInfo[5].getText().trim(); String s4=jtfInfo[6].getText().trim(); String s5=jtfInfo[7].getText().trim(); String s6=jtfPhoto.getText().trim(); String sqla="select * from contacts where pid='"+pid+"'";//判断此编号是否存在的SQL String sqlb="select * from contacts where pname='"+pname+"'";//判断此姓名是否存在的SQL boolean isIdExist=DButil.isExist(sqla);//得到编号是否存在 boolean isNameExist=DButil.isExist(sqlb);//得到姓名是否存在 if(!(pid.equals(" ")||pname.equals(" "))) { if(isIdExist||isNameExist){ JOptionPane.showMessageDialog(this,"联系人已存在"+ " , 添加联系人失败","错误",JOptionPane.WARNING_MESSAGE); } else { sql="insert into contacts values (?,?,?,?,?,?,?,?,?,?)"; String[] paras={pid,pname,gender,s1,s2,s3,s4,s5,s6,null}; if(DButil.update(sql,paras)>0){ JOptionPane.showMessageDialog(this,"联系人保存成功","提示", JOptionPane.INFORMATION_MESSAGE); } } } } public void setEditable(boolean Editable)//设置信息窗口是否可编辑 { jrbFemale.setEnabled(Editable);//设置性别是否可编辑 jrbMale.setEnabled(Editable);//设置性别是否可编辑 for(int i=0;i<8;i++) { jtfInfo[i].setEditable(Editable);//设置文本框是否可编辑 } } public void monitorSearchButton()//监听查找按钮的方法 { String name=jtfs.getText().trim(); String sql="";//声明查找字符串 if(name.equals("")) { JOptionPane.showMessageDialog(this,"查找条件不能为空!!!", "错误", JOptionPane.WARNING_MESSAGE); } else { if(jrbxm.isSelected()==true) {//按姓名查找 sql="select pid,pname,pgender,pbirthday,pnumber,pQQ,pemail,padress,pphoto from contacts where pname='"+name+"'"; this.setInfo(DButil.getPerInfo(sql));//设置信息面板为该联系人的信息 } else {//按编号查找 sql="select pid,pname,pgender,pbirthday,pnumber,pQQ,pemail,padress,pphoto from contacts where pid='"+name+"'"; this.setInfo(DButil.getPerInfo(sql));//设置信息面板为该联系人的信息 } } this.setEditable(false);//设置面板不可编辑 } public void monitorRandomSearchButton(String information){ //监听模糊查询按钮 String adress=jba.getText().trim(); String sql="";//声明查找字符串 if(adress.equals("")) { JOptionPane.showMessageDialog(this,"查找条件不能为空!!!", "错误", JOptionPane.WARNING_MESSAGE); } else{ sql="select pid,pname,pgender,pbirthday,pnumber,pQQ,pemail,padress,pphoto from contacts where padress like '%天河区%'"; } } public MainFrame(String uname) { //主窗体构造器 this.uname=uname;//设置用户名 this.initJps();//界面上半部分的搭建 this.initInfo(); jspOuter.setDividerLocation(46);//设置分割窗体JSplitPane的位置 jspOuter.setTopComponent(topjp);//设置窗体上半部分的控件 jspOuter.setBottomComponent(jpyInfo);//设置下半部分的控件 //设置窗体关闭按钮执行的动作 this.add(jspOuter); this.addWindowListener( new WindowAdapter() { @SuppressWarnings("deprecation") public void WindowClosing(WindowEvent e) { //将窗体隐藏 MainFrame.this.hide(); } } ); //设置主窗体的图标、标题、大小以及可见性 this.setResizable(false);//设置窗体不让调整大小 this.setTitle(uname+"的通讯录"); this.setBounds(420,80,618,550); this.setVisible(true); } public void actionPerformed(ActionEvent e) { if(e.getSource()==jbInfo[1]) {//保存按钮的监听 this.monitorSaveButton(); } else if(e.getSource()==jba) {//模糊查询按钮的监听 DButil db = new DButil(); Vector vector1 = new Vector(); vector1.add("学号"); vector1.add("姓名"); vector1.add("性别"); vector1.add("出生日期"); vector1.add("电话号码"); vector1.add("QQ"); vector1.add("Email"); vector1.add("地址"); vector1.add("照片路径"); String ad = jtfs.getText().trim(); tableModel.setDataVector(db.getData(ad),vector1); } else if(e.getSource()==jbInfo[2]) {//打开图像文件路径 jfcPic.showOpenDialog(this); if(jfcPic.getSelectedFile()!=null) { jtfPhoto.setText(""+jfcPic.getSelectedFile()); } } else if(e.getSource()==jbInfo[0]) {//编辑按钮的监听 this.setEditable(true);//设置信息面板可编辑 } else if(e.getSource()==jbs||e.getSource()==jtfs) {//查找,按按钮或者在文本框里敲回车 this.monitorSearchButton(); } } public void itemStateChanged(ItemEvent e) { } public static void main(String[] args){ } } package db; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.Statement; import java.util.Vector; public class DButil { private static String jdbcName="org.gjt.mm.mysql.Driver";//声明驱动类字符串 //声明数据库连接字符串 private static String dbUrl="jdbc:mysql://127.0.0.1:3306/maillist"; private static String dbUserName="root"; private static String dbPassword="admin"; private static Connection con=null;//声明数据库连接对象引用 private static Statement stat=null;//声明语句对象引用 private static PreparedStatement pstmt=null; private static ResultSet rs=null;//声明结果集对象引用 private static PreparedStatement psInsert=null;//声明预编译语句对象引用 public static Connection getConnection()//得到数据库连接的方法 { System.out.println("连接中.."); try { Class.forName(jdbcName);//加载驱动类 con=DriverManager.getConnection(dbUrl,dbUserName,dbPassword);//得到连接 System.out.println("成功连接"); } catch(Exception e){e.printStackTrace();} return con;//返回连接 } public static boolean check(String user,String pwd)//登陆验证 { boolean flag=false; try { con=DButil.getConnection();//得到数据库连接 stat=con.createStatement();//创建语句对象 rs=stat.executeQuery("select pwd from user where uid='"+user+"'"); rs.next(); String spwd=rs.getString(1);//得到密码 if(spwd.equals(pwd)) { flag=true;//密码匹配,登陆成功 } } catch(Exception e) { flag=false;//有任何异常发生,登陆失败 } finally{DButil.closeCon();}//关闭数据库连接 return flag; } //某条记录是否存在 public static boolean isExist(String sql) { boolean flag=false;//设置返回值 try { con=DButil.getConnection();//得到数据库连接 stat=con.createStatement();//创建语句对象 rs=stat.executeQuery(sql);//执行查询 if(rs.next()) { flag=true;//存在,设置返回值为true } } catch(Exception e) { e.printStackTrace(); flag=false;//发生任何异常,置返回结果为false } finally{DButil.closeCon();}//关闭数据库连接 return flag;//返回结果 } public static int update(String sql,String[] paras)//更新数据库 { int count=0;//声明返回值 try { con=DButil.getConnection(); pstmt=con.prepareStatement(sql); for(int i=0; i<paras.length;i++){ pstmt.setString(i+1, paras[i]); } count=pstmt.executeUpdate(); } catch(Exception e) { e.printStackTrace(); count=-1;//更新失败返回值为-1 } finally{DButil.closeCon();}//关闭数据库连接 return count;//返回结果 } public static int update(String sql)//更新数据库 { int count=0;//声明返回值 try { con=DButil.getConnection(); stat=con.createStatement(); count=stat.executeUpdate(sql);//执行更新 } catch(Exception e) { e.printStackTrace(); count=-1;//更新失败返回值为-1 } finally{DButil.closeCon();}//关闭数据库连接 return count;//返回结果 } //====================添加联系人================================= public static String insertPerson(String uid,Vector<String> pInfo) { String isPathNull="isNotNull";//传过来的图像是不是合法,默认不为空 try{ con=getConnection();//得到数据库连接 if(pInfo.get(8).equals("")||pInfo.get(8)==null) {//照片路径为空,则不插入图像 psInsert=con.prepareStatement("insert into contacts(pid,pname,pgender,pbirthday,pnumber,"+ "pQQ,pemail,padress,uid)"+ "values(?,?,?,?,?,?,?,?,?)"); } else {//照片路径不为空,则插入图像 psInsert=con.prepareStatement("insert into contacts(pid,pname,pgender,pbirthday,pnumber,"+ "pQQ,pemail,padress,pphoto,uid)"+ "values(?,?,?,?,?,?,?,?,?,?,?)" ); File f=new File(pInfo.get(8));//获取选取的图片文件 byte[] b=new byte[(int)f.length()];//创建存储图片数据的数组 FileInputStream fin=new FileInputStream(f); fin.read(b);fin.close();//读取文件存于byte数组中并关闭输入流 psInsert.setBytes(11,b);//设置pphoto参数的数据 } for(int i=0;i<8;i++) {//设置公共信息 psInsert.setString(i+1,pInfo.get(i)); } psInsert.setString(10,uid);//所属用户 psInsert.execute();psInsert.close();//执行更新并关闭语句 } catch(FileNotFoundException fnfe){isPathNull="isNull";}//图片路径不对 catch(Exception e){e.printStackTrace();} finally{DButil.closeCon();}//关闭数据库连接 return isPathNull; } public static String updatePerson(String uid,Vector<String> pInfo){ String isPathNull="isNotNull";//传过来的path是不是合法 try{ con=getConnection(); if(pInfo.get(9).equals("")||pInfo.get(9)==null) {//更新时候,如果照片路径为空,则不更新图像 psInsert=con.prepareStatement("update contacts set pname=?,pgender=?,birthday=?,pnumber=?,"+ "pQQ=?,pemail=?,padress=?,pphoto=?,uid=? where pid='"+pInfo.get(0).trim()+"'"); } else {//如果照片路径不为空,则更新图像 psInsert=con.prepareStatement("update contacts set pname=?,pgender=?,page=?,pnumber=?,"+ "pemail=?,pgroup=?,ppostalcode=?,padress=?,uid=?,pphoto=? where pid='"+pInfo.get(0).trim()+"'"); File f=new File(pInfo.get(9));//获取选取的图片文件 byte[] b=new byte[(int)f.length()];//创建存储图片数据的数组 FileInputStream fin=new FileInputStream(f); fin.read(b);fin.close();//读取文件存于byte数组中并关闭输入流 psInsert.setBytes(10,b); } for(int i=1;i<8;i++){//设置公共的信息部分 psInsert.setString(i,pInfo.get(i)); } psInsert.setString(9,uid);//所属用户 psInsert.execute();psInsert.close();//执行更新并关闭语句 } catch(FileNotFoundException fnfe){isPathNull="isNull";}//路径不合法 catch(Exception e){e.printStackTrace();} finally{DButil.closeCon();}//关闭连接 return isPathNull; } public Vector getData(String ad){ Vector vector=new Vector(); try { //陈述对象 con=getConnection();//得到数据库连接 stat=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);//创建语句对象 rs=stat.executeQuery("select * from contacts where padress LIKE '%"+ad+"%'"); ResultSetMetaData rm=rs.getMetaData(); //循环打印出数据库表中数据 int n=rm.getColumnCount(); while(rs.next()){ Vector ve=new Vector(); for(int i=1;i<n+1;i++){ String s=rs.getString(i); ve.add(s); } vector.add(ve);//Vector对象接收表中数据 } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{if(rs!=null){ try { rs.close();//关闭结果集 } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(stat!=null){ try { stat.close();//关闭陈述对象 } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(con!=null){ try { con.close();//关闭连接 } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } return vector; } public static Vector<String> getPerInfo(String sql)//得到联系人信息 { Vector<String> pInfo=new Vector<String>(); try { con=getConnection();//得到数据库连接 stat=con.createStatement();//创建语句对象 rs=stat.executeQuery(sql);//执行查询 while(rs.next()) { for(int i=1;i<10;i++) { System.out.println(rs.getString(i)); pInfo.add(rs.getString(i));//将联系人信息添加到返回向量 } } } catch(Exception e) { e.printStackTrace(); } finally{DButil.closeCon();}//关闭数据库连接 return pInfo;//返回信息集合 } public static void closeCon()//关闭数据库连接的方法 { try { if(rs!=null){rs.close(); rs=null;}//如果结果集不为空关闭结果集并赋值null if(stat!=null){stat.close(); stat=null;}//如果语句对象不为空关闭语句对象并赋值null if(con!=null){con.close(); con=null;}//如果连接不为空关闭连接并赋值null } catch(Exception e){e.printStackTrace();} } public static void main(String[] args){ DButil DB=new DButil(); System.out.println(DB.getConnection()); } } }

在中国程序员是青春饭吗?

今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...

技术大佬:我去,你写的 switch 语句也太老土了吧

昨天早上通过远程的方式 review 了两名新来同事的代码,大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是忍不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊。 private static String createPlayer(PlayerTypes p...

华为初面+综合面试(Java技术面)附上面试题

华为面试整体流程大致分为笔试,性格测试,面试,综合面试,回学校等结果。笔试来说,华为的难度较中等,选择题难度和网易腾讯差不多。最后的代码题,相比下来就简单很多,一共3道题目,前2题很容易就AC,题目已经记不太清楚,不过难度确实不大。最后一题最后提交的代码过了75%的样例,一直没有发现剩下的25%可能存在什么坑。 笔试部分太久远,我就不怎么回忆了。直接将面试。 面试 如果说腾讯的面试是挥金如土...

和黑客斗争的 6 天!

互联网公司工作,很难避免不和黑客们打交道,我呆过的两家互联网公司,几乎每月每天每分钟都有黑客在公司网站上扫描。有的是寻找 Sql 注入的缺口,有的是寻找线上服务器可能存在的漏洞,大部分都...

讲一个程序员如何副业月赚三万的真实故事

loonggg读完需要3分钟速读仅需 1 分钟大家好,我是你们的校长。我之前讲过,这年头,只要肯动脑,肯行动,程序员凭借自己的技术,赚钱的方式还是有很多种的。仅仅靠在公司出卖自己的劳动时...

win10暴力查看wifi密码

刚才邻居打了个电话说:喂小灰,你家wifi的密码是多少,我怎么连不上了。 我。。。 我也忘了哎,就找到了一个好办法,分享给大家: 第一种情况:已经连接上的wifi,怎么知道密码? 打开:控制面板\网络和 Internet\网络连接 然后右击wifi连接的无线网卡,选择状态 然后像下图一样: 第二种情况:前提是我不知道啊,但是我以前知道密码。 此时可以利用dos命令了 1、利用netsh wlan...

上班一个月,后悔当初着急入职的选择了

最近有个老铁,告诉我说,上班一个月,后悔当初着急入职现在公司了。他之前在美图做手机研发,今年美图那边今年也有一波组织优化调整,他是其中一个,在协商离职后,当时捉急找工作上班,因为有房贷供着,不能没有收入来源。所以匆忙选了一家公司,实际上是一个大型外包公司,主要派遣给其他手机厂商做外包项目。**当时承诺待遇还不错,所以就立马入职去上班了。但是后面入职后,发现薪酬待遇这块并不是HR所说那样,那个HR自...

总结了 150 余个神奇网站,你不来瞅瞅吗?

原博客再更新,可能就没了,之后将持续更新本篇博客。

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

如果你是老板,你会不会踢了这样的员工?

有个好朋友ZS,是技术总监,昨天问我:“有一个老下属,跟了我很多年,做事勤勤恳恳,主动性也很好。但随着公司的发展,他的进步速度,跟不上团队的步伐了,有点...

我入职阿里后,才知道原来简历这么写

私下里,有不少读者问我:“二哥,如何才能写出一份专业的技术简历呢?我总感觉自己写的简历太烂了,所以投了无数份,都石沉大海了。”说实话,我自己好多年没有写过简历了,但我认识的一个同行,他在阿里,给我说了一些他当年写简历的方法论,我感觉太牛逼了,实在是忍不住,就分享了出来,希望能够帮助到你。 01、简历的本质 作为简历的撰写者,你必须要搞清楚一点,简历的本质是什么,它就是为了来销售你的价值主张的。往深...

带了6个月的徒弟当了面试官,而身为高级工程师的我天天修Bug......

即将毕业的应届毕业生一枚,现在只拿到了两家offer,但最近听到一些消息,其中一个offer,我这个组据说客户很少,很有可能整组被裁掉。 想问大家: 如果我刚入职这个组就被裁了怎么办呢? 大家都是什么时候知道自己要被裁了的? 面试软技能指导: BQ/Project/Resume 试听内容: 除了刷题,还有哪些技能是拿到offer不可或缺的要素 如何提升面试软实力:简历, 行为面试,沟通能...

!大部分程序员只会写3年代码

如果世界上都是这种不思进取的软件公司,那别说大部分程序员只会写 3 年代码,恐怕就没有程序员这种职业。

离职半年了,老东家又发 offer,回不回?

有小伙伴问松哥这个问题,他在上海某公司,在离职了几个月后,前公司的领导联系到他,希望他能够返聘回去,他很纠结要不要回去? 俗话说好马不吃回头草,但是这个小伙伴既然感到纠结了,我觉得至少说明了两个问题:1.曾经的公司还不错;2.现在的日子也不是很如意。否则应该就不会纠结了。 老实说,松哥之前也有过类似的经历,今天就来和小伙伴们聊聊回头草到底吃不吃。 首先一个基本观点,就是离职了也没必要和老东家弄的苦...

HTTP与HTTPS的区别

面试官问HTTP与HTTPS的区别,我这样回答让他竖起大拇指!

程序员毕业去大公司好还是小公司好?

虽然大公司并不是人人都能进,但我仍建议还未毕业的同学,尽力地通过校招向大公司挤,但凡挤进去,你这一生会容易很多。 大公司哪里好?没能进大公司怎么办?答案都在这里了,记得帮我点赞哦。 目录: 技术氛围 内部晋升与跳槽 啥也没学会,公司倒闭了? 不同的人脉圈,注定会有不同的结果 没能去大厂怎么办? 一、技术氛围 纵观整个程序员技术领域,哪个在行业有所名气的大牛,不是在大厂? 而且众所...

程序员为什么千万不要瞎努力?

本文作者用对比非常鲜明的两个开发团队的故事,讲解了敏捷开发之道 —— 如果你的团队缺乏统一标准的环境,那么即使勤劳努力,不仅会极其耗时而且成果甚微,使用...

为什么程序员做外包会被瞧不起?

二哥,有个事想询问下您的意见,您觉得应届生值得去外包吗?公司虽然挺大的,中xx,但待遇感觉挺低,马上要报到,挺纠结的。

当HR压你价,说你只值7K,你该怎么回答?

当HR压你价,说你只值7K时,你可以流畅地回答,记住,是流畅,不能犹豫。 礼貌地说:“7K是吗?了解了。嗯~其实我对贵司的面试官印象很好。只不过,现在我的手头上已经有一份11K的offer。来面试,主要也是自己对贵司挺有兴趣的,所以过来看看……”(未完) 这段话主要是陪HR互诈的同时,从公司兴趣,公司职员印象上,都给予对方正面的肯定,既能提升HR的好感度,又能让谈判气氛融洽,为后面的发挥留足空间。...

面试:第十六章:Java中级开发(16k)

HashMap底层实现原理,红黑树,B+树,B树的结构原理 Spring的AOP和IOC是什么?它们常见的使用场景有哪些?Spring事务,事务的属性,传播行为,数据库隔离级别 Spring和SpringMVC,MyBatis以及SpringBoot的注解分别有哪些?SpringMVC的工作原理,SpringBoot框架的优点,MyBatis框架的优点 SpringCould组件有哪些,他们...

面试阿里p7,被按在地上摩擦,鬼知道我经历了什么?

面试阿里p7被问到的问题(当时我只知道第一个):@Conditional是做什么的?@Conditional多个条件是什么逻辑关系?条件判断在什么时候执...

终于懂了TCP和UDP协议区别

终于懂了TCP和UDP协议区别

Python爬虫,高清美图我全都要(彼岸桌面壁纸)

爬取彼岸桌面网站较为简单,用到了requests、lxml、Beautiful Soup4

无代码时代来临,程序员如何保住饭碗?

编程语言层出不穷,从最初的机器语言到如今2500种以上的高级语言,程序员们大呼“学到头秃”。程序员一边面临编程语言不断推陈出新,一边面临由于许多代码已存在,程序员编写新应用程序时存在重复“搬砖”的现象。 无代码/低代码编程应运而生。无代码/低代码是一种创建应用的方法,它可以让开发者使用最少的编码知识来快速开发应用程序。开发者通过图形界面中,可视化建模来组装和配置应用程序。这样一来,开发者直...

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

大三实习生,字节跳动面经分享,已拿Offer

说实话,自己的算法,我一个不会,太难了吧

程序员垃圾简历长什么样?

已经连续五年参加大厂校招、社招的技术面试工作,简历看的不下于万份 这篇文章会用实例告诉你,什么是差的程序员简历! 疫情快要结束了,各个公司也都开始春招了,作为即将红遍大江南北的新晋UP主,那当然要为小伙伴们做点事(手动狗头)。 就在公众号里公开征简历,义务帮大家看,并一一点评。《启舰:春招在即,义务帮大家看看简历吧》 一石激起千层浪,三天收到两百多封简历。 花光了两个星期的所有空闲时...

美团面试,问了ThreadLocal原理,这个回答让我通过了

他想都想不到,ThreadLocal我烂熟于心

大牛都会用的IDEA调试技巧!!!

导读 前天面试了一个985高校的实习生,问了他平时用什么开发工具,他想也没想的说IDEA,于是我抛砖引玉的问了一下IDEA的调试用过吧,你说说怎么设置断点...

面试官:你连SSO都不懂,就别来面试了

大厂竟然要考我SSO,卧槽。

程序员是做全栈工程师好?还是专注一个领域好?

昨天,有位大一的同学私信我,说他要做全栈工程师。 我一听,这不害了孩子么,必须制止啊。 谁知,讲到最后,更确定了他做全栈程序员的梦想。 但凡做全栈工程师的,要么很惨,要么很牛! 但凡很牛的,绝不是一开始就是做全栈的! 全栈工程师听起来好听,但绝没有你想象的那么简单。 今天听我来给你唠,记得帮我点赞哦。 一、全栈工程师的职责 如果你学习编程的目的只是玩玩,那随意,想怎么学怎么学。...

终于,月薪过5万了!

来看几个问题想不想月薪超过5万?想不想进入公司架构组?想不想成为项目组的负责人?想不想成为spring的高手,超越99%的对手?那么本文内容是你必须要掌握的。本文主要详解bean的生命...

我说我懂多线程,面试官立马给我发了offer

不小心拿了几个offer,有点烦

自从喜欢上了B站这12个UP主,我越来越觉得自己是个废柴了!

不怕告诉你,我自从喜欢上了这12个UP主,哔哩哔哩成为了我手机上最耗电的软件,几乎每天都会看,可是吧,看的越多,我就越觉得自己是个废柴,唉,老天不公啊,不信你看看…… 间接性踌躇满志,持续性混吃等死,都是因为你们……但是,自己的学习力在慢慢变强,这是不容忽视的,推荐给你们! 都说B站是个宝,可是有人不会挖啊,没事,今天咱挖好的送你一箩筐,首先啊,我在B站上最喜欢看这个家伙的视频了,为啥 ,咱撇...

代码注释如此沙雕,会玩还是你们程序员!

某站后端代码被“开源”,同时刷遍全网的,还有代码里的那些神注释。 我们这才知道,原来程序员个个都是段子手;这么多年来,我们也走过了他们的无数套路… 首先,产品经理,是永远永远吐槽不完的!网友的评论也非常扎心,说看这些代码就像在阅读程序员的日记,每一页都写满了对产品经理的恨。 然后,也要发出直击灵魂的质问:你是尊贵的付费大会员吗? 这不禁让人想起之前某音乐app的穷逼Vip,果然,穷逼在哪里都是...

立即提问
相关内容推荐