要求上传的参数类型是 byte[]jsondata,怎么转?

让我根据接口文档的要求在数据库中抽取数据,然后调用webServer接口将数据上传。接口要求 数据在组织时,以json格式组织。就是byte[] jsonData。

我的把抽出来的数据转成json然后存jsonarray里了,现在怎么转成byte[]jsonData
求指教!!!!

private int uploadDataType_1() throws SQLException{
        //获取数据
        int start = 1;//开始记录索引位置
        int pageSize = 20;//页大小(每页显示条数即一次查询多少条数据)
        int SJpageSize =20 ;//实际当前页的数据量
        int responseCode=0;//初始化返回值
        int n = 0;//测试
        int m =0;
        while (SJpageSize==20) {
            String sql = "select * from (select *, ROW_NUMBER() OVER(Order by id ) AS RowId from TB_StoreHouse ) as b where RowId between "+ start +" and "+ pageSize ;
            ResultSet resultSet = DBConnection.executeQuery(sql);
            start+=20;
            pageSize+=20;
            //数据集结构
            ResultSetMetaData reMetaData = resultSet.getMetaData();
            //数据集的列数
            int columnCount = reMetaData.getColumnCount();  
            JSONArray array = new JSONArray();
            SJpageSize=0;
            while (  resultSet.next()) {
                //转json
                JSONObject jsonObject = new JSONObject();
                for (int i = 1; i <= columnCount; i++) {
                    String columnLabel = reMetaData.getColumnLabel(i);
                    String value = resultSet.getString(columnLabel);
                    jsonObject.put(columnLabel, value);
                }
                ++SJpageSize;
                array.add(jsonObject);
            }

            System.out.println(array);
            GrainServiceImplService rs = new GrainServiceImplService();
            GrainService re = rs.getGrainServiceImplPort();
            responseCode=re.test(array, "1", 1, "3", "4");

            m +=SJpageSize;
            System.out.println("当前第"+ ++n+"页,有"+SJpageSize+"条,已上传"+m+"条");
        }
        return responseCode;

responseCode=re.test(array, "1", 1, "3", "4"); --报错要求第一个参数是byte[]jsonData

2个回答

试试这个
byte[] jsonData = array.toJSONString().getBytes();

qq_44705968
lT丶蓝人 谢谢感谢!
7 个月之前 回复

如果目标 API 要求使用 byte 字节数组的话,试试先将 JSON 转成 String ,再转成字节数组。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
用web api下载服务器图片时传输的byte[]数组变化了。我的目的是接收到正确的byte[]

**用web api下载服务器图片时传输的byte[]数组变化了。(上面从sql出来的byte[]是正确的,下面的接收到的byte[]就有问题了)传输用的是json,下面的是发送的代码和接受的代码,求各位大神解答,自己觉得是发送的方式有问题。数据流是SQl中的image类型** [HttpGet] public byte[] GoodsPhoto(Int32 goodsid) { try { //DataTable goodsTable = new DataTable(); //byte[] a = new byte[10]; using (SqlConnection cn = new SqlConnection(DBHelper.Instance.ConnectionString)) { String sql = "select photo from Bill_GoodsPhoto where goodsid=6"; SqlCommand cmd = new SqlCommand(sql, cn); cmd.Parameters.AddWithValue("goodsid", goodsid); cn.Open(); SqlDataReader dr = cmd.ExecuteReader(); if (dr.Read()) { FileStream fs = new FileStream(@"f:\1.jpg", FileMode.Create, FileAccess.Write); byte[] bytes = (byte[])dr["Photo"]; //MemoryStream ms = new MemoryStream(a, 0, a.Length); //Image returnImage = Image.FromStream(ms); //returnImage.Save(@"f:\1.jpg"); return bytes; } //goodsTable.Load(dr); //return new Result<DataTable>(goodsTable); return null; } } catch (Exception ex) { return null; } } [HttpGet] public byte[] GoodsPhoto11(Int32 goodsid) { try { String URL = "http://192.168.1.106:6971/API/Epoch/GoodsPhoto?goodsid=6"; WebClient wc = new WebClient(); byte[] ab = wc.DownloadData(URL); MemoryStream ms = new MemoryStream(ab, 0, ab.Length); Image returnImage = Image.FromStream(ms); returnImage.Save(@"f:\1.jpg"); return ab; } catch (Exception ex) { return null; }

java后台将base64字符串转换为PDF后生成的PDF打不开怎么回事呀

![图片说明](https://img-ask.csdn.net/upload/201910/12/1570868633_161609.jpg) 后台代码: public static void base64StringToPdf(String base64Content,String filePath){ File file = new File(filePath);// 将原来参数修改为字符串 BASE64Decoder decoder = new BASE64Decoder(); BufferedInputStream bin = null; FileOutputStream fout = null; BufferedOutputStream bout = null; try { //将base64编码的字符串解码成字节数组 byte[] bytes = decoder.decodeBuffer(base64Content); //创建一个将bytes作为其缓冲区的ByteArrayInputStream对象 ByteArrayInputStream bais = new ByteArrayInputStream(bytes); //创建从底层输入流中读取数据的缓冲输入流对象 bin = new BufferedInputStream(bais); //创建到指定文件的输出流 fout = new FileOutputStream(file); //为文件输出流对接缓冲输出流对象 bout = new BufferedOutputStream(fout); byte[] buffers = new byte[1024]; int len = bin.read(buffers); while(len != -1){ bout.write(buffers, 0, len); len = bin.read(buffers); } //刷新此输出流并强制写出所有缓冲的输出字节,必须这行代码,否则有可能有问题 bout.flush(); } catch (IOException e) { e.printStackTrace(); } finally { try { bout.close(); fout.close(); bin.close(); } catch (IOException e) { e.printStackTrace(); } } } 前台是将页面展示的数据图标什么的生成PDF 前台代码: function downloadofpdf(){ var varname = $("#taskid").text(); if(confirm("您确认下载该PDF文件吗?")){ var target = document.getElementById("bodyid"); target.style.background = "#FFFFFF"; // if(pdfName==''||pdfName==undefined) pdfName= getNowFormatDate(); html2canvas(target, { onrendered:function(canvas) { var contentWidth = canvas.width; var contentHeight = canvas.height; //一页pdf显示html页面生成的canvas高度; var pageHeight = contentWidth /1592.28 * 841.89; //未生成pdf的html页面高度 var leftHeight = contentHeight; //页面偏移 var position = 0; //a4纸的尺寸[595.28,841.89],html页面生成的canvas在pdf中图片的宽高 var imgWidth = 595.28; var imgHeight = 592.28/contentWidth * contentHeight; var pageData = canvas.toDataURL('image/jpeg', 1.0); var pdf = new jsPDF('', 'pt', 'a4'); //有两个高度需要区分,一个是html页面的实际高度,和生成pdf的页面高度(841.89) //当内容未超过pdf一页显示的范围,无需分页 if (leftHeight < pageHeight) { pdf.addImage(pageData, 'JPEG', 0, 0, imgWidth, imgHeight ); } else { while(leftHeight > 0) { pdf.addImage(pageData, 'JPEG', 0, position, imgWidth, imgHeight); leftHeight -= pageHeight; position -= 841.89; //避免添加空白页 if(leftHeight > 0) { pdf.addPage(); } } } pdf.save(varname+".pdf"); // 将pdf输入为base格式的字符串 var buffer = pdf.output("datauristring"); // // 将base64格式的字符串转换为file文件 // var myfile = dataURLtoFile(buffer, varname); // var formdata = new FormData(); // formdata.append(name, myfile); $.post("/riskManage/uploadpdf",{data:JSON.stringify({formdata:buffer})},function(result){ //alert("hao"); }) //sc(); }, background: "#fff" }) } }

cxf +restful项目,实现一个以图片二进制流做参数的接口,接口和客户端怎么写?

以图片路径为参数的接口: @GET @Path("/vcardBean/{path}") @Produces({"application/json","application/xml"}) public VCardBean getVCardBean(@PathParam("path") String path) { //path ="D://1.png"; BufferedImage image = null; try { image = ImageIO.read(new File(path)); ImageTextService imageTextService = new ImageTextService(); String str = imageTextService.getImageText(image, "x.png", true); System.out.println(str); VCardBean vCardBean = new VCardBean(); vCardBean.setvCardStr(str); vCardBean.dealVcardContent(); return vCardBean; } catch (IOException e) { e.printStackTrace(); } return null; } 客户端代码: private static void testGet(final String format) { BufferedImage image = null; try { image = ImageIO.read(new File(PATH)); ByteArrayOutputStream baos = new ByteArrayOutputStream(); ImageIO.write(image, "jpg", baos); byte[] bytes = baos.toByteArray(); WebClient client = WebClient.create(CATEGORY_URL); VCardBean vCardBean = client.path("/vtwservice/vcardBean/"+PATH).accept(format).type(format).get(VCardBean.class); System.out.println(vCardBean.getvCardStr()); System.out.println("链接成功!!!"); } catch (IOException e) { e.printStackTrace(); } }

使用POST请求golang上传文件

<div class="post-text" itemprop="text"> <p>I'm new to golang and I'm trying to write a function that uploads a file with a post request to telegram for a bot I'm writing.</p> <p>I've tried with this code but the error I'm getting from telegram is <code>Bad Request: there is no photo in the request</code>.</p> <p>I've searched on the net for how to do that, but none of what I found helped me through the problem.</p> <pre><code>func SendPostRequest (url string, filename string) []byte { file, err := os.Open(filename) if err != nil { log.Fatal(err) } defer file.Close() response, err := http.Post(url, "binary/octet-stream", file) if err != nil { log.Fatal(err) } defer response.Body.Close() content, err := ioutil.ReadAll(response.Body) if err != nil { log.Fatal(err) } return content } </code></pre> <p>The function I'm calling the SendPostRequest from is</p> <pre><code>func (e Engine) SendPhoto (filename string, chatId int64) APIResponse { var url = fmt.Sprintf("%ssendPhoto?chat_id=%d", e.baseUrl, chatId) var content []byte = SendPostRequest(url, filename) var response APIResponse json.Unmarshal(content, &amp;response) return response } </code></pre> <p>EDIT: The link to the Telegram bot api I'm using in the code is <a href="https://core.telegram.org/bots/api" rel="nofollow noreferrer">https://core.telegram.org/bots/api</a></p> <p>And the api method is <a href="https://core.telegram.org/bots/api#sendphoto" rel="nofollow noreferrer">https://core.telegram.org/bots/api#sendphoto</a></p> </div>

使用html2canvas截图生成的Base64 参数,传递到后台,解析之后下载的图片和截图的图片不一致问题

**1.描述问题场景** 使用 html2canvas.js 工具,进行局部截图,将获取到的Base64码 利用ajax传递到后台进行解码,并输出到指定目录。 # 2.问题: 在将Base64传递到之后,进行解码后,下载的图片和截取的图片不一致问题。还请各位大佬看下什么原因 # 3.代码 前端: ``` js部分 function jietu() { var gdzherf = ''; html2canvas(document.getElementById("container"),{ useCORS:true, height: $("#container").outerHeight() + 20, width: $("#container").outerWidth() + 20 , onrendered : function (canvas) { //获取Base64码 gdzherf = canvas.toDataURL(); $("#base64Name").val(gdzherf); $("#mmg").attr("src",gdzherf); //去下载 $.ajax({ type : "post", url : "${basePath}moduleFile/downloadCanvas?gdzherf="+gdzherf, dataType : "json", success : function (data) { } }) } }) }; <div id="container" style="color: #FF0000;display: inline-block; width: 300px;height: 120px" > <div class="text">&nbsp;&nbsp;&nbsp;此<span class="sp">&nbsp;</span>页复印于我馆 </div> <div class="text"> <div class="qq"> 全宗<span id="FONDS_CODE" class="sp" style="display:block"></span> 目录<span id="CATALOGUE_NO" class="sp"></span> &nbsp;案卷 <span id="FOLDER_NO" class="sp"></span> 第<span id="PAGE_NO" class="sp"></span>页 </div> </div> <div class="text date"> 上海市xxxx档案证明专用章 </div> <div class="date"> <span id="year"></span>年<span id="month"></span>月<span id="day"></span>日 </div> </div> <a onclick="jietu()" class="easyui-linkbutton" style="width:80px">截图</a> ``` ## 产生的效果: ![前端效果](https://img-ask.csdn.net/upload/201904/29/1556503354_805590.png) 再次验证: ![再次去验证](https://img-ask.csdn.net/upload/201904/29/1556503399_168853.png) **结论:拿到前端获取的Base64数据去转换,与预期想的一致,没有问题** ## 4.现在用我的后台代码进行解码,图片与预期不符合 ``` public void download(HttpServletRequest request) throws IOException { String gdzherf = request.getParameter("gdzherf").replace("data:image/png;base64,",""); // Base64码 BASE64Decoder decoder = new BASE64Decoder(); byte[] bs = decoder.decodeBuffer(gdzherf);//解密 //生成到目标路径 for(int k=0;k<bs.length;++k) { if(bs[k]<0) {//调整异常数据 bs[k]+=256; } } String path = "C:\\Users\\Cc\\Desktop\\对比gc\\截图.png"; OutputStream out = out = new FileOutputStream(path); out.write(bs); out.flush(); out.close(); } ``` **下图是: 通过获取到的Base64 参数 下载的图片** ![图片说明](https://img-ask.csdn.net/upload/201904/29/1556503979_78757.png) ![打开结果](https://img-ask.csdn.net/upload/201904/29/1556503995_257195.png) 可以看出,**自己解码下载的文件,与前端截图的问题是不一致的**,我自己猜想是**参数传递参数问题**,我把**前端生成的Base64代码 拷贝到后台直接进行解码获取到的图片就是我想要的结果**, 问题应该就是出在传递参数过程中,不知各位有什么好的解决方法码?<br/> **下图是通过前端拷贝的Base64,在后台直接解码出来的图片**: ![图片说明](https://img-ask.csdn.net/upload/201904/29/1556504515_820700.png) 还请教各位如何处理这个Base64 参数问题,如果是因为其它问题,还请不吝赐教,谢谢各位 ------------------------------------- 现在本机自己的项目 获取的图片与前端生成的图片一致了。但是如果放到公司的项目中,则就出现了下面的情况,不知道原因是啥? 如图: ![图片说明](https://img-ask.csdn.net/upload/201904/29/1556522244_60398.png)

WebApi 上传附件到 ftp 服务器

想要实现的功能:Post附件到WebApi,WebApi 将文件转发到 ftp服务器。 主要功能已经实现,有一个问题:需要在WebApi服务器,接收流写入WebApi本地文件,然后读取文件流写入 ftp 服务器,然后再删除WebApi 服务器上的本地文件,现在不想在WebApi本地写文件,直接取Request的流写入到 ftp,不知道能不能实现,应该怎样写? 1. Post附件到WebApi 主要代码: #region 上传文件 /// <summary> /// 通过multipart/form-data方式上传文件 /// </summary> /// <returns></returns> [HttpPost] public async Task<HttpResponseMessage> PostFile() { MessagesDataCodeModel json = new MessagesDataCodeModel(false, "无效参数", 401); try { // 是否请求包含multipart/form-data。 if (!Request.Content.IsMimeMultipartContent()) { logger.Error("上传格式不是multipart/form-data"); throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType); } string root = HttpContext.Current.Server.MapPath("/UploadFiles/"); if (!Directory.Exists(HttpContext.Current.Server.MapPath("~/UploadFiles/"))) { Directory.CreateDirectory(HttpContext.Current.Server.MapPath("~/UploadFiles/")); } var provider = new MultipartFormDataStreamProvider(root); StringBuilder sb = new StringBuilder(); // Holds the response body // 阅读表格数据并返回一个异步任务. await Request.Content.ReadAsMultipartAsync(provider); // 如何上传文件到文件名. foreach (var file in provider.FileData) { string orfilename = file.Headers.ContentDisposition.FileName.TrimStart('"').TrimEnd('"'); FileInfo fileinfo = new FileInfo(file.LocalFileName); //sb.Append(string.Format("Uploaded file: {0} ({1} bytes)\n", fileInfo.Name, fileInfo.Length)); //最大文件大小 //int maxSize = Convert.ToInt32(SettingConfig.MaxSize); if (fileinfo.Length <= 0) { json.Success = false; json.Msg = "请选择上传文件"; json.Code = 301; } else if (fileinfo.Length > ConfigHelper.MaxFileSize) { json.Msg = "上传文件大小超过限制"; json.Code = 302; } else { string fileExt = orfilename.Substring(orfilename.LastIndexOf('.')); //定义允许上传的文件扩展名 //String fileTypes = SettingConfig.FileTypes; //if (String.IsNullOrEmpty(fileExt) || Array.IndexOf(fileTypes.Split(','), fileExt.Substring(1).ToLower()) == -1) //{ // json.Msg = "图片类型不正确"; // json.Code = 303; //} //else //{ //String ymd = DateTime.Now.ToString("yyyyMMdd", System.Globalization.DateTimeFormatInfo.InvariantInfo); //String newFileName = DateTime.Now.ToString("yyyyMMddHHmmss_ffff", System.Globalization.DateTimeFormatInfo.InvariantInfo); fileinfo.CopyTo(Path.Combine(root, fileinfo.Name + fileExt), true); json.Success = true; json.Msg = "操作成功"; json.Code = 200; sb.Append("/UploadFiles/" + fileinfo.Name + fileExt); json.Data = sb.ToString(); //} } fileinfo.Delete();//删除原文件 } } catch (System.Exception e) { json.Success = false; json.Msg = "服务器无响应"; json.Code = 500; logger.Error("PostFile()服务器错误", e); } return ToJsonTran.ToJson(json); } #endregion 上传文件 2. 上传到 ftp服务器 /// <summary> /// 上传文件 /// </summary> /// <param name="fileinfo">需要上传的文件</param> /// <param name="targetDir">目标路径</param> /// <param name="hostname">ftp地址</param> /// <param name="username">ftp用户名</param> /// <param name="password">ftp密码</param> public static void UploadFile(FileInfo fileinfo, string targetDir, string hostname, string username, string password) { //1. check target string target; if (targetDir.Trim() == "") { return; } target = Guid.NewGuid().ToString(); //使用临时文件名 string URI = "FTP://" + hostname + "/" + targetDir + "/" + target; ///WebClient webcl = new WebClient(); System.Net.FtpWebRequest ftp = GetRequest(URI, username, password); //设置FTP命令 设置所要执行的FTP命令, //ftp.Method = System.Net.WebRequestMethods.Ftp.ListDirectoryDetails;//假设此处为显示指定路径下的文件列表 ftp.Method = System.Net.WebRequestMethods.Ftp.UploadFile; //指定文件传输的数据类型 ftp.UseBinary = true; ftp.UsePassive = true; //告诉ftp文件大小 ftp.ContentLength = fileinfo.Length; //缓冲大小设置为2KB const int BufferSize = 2048; byte[] content = new byte[BufferSize - 1 + 1]; int dataRead; //打开一个文件流 (System.IO.FileStream) 去读上传的文件 using (FileStream fs = fileinfo.OpenRead()) { try { //把上传的文件写入流 using (Stream rs = ftp.GetRequestStream()) { do { //每次读文件流的2KB dataRead = fs.Read(content, 0, BufferSize); rs.Write(content, 0, dataRead); } while (!(dataRead < BufferSize)); rs.Close(); } } catch (Exception ex) { } finally { fs.Close(); } } ftp = null; //设置FTP命令 ftp = GetRequest(URI, username, password); ftp.Method = System.Net.WebRequestMethods.Ftp.Rename; //改名 ftp.RenameTo = fileinfo.Name; try { ftp.GetResponse(); } catch (Exception ex) { ftp = GetRequest(URI, username, password); ftp.Method = System.Net.WebRequestMethods.Ftp.DeleteFile; //删除 ftp.GetResponse(); throw ex; } finally { //fileinfo.Delete(); } // 可以记录一个日志 "上传" + fileinfo.FullName + "上传到" + "FTP://" + hostname + "/" + targetDir + "/" + fileinfo.Name + "成功." ); ftp = null; #region /***** *FtpWebResponse * ****/ //FtpWebResponse ftpWebResponse = (FtpWebResponse)ftp.GetResponse(); #endregion }

Ext.Ajax.request做文件上传不执行回调函数?

我在做一个多文件上传,整体用的EXT,所以想用EXT的异步请求完成上传,上传没问题,就是上传完了,不执行回调函数,老自动弹一个下载"uploadFile.action"文件,其实就是一个json,好像是根本没执行回调函数,求各位老鸟解释下,并帮我解决,我不想别人上传完,总提示下载"uploadFile.action"。 页面代码: [code="java"] <form id="uploadForm" action="uploadFile.action"> <table border="0" cellspacing="1" class="fu_list"> <thead> <tr> <td colspan="2"><b>上传附件</b></td> </tr> </thead> <tbody> <tr> <td align="right" width="15%" style="line-height:35px;">添加附件:</td> <td><a href="javascript:void(0);" class="files" id="idFile"></a> <img id="idProcess" style="display:none;" src="../../images/upload/loading.gif" /></td> </tr> <tr id="fileList" style="display: none"> <td colspan="2"><table border="0" cellspacing="0"> <thead> <tr> <td>文件路径</td> <td width="100"></td> </tr> </thead> <tbody id="idFileList" name="idFileList"> </tbody> </table></td> </tr> <tr> <td colspan="2" style="color:gray">温馨提示:最多可同时上传 <b id="idLimit"></b> 个文件,只允许上传 <b id="idExt"></b> 文件。 </td> </tr> <tr id="uploadButton" style="display: none"> <td colspan="2" align="center" id="idMsg"><input type="button" value="开始上传" id="idBtnupload" disabled="disabled" /> &nbsp;&nbsp;&nbsp; <input type="button" value="全部取消" id="idBtndel" disabled="disabled" /> </td> </tr> </tbody> </table> </form> <SCRIPT type="text/javascript"> //以下为附件js代码 var isIE = (document.all) ? true : false; var $ = function (id) { return "string" == typeof id ? document.getElementById(id) : id; }; var Class = { create: function() { return function() { this.initialize.apply(this, arguments); } } } var Extend = function(destination, source) { for (var property in source) { destination[property] = source[property]; } } var Bind = function(object, fun) { return function() { return fun.apply(object, arguments); } } var Each = function(list, fun){ for (var i = 0, len = list.length; i < len; i++) { fun(list[i], i); } }; //提交操作 function doUpload(){ if(Efs.getExt("uploadForm").isValid()){ myMask.show(); Ext.Ajax.request({ //请求地址 url: 'uploadFile.action', //提交参数组 fileUpload: true, form: uploadForm, scope: uploadForm, //成功时回调 success: function(response, options) { //获取响应的json字符串 myMask.hide(); var json = response.responseText; var o= Ext.util.JSON.decode(json); // var s="<s:text name="o.msg"/>"; var s=o.msg; Ext.Msg.alert('<s:text name="msg_title"/>', s); }, failure: function (response,options){ myMask.hide(); var st='<s:text name="'+o.msg+'"/>'; Ext.Msg.alert('<s:text name="msg_title"/>', st); } }); } else Ext.Msg.alert('<s:text name="msg_title"/>', '<s:text name="msg_mustFill"/>'); } //文件上传 var FileUpload = Class.create(); FileUpload.prototype = { //表单对象,文件控件存放空间 initialize: function(form, folder, options) { this.Form = $(form);//表单 this.Folder = $(folder);//文件控件存放空间 this.Files = [];//文件集合 this.SetOptions(options); this.FileName = this.options.FileName; this._FrameName = this.options.FrameName; this.Limit = this.options.Limit; this.Distinct = !!this.options.Distinct; this.ExtIn = this.options.ExtIn; this.ExtOut = this.options.ExtOut; this.onIniFile = this.options.onIniFile; this.onEmpty = this.options.onEmpty; this.onNotExtIn = this.options.onNotExtIn; this.onExtOut = this.options.onExtOut; this.onLimite = this.options.onLimite; this.onSame = this.options.onSame; this.onFail = this.options.onFail; this.onIni = this.options.onIni; if(!this._FrameName){ //为每个实例创建不同的iframe this._FrameName = "uploadFrame_" + Math.floor(Math.random() * 1000); //ie不能修改iframe的name var oFrame = isIE ? document.createElement("<iframe name=\"" + this._FrameName + "\">") : document.createElement("iframe"); //为ff设置name oFrame.name = this._FrameName; oFrame.style.display = "none"; //在ie文档未加载完用appendChild会报错 document.body.insertBefore(oFrame, document.body.childNodes[0]); } //设置form属性,关键是target要指向iframe this.Form.target = this._FrameName; this.Form.method = "post"; //注意ie的form没有enctype属性,要用encoding this.Form.encoding = "multipart/form-data"; //整理一次 this.Ini(); }, //设置默认属性 SetOptions: function(options) { this.options = {//默认值 FileName: "files",//文件上传控件的name,配合后台使用 FrameName: "",//iframe的name,要自定义iframe的话这里设置name onIniFile: function(){},//整理文件时执行(其中参数是file对象) onEmpty: function(){},//文件空值时执行 Limit: 0,//文件数限制,0为不限制 onLimite: function(){},//超过文件数限制时执行 Distinct: true,//是否不允许相同文件 onSame: function(){},//有相同文件时执行 ExtIn: [],//允许后缀名 onNotExtIn: function(){},//不是允许后缀名时执行 ExtOut: [],//禁止后缀名,当设置了ExtIn则ExtOut无效 onExtOut: function(){},//是禁止后缀名时执行 onFail: function(){},//文件不通过检测时执行(其中参数是file对象) onIni: function(){}//重置时执行 }; Extend(this.options, options || {}); }, //整理空间 Ini: function() { //整理文件集合 this.Files = []; //整理文件空间,把有值的file放入文件集合 Each(this.Folder.getElementsByTagName("input"), Bind(this, function(o){ if(o.type == "file"){ o.value && this.Files.push(o); this.onIniFile(o); } })) //插入一个新的file var file = document.createElement("input"); file.name = this.FileName; file.type = "file"; file.onchange = Bind(this, function(){ this.Check(file); this.Ini(); }); this.Folder.appendChild(file); //执行附加程序 this.onIni(); //添加附件成功,显示列表 if(this.Files.length>0){ document.getElementById('fileList').style.display=""; document.getElementById('uploadButton').style.display=""; } }, //检测file对象 Check: function(file) { //检测变量 var bCheck = true; //空值、文件数限制、后缀名、相同文件检测 if(!file.value){ bCheck = false; this.onEmpty(); } else if(this.Limit && this.Files.length >= this.Limit){ bCheck = false; this.onLimite(); } else if(!!this.ExtIn.length && !RegExp("\.(" + this.ExtIn.join("|") + ")$", "i").test(file.value)){ //检测是否允许后缀名 bCheck = false; this.onNotExtIn(); } else if(!!this.ExtOut.length && RegExp("\.(" + this.ExtOut.join("|") + ")$", "i").test(file.value)) { //检测是否禁止后缀名 bCheck = false; this.onExtOut(); } else if(!!this.Distinct) { Each(this.Files, function(o){ if(o.value == file.value){ bCheck = false; } }) if(!bCheck){ this.onSame(); } } //没有通过检测 !bCheck && this.onFail(file); }, //删除指定file Delete: function(file) { //移除指定file this.Folder.removeChild(file); this.Ini(); if(this.Folder.getElementsByTagName("input").length==1){//没有附件时隐藏 document.getElementById('fileList').style.display="none"; document.getElementById('uploadButton').style.display="none"; } }, //删除全部file Clear: function() { //清空文件空间 Each(this.Files, Bind(this, function(o){ this.Folder.removeChild(o); })); this.Ini(); document.getElementById('fileList').style.display="none";//清空同样隐藏 document.getElementById('uploadButton').style.display="none"; } } var fu = new FileUpload("uploadForm", "idFile", { Limit: 3, ExtIn: [], onIniFile: function(file){ file.value ? file.style.display = "none" : this.Folder.removeChild(file); }, onEmpty: function(){ alert("请选择一个文件"); }, onLimite: function(){ alert("超过上传限制"); }, onSame: function(){ alert("已经有相同文件"); }, // ExtIn: ["jpg", "gif"] 可以限制上传文件后缀名,不写即为所有 // onNotExtIn: function(){ alert("只允许上传" + this.ExtIn.join(",") + "文件"); }, onFail: function(file){ this.Folder.removeChild(file); }, onIni: function(){ //显示文件列表 var arrRows = []; if(this.Files.length){ var oThis = this; Each(this.Files, function(o){ var a = document.createElement("a"); a.innerHTML = "取消"; a.href = "javascript:void(0);"; a.onclick = function(){ oThis.Delete(o); return false; }; arrRows.push([o.value, a]); }); } else { arrRows.push(["<font color='gray'>没有添加文件</font>", "&nbsp;"]); } AddList(arrRows); //设置按钮 //$("idBtnupload").disabled = $("idBtndel").disabled = this.Files.length <= 0; } }); $("idBtnupload").onclick = function(){ //显示文件列表 var arrRows = []; Each(fu.Files, function(o){ arrRows.push([o.value, "&nbsp;"]); }); AddList(arrRows); fu.Folder.style.display = "none"; $("idProcess").style.display = ""; $("idMsg").innerHTML = "正在添加文件到您的网盘中,请稍候……<br />有可能因为网络问题,出现程序长时间无响应,请点击“<a href='?'><font color='red'>取消</font></a>”重新上传文件"; doUpload(); $("idProcess").style.display = "none"; //fu.Form.submit(); } //用来添加文件列表的函数 function AddList(rows){ //根据数组来添加列表 var FileList = $("idFileList"), oFragment = document.createDocumentFragment(); //用文档碎片保存列表 Each(rows, function(cells){ var row = document.createElement("tr"); Each(cells, function(o){ var cell = document.createElement("td"); if(typeof o == "string"){ cell.innerHTML = o; }else{ cell.appendChild(o); } row.appendChild(cell); }); oFragment.appendChild(row); }) //ie的table不支持innerHTML所以这样清空table while(FileList.hasChildNodes()){ FileList.removeChild(FileList.firstChild); } FileList.appendChild(oFragment); } $("idLimit").innerHTML = fu.Limit; $("idExt").innerHTML = fu.ExtIn.join(","); $("idBtndel").onclick = function(){ fu.Clear(); } //在后台通过window.parent来访问主页面的函数 //function Finish(msg){ alert(msg); location.href = location.href; } <SCRIPT> [/code] struts配置文件(用的插件自动生成json): [code="java"] <action name="*File" method="{1}" class="com.web.action.UploadFile"> <result type="json" name="success"> <param name="includeProperties">msg</param> <param name="excludeNullProperties">true</param> </result> <result type="json" name="error"> <param name="includeProperties">msg</param> <param name="excludeNullProperties">true</param> </result> </action> [/code] 后台UploadFile.java的代码 [code="java"] package com.web.action; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.apache.struts2.ServletActionContext; import com.common.pojo.AppUser; import com.opensymphony.xwork2.ActionContext; /** * 负责文件的上传 */ public class UploadFile { private File[] files; private String[] filesFileName; private Map<String, String> filesPath;// 文件名及其上传后路径 private String msg; public String upload() { /* * Map session=ActionContext.getContext().getSession(); AppUser * user=(AppUser) session.get("user"); if(user==null){ return "error"; } */ msg="上传成功!"; for (int i = 0; i < files.length; i++) { fileCopy(files[i], filesFileName[i]); } return "success"; } private void fileCopy(File file, String fileName) { BufferedInputStream bis = null; BufferedOutputStream bos = null; String realPath = ServletActionContext. getServletContext().getRealPath("/upload/" + fileName); System.out.println(realPath); try { bis = new BufferedInputStream(new FileInputStream(file)); bos = new BufferedOutputStream(new FileOutputStream(new File( realPath))); byte[] buffer = new byte[1024 * 8]; int i = -1; while ((i = bis.read(buffer)) != -1) { bos.write(buffer,0,i); } bos.flush(); } catch (Exception e) { System.out.println("上传异常!"); msg="上传出错!"; e.printStackTrace(); }finally{ try { if (bis != null) bis.close(); if (bos != null) bos.close(); } catch (IOException e1) { System.out.println("上传结束异常!"); e1.printStackTrace(); } } } public File[] getFiles() { return files; } public void setFiles(File[] files) { this.files = files; } public String[] getFilesFileName() { return filesFileName; } public void setFilesFileName(String[] filesFileName) { this.filesFileName = filesFileName; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } } [/code]

通过HttpWebRequest向服务器Post数据的问题

工作上需要通过http协议往服务器post一条json字符串,服务器会返回成功或者故障信息,网络上找了些HttpWebRequest例子,都遇到同一种现象,相同的代码,如果我电脑打开Fiddler 4软件,执行结果能够成功,但我关闭Fiddler 4情况下,返回提示信息是“发送数据不能为空”。 不知道问题的原因,请求帮助,谢谢 贴一段代码,c# public static string HttpPost(string url, string param) { byte[] byteArray = Encoding.UTF8.GetBytes(param); HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url); webRequest.Method = "POST"; webRequest.ContentType = "text/xml;charset=UTF-8"; webRequest.ContentLength = byteArray.Length; Stream newStream = webRequest.GetRequestStream(); newStream.Write(byteArray, 0, byteArray.Length); newStream.Close(); HttpWebResponse response = (HttpWebResponse)webRequest.GetResponse(); StreamReader php = new StreamReader(response.GetResponseStream(), Encoding.UTF8); string phpend = php.ReadToEnd(); return phpend; }

c#bootstrap上传文件服务器打不开报错,读取二进制流的问题待解决

## html ``` <!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>Krajee JQuery Plugins - &copy; Kartik</title> <link href="bootstrap.min.css" rel="stylesheet" /> <link href="fileinput.css" media="all" rel="stylesheet" type="text/css" /> <script src="Jquery.min.js"></script> <script src="fileinput.js" type="text/javascript"></script> <script src="bootstrap.min.js" type="text/javascript"></script> <script src="zh.js"></script> </head> <body> <form> <div> <div class="modal-header"> <h4 class="modal-title" id="modalShow">[请选择xml/docx]文件</h4> </div> <div class="modal-body"> <input type="file" name="model_file" id="model_file" multiple class="file-loading" /> </div> </div> </form> <script type="text/javascript"> $(function () { var control = $("#model_file"); var uploadrul = "/bootstrap-fileinput-master/examples/UploadFile.ashx"; var upObj = { language: 'zh', //设置语言 uploadUrl: uploadrul, //上传的地址 uploadExtraData: { "savepath": "/bootstrap-fileinput-master/examples/" },//上传至服务器的参数,非常重要 allowedFileExtensions: ['xml', 'docx', 'jpg', 'png', 'gif', 'rar', 'doc', 'txt'],//接收的文件后缀 showUpload: true, //显示批量上传按钮 showCaption: false,//是否显示标题 browseClass: "btn btn-primary", //按钮样式 dropZoneEnabled: true,//是否显示拖拽区域 maxFileSize: 4096,//单位为kb,如果为0表示不限制文件大小 minFileCount: 0, maxFileCount: 10, msgSizeTooLarge: " \"{name}\" 大小为({size} KB) 最大文件大小为 {maxSize} KB.请重新上传!",//文件的实际大小有些许偏差 enctype: 'multipart/form-data', validateInitialCount: true, previewFileIcon: "<i class='glyphicon glyphicon-king'></i>", msgFilesTooMany: "选择上传的文件数量({n}) 超过允许的最大数值{m}!", allowedPreviewTypes: ['image']//能够预览的文件类型,如果不限制。文件预览时可能很慢 }; $('#modalShow').html("[请选择"+upObj.allowedFileExtensions+"]文件"); control.fileinput(upObj); //导入文件上传成功之后的事件 $("#model_file").on("fileuploaded", function (event, data, previewId, index) { }); //导入文件上传失败之后的事件 $('#model_file').on('fileuploaderror', function (event, data, msg) { var msg= data.response; }); }); </script> </body> </html> ``` ## ashx ``` using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.IO; using System.Text; namespace WebApplication1.bootstrap_fileinput_master.examples { /// <summary> /// UploadFile 的摘要说明 /// </summary> public class UploadFile : IHttpHandler { public void ProcessRequest(HttpContext context) { string json = "{\"msg\":\"上传成功!\"}"; try { //读取二进制流为什么 有问题 context.Response.ContentType = "text/plain"; Stream sr = context.Request.InputStream; byte[] bt = new byte[sr.Length]; HttpPostedFile file = context.Request.Files["model_file"]; string savepath = context.Request["savepath"];//获取文件保存的路径 string fileName = file.FileName; sr.Read(bt, 0, bt.Length); savepath = context.Server.MapPath(savepath) + "\\" + fileName; FileStream fs = new FileStream(savepath, FileMode.Create); fs.Write(bt, 0, bt.Length); fs.Close(); sr.Close(); } catch (Exception ex) { //失败时返回的参数必须加 error键 json = "{\"error\":\""+ex.Message+"\"}"; } context.Response.Write(json); context.Response.End(); } public bool IsReusable { get { return false; } } } } ``` ## 读取数据流的时候有问题,读取到上传文件的属性数据了,见下图2 ![读取数据流的时候用问题](https://img-ask.csdn.net/upload/201710/10/1507618593_496298.png) ##上传文件源数据 ![上传文件源数据](https://img-ask.csdn.net/upload/201710/10/1507618626_265907.png) ## 服务器上文件的内容 ![服务器上文件的内容](https://img-ask.csdn.net/upload/201710/10/1507618659_951615.png) **上传图片、word、excel文件后,打开失败。** ## 附件:[上传文件测试工程demo上传文件测试工程demo](https://pan.baidu.com/s/1kVsZXTt "上传文件测试工程demo")

用HttpURLConnection 传图片总是返回400 求大神指教是哪里有问题

代码如下 import java.io.BufferedReader; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; public class FileUpload { /** * fileName 文件名(不带后缀) * filePath 文件的本地路径 (xxx / xx / test.jpg) */ public static void executeMultipartPost(String fileName, String filePath, String RequestURL) { HttpURLConnection conn = null; /// boundary就是request头和上传文件内容的分隔符(可自定义任意一组字符串) String BOUNDARY = "******"; // 用来标识payLoad+文件流的起始位置和终止位置(相当于一个协议,告诉你从哪开始,从哪结束) String preFix = ("\r\n--" + BOUNDARY + "--\r\n"); try { // (HttpConst.uploadImage 上传到服务器的地址 URL url = new URL(RequestURL); conn = (HttpURLConnection) url.openConnection(); conn.setConnectTimeout(5000); conn.setReadTimeout(30000); conn.setDoOutput(true); conn.setDoInput(true); conn.setUseCaches(false); // 设置请求方法 conn.setRequestMethod("POST"); // 设置header conn.setRequestProperty("Accept","*/*"); conn.setRequestProperty("Connection", "keep-alive"); conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY); // 获取写输入流 OutputStream out = new DataOutputStream(conn.getOutputStream()); // 获取上传文件 File file = new File(filePath); // 要上传的数据 StringBuffer strBuf = new StringBuffer(); // 标识payLoad + 文件流的起始位置 strBuf.append(preFix); // 下面这三行代码,用来标识服务器表单接收文件的name和filename的格式 // 在这里,我们是file和filename.后缀[后缀是必须的]。 // 这里的fileName必须加个.jpg,因为后台会判断这个东西。 // 这里的Content-Type的类型,必须与fileName的后缀一致。 // 如果不太明白,可以问一下后台同事,反正这里的name和fileName得与后台协定! // 这里只要把.jpg改成.txt,把Content-Type改成上传文本的类型,就能上传txt文件了。 strBuf.append("Content-Disposition: form-data; name=\"file\"; filename=\"" + fileName+".jpg" + "\"\r\n"); strBuf.append("Content-Type: image/jpeg" + "\r\n\r\n"); out.write(strBuf.toString().getBytes()); // 获取文件流 FileInputStream fileInputStream = new FileInputStream(file); DataInputStream inputStream = new DataInputStream(fileInputStream); // 每次上传文件的大小(文件会被拆成几份上传) int bytes = 0; // 计算上传进度 float count = 0; // 获取文件总大小 int fileSize = fileInputStream.available(); // 每次上传的大小 byte[] bufferOut = new byte[1024]; // 上传文件 while ((bytes = inputStream.read(bufferOut)) != -1) { // 上传文件(一份) out.write(bufferOut, 0, bytes); // 计算当前已上传的大小 count += bytes; // 打印上传文件进度(已上传除以总大*100就是进度) System.out.println("progress:" +(count / fileSize * 100) +"%"); } // 关闭文件流 inputStream.close(); // 标识payLoad + 文件流的结尾位置 out.write(preFix.getBytes()); // 至此上传代码完毕 // 总结上传数据的流程:preFix + payLoad(标识服务器表单接收文件的格式) + 文件(以流的形式) + preFix // 文本与图片的不同,仅仅只在payLoad那一处的后缀的不同而已。 // 输出所有数据到服务器 out.flush(); // 关闭网络输出流 out.close(); // 重新构造一个StringBuffer,用来存放从服务器获取到的数据 strBuf = new StringBuffer(); // 打开输入流 , 读取服务器返回的数据 BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); String line; // 一行一行的读取服务器返回的数据 while ((line = reader.readLine()) != null) { strBuf.append(line).append("\n"); System.out.println(line+"\n"); } // 关闭输入流 reader.close(); // 打印服务器返回的数据 System.out.println("上传成功:"+strBuf.toString()); } catch (Exception e) { System.out.println("上传图片出错:"+e.toString()); } finally { if (conn != null) { conn.disconnect(); } } } public static void main(String arg[]){ String url = "http://192.168.0.200:8080/FileUploaderRESTService-1/rest/upload"; File file = new File("C:/Users/ANXIN/Desktop/logo.png"); executeMultipartPost("logo","C:/Users/ANXIN/Desktop/logo.jpg","http://192.168.0.200:8080/FileUploaderRESTService-1/rest/upload"); } }

c# 用winform程序实现HTTP中post请求

现在在做一个需求,要求用HTTP post方式调用接口实现数据上传,需求内容如下:协议:http方式:POST POST字符串参数为code={0}&keys={1}&writedoc={2} {0},{1},{2}分别对应参数code,keys,writedoc的值。 代码如下: string PostData = string.Format("code={0}&keys={1}&writedoc={2}", "10001", "d587fc05fe8c47b7", xmldoc); Uri url = new Uri(surl); WebRequest myHttpWebRequest = WebRequest.Create(url); myHttpWebRequest.Method = "POST"; myHttpWebRequest.Timeout = 3000; UTF8Encoding encoding = new UTF8Encoding(); byte[] byte1 = encoding.GetBytes(PostData); //myHttpWebRequest.ContentType = "application/x-www-form-urlencoded"; myHttpWebRequest.ContentLength = byte1.Length; //发送成功后接收返回的XML信息 using (Stream newStream = myHttpWebRequest.GetRequestStream()) { newStream.Write(byte1, 0, byte1.Length); HttpWebResponse response = (HttpWebResponse)myHttpWebRequest.GetResponse(); string lcHtml = string.Empty; Encoding enc = Encoding.GetEncoding("UTF-8"); using(Stream stream = response.GetResponseStream()) { StreamReader streamReader = new StreamReader(stream, enc); lcHtml = streamReader.ReadToEnd(); return lcHtml; } } 可是在响应完成之后,服务器那边接收不到我窜过去的参数,各位大神看看我哪里写的不对

微信上传图片,非公众号

package com.httpclient.cn; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.net.HttpURLConnection; import java.net.URL; import java.security.cert.CertificateException; import java.security.cert.X509Certificate; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLSocketFactory; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; public class SendImg { public static String requestUrl = "https://file2.wx.qq.com/cgi-bin/mmwebwx-bin/webwxuploadmedia?f=json"; public static void main(String[] args) { sendImg(requestUrl,null); } public static String sendImg(String requestUrl,String cookie){ System.setProperty ("jsse.enableSNIExtension", "false"); try { File file = new File("C:/Users/JimmyHen/Desktop/20150926101632.jpg"); String clientMediaId = Long.toString(System.currentTimeMillis()); URL url = new URL(requestUrl); String boundary = "-----------------------------140683023824016"; String newLine = "\r\n"; HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setDoOutput(true); connection.setDoInput(true); connection.setConnectTimeout(5000); connection.setUseCaches(false); connection.setRequestMethod("POST"); //设置请求头信息 connection.setRequestProperty("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 "); connection.setRequestProperty("Accept-Encoding","gzip, deflate"); connection.setRequestProperty("Accept-Language","zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3"); connection.setRequestProperty("Cache-Control","no-cache"); connection.setRequestProperty("Connection","keep-alive"); connection.setRequestProperty("Content-Length",Long.toString(file.length())); connection.setRequestProperty("Content-Type", "multipart/form-data; boundary="+boundary); connection.setRequestProperty("host","file2.wx.qq.com"); connection.setRequestProperty("Origin","https://wx2.qq.com"); connection.setRequestProperty("Referer","https://wx2.qq.com/?&lang=zh_CN"); connection.setRequestProperty("User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64; rv:41.0) Gecko/20100101 Firefox/41.0"); OutputStream outputStream = new DataOutputStream(connection.getOutputStream()); // utf-8编码 //构建请求正文 StringBuffer sb = new StringBuffer(); sb.append(boundary).append(newLine); sb.append("Content-Disposition: form-data; name=\"id\""); sb.append(newLine).append(newLine); sb.append("WU_FILE_4").append(newLine); sb.append(boundary).append(newLine); sb.append("Content-Disposition: form-data; name=\"name\""); sb.append(newLine).append(newLine); sb.append(file.getName()).append(newLine); sb.append(boundary).append(newLine); sb.append("Content-Disposition: form-data; name=\"type\""); sb.append(newLine).append(newLine); sb.append("image/jpeg").append(newLine); sb.append(boundary).append(newLine); sb.append("Content-Disposition: form-data; name=\"lastModifiedDate\""); sb.append(newLine).append(newLine); sb.append("Sat Sep 26 2015 10:16:39 GMT+0800").append(newLine); sb.append(boundary).append(newLine); sb.append("Content-Disposition: form-data; name=\"mediatype\""); sb.append(newLine).append(newLine); sb.append("pic").append(newLine); sb.append(boundary).append(newLine); sb.append("Content-Disposition: form-data; name=\"uploadmediarequest\""); sb.append(newLine).append(newLine); sb.append("{\"BaseRequest\":{\"Uin\":699244040,\"Sid\":\"/p3w2f48GTHbJCFn\",\"Skey\":\"@crypt_c799f4fc_ebd218359c19edb6aabd6890e529fb66\""); sb.append(",\"DeviceID\":\"e206799846381690\"},\"ClientMediaId\":\""+clientMediaId+"\",\"TotalLen\":\""+file.length()+"\",\"StartPos\":0,\"DataLen\""); sb.append(":\""+file.length()+"\",\"MediaType\":4}\")").append(newLine); sb.append(boundary).append(newLine); sb.append("Content-Disposition: form-data; name=\"webwx_data_ticket\""); sb.append(newLine).append(newLine); sb.append("AQa9tWY2oKP6S6XO7XaP0JZz").append(newLine); sb.append(boundary).append(newLine); sb.append("Content-Disposition: form-data; name=\"pass_ticket\""); sb.append(newLine).append(newLine); sb.append("HzNuoS4USp/BzlmUCemcNN+8bu65jR1gKlf/JZR/PUt3xbyyzV4iWRaH1G+Sdznb").append(newLine); sb.append("Content-Disposition: form-data; name=\"filename\"; filename=\"20150926101632.jpg\"").append(newLine); sb.append("Content-Type: image/jpeg"); sb.append(newLine).append(newLine); outputStream.write(sb.toString().getBytes());//写入Post参数信息 DataInputStream dis = new DataInputStream(new FileInputStream(file)); int bytes = 0; byte[] byteOut = new byte[1024]; while((bytes = dis.read(byteOut))!= -1){ outputStream.write(byteOut);//写照片 } outputStream.write(newLine.getBytes()); dis.close(); byte[] endFile = (newLine + boundary+"--"+newLine).getBytes(); outputStream.write(endFile); outputStream.flush(); outputStream.close(); InputStream inputStream = connection.getInputStream(); StringBuffer result = new StringBuffer(); byte[] tmp = new byte[1024]; int l; while((l = inputStream.read(tmp)) != -1){ result.append(new String(tmp,0,l)); } System.out.println(result); } catch (Exception e) { e.printStackTrace(); }finally { } String result = null; return result; } } class JEEWeiXinX509TrustManager implements X509TrustManager { public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { } public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { } public X509Certificate[] getAcceptedIssuers() { return null; } } 返回的状态是失败,大哥们帮忙看下,感激不尽

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

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

程序员请照顾好自己,周末病魔差点一套带走我。

程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。

和黑客斗争的 6 天!

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

点沙成金:英特尔芯片制造全过程揭密

“亚马逊丛林里的蝴蝶扇动几下翅膀就可能引起两周后美国德州的一次飓风……” 这句人人皆知的话最初用来描述非线性系统中微小参数的变化所引起的系统极大变化。 而在更长的时间尺度内,我们所生活的这个世界就是这样一个异常复杂的非线性系统…… 水泥、穹顶、透视——关于时间与技艺的蝴蝶效应 公元前3000年,古埃及人将尼罗河中挖出的泥浆与纳特龙盐湖中的矿物盐混合,再掺入煅烧石灰石制成的石灰,由此得来了人...

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

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

女程序员,为什么比男程序员少???

昨天看到一档综艺节目,讨论了两个话题:(1)中国学生的数学成绩,平均下来看,会比国外好?为什么?(2)男生的数学成绩,平均下来看,会比女生好?为什么?同时,我又联想到了一个技术圈经常讨...

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

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

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

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

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

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

外包程序员的幸福生活

今天给你们讲述一个外包程序员的幸福生活。男主是Z哥,不是在外包公司上班的那种,是一名自由职业者,接外包项目自己干。接下来讲的都是真人真事。 先给大家介绍一下男主,Z哥,老程序员,是我十多年前的老同事,技术大牛,当过CTO,也创过业。因为我俩都爱好喝酒、踢球,再加上住的距离不算远,所以一直也断断续续的联系着,我对Z哥的状况也有大概了解。 Z哥几年前创业失败,后来他开始干起了外包,利用自己的技术能...

C++11:一些微小的变化(新的数据类型、template表达式内的空格、nullptr、std::nullptr_t)

本文介绍一些C++的两个新特性,它们虽然微小,但对你的编程十分重要 一、Template表达式内的空格 C++11标准之前建议在“在两个template表达式的闭符之间放一个空格”的要求已经过时了 例如: vector&lt;list&lt;int&gt; &gt;; //C++11之前 vector&lt;list&lt;int&gt;&gt;; //C++11 二、nullptr ...

优雅的替换if-else语句

场景 日常开发,if-else语句写的不少吧??当逻辑分支非常多的时候,if-else套了一层又一层,虽然业务功能倒是实现了,但是看起来是真的很不优雅,尤其是对于我这种有强迫症的程序"猿",看到这么多if-else,脑袋瓜子就嗡嗡的,总想着解锁新姿势:干掉过多的if-else!!!本文将介绍三板斧手段: 优先判断条件,条件不满足的,逻辑及时中断返回; 采用策略模式+工厂模式; 结合注解,锦...

深入剖析Springboot启动原理的底层源码,再也不怕面试官问了!

大家现在应该都对Springboot很熟悉,但是你对他的启动原理了解吗?

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

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

为什么你不想学习?只想玩?人是如何一步一步废掉的

不知道是不是只有我这样子,还是你们也有过类似的经历。 上学的时候总有很多光辉历史,学年名列前茅,或者单科目大佬,但是虽然慢慢地长大了,你开始懈怠了,开始废掉了。。。 什么?你说不知道具体的情况是怎么样的? 我来告诉你: 你常常潜意识里或者心理觉得,自己真正的生活或者奋斗还没有开始。总是幻想着自己还拥有大把时间,还有无限的可能,自己还能逆风翻盘,只不是自己还没开始罢了,自己以后肯定会变得特别厉害...

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

二哥,有个事想询问下您的意见,您觉得应届生值得去外包吗?公司虽然挺大的,中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多个条件是什么逻辑关系?条件判断在什么时候执...

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

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

【阿里P6面经】二本,curd两年,疯狂复习,拿下阿里offer

二本的读者,在老东家不断学习,最后逆袭

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

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

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

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

《经典算法案例》01-08:如何使用质数设计扫雷(Minesweeper)游戏

我们都玩过Windows操作系统中的经典游戏扫雷(Minesweeper),如果把质数当作一颗雷,那么,表格中红色的数字哪些是雷(质数)?您能找出多少个呢?文中用列表的方式罗列了10000以内的自然数、质数(素数),6的倍数等,方便大家观察质数的分布规律及特性,以便对算法求解有指导意义。另外,判断质数是初学算法,理解算法重要性的一个非常好的案例。

《Oracle Java SE编程自学与面试指南》最佳学习路线图(2020最新版)

正确选择比瞎努力更重要!

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

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

微软为一人收购一公司?破解索尼程序、写黑客小说,看他彪悍的程序人生!...

作者 | 伍杏玲出品 | CSDN(ID:CSDNnews)格子衬衫、常掉发、双肩包、修电脑、加班多……这些似乎成了大众给程序员的固定标签。近几年流行的“跨界风”开始刷新人们对程序员的...

终于,月薪过5万了!

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

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

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

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

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

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

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

2020春招面试了10多家大厂,我把问烂了的数据库事务知识点总结了一下

2020年截止目前,我面试了阿里巴巴、腾讯、美团、拼多多、京东、快手等互联网大厂。我发现数据库事务在面试中出现的次数非常多。

程序员如何与产品经理优雅的干架

早前,平安产险科技一名外包程序员和一名外包产品经理干架的视频几乎在互联网圈都传遍了,因为产品提了一个需求:要求用户App的主题颜色能根据手机壳自动调整。 首先说这个需求对于应用开发工程师来说,确实是有点奇葩,当然并非不能实现。这块涉及图形图像处理,用机器学习和人工智能来提取图像颜色,这是基本图像识别过程,对于采集图像,可以提示对着镜子自拍一张,上传图片,通过大量的训练数据,来识别手机体颜色。当然并...

爬虫(101)爬点重口味的

小弟最近在学校无聊的很哪,浏览网页突然看到一张图片,都快流鼻血。。。然后小弟冥思苦想,得干一点有趣的事情python 爬虫库安装https://s.taobao.com/api?_ks...

在拼多多上班,是一种什么样的体验?我心态崩了呀!

之前有很多读者咨询我:武哥,在拼多多上班是一种什么样的体验?由于一直很忙,没抽出时间来和大家分享。上周末特地花点时间来写了一篇文章,跟大家分享一下拼多多的日常。 1. 倒时差的作息 可能很多小伙伴都听说了,拼多多加班很严重。这怎么说呢?作息上确实和其他公司有点区别,大家知道 996,那么自然也就能理解拼多多的“11 11 6”了。 所以当很多小伙伴早上出门时,他们是这样的: 我们是这样的: 当...

应聘3万的职位,有必要这么刁难我么。。。沙雕。。。

又一次被面试官带到坑里面了。面试官:springmvc用过么?我:用过啊,经常用呢面试官:springmvc中为什么需要用父子容器?我:嗯。。。没听明白你说的什么。面试官:就是contr...

太狠了,疫情期间面试,一个问题砍了我5000!

疫情期间找工作确实有点难度,想拿到满意的薪资,确实要点实力啊!面试官:Spring中的@Value用过么,介绍一下我:@Value可以标注在字段上面,可以将外部配置文件中的数据,比如可以...

立即提问