httpClient通过Post上传文件代码示例

客户端代码:

/**
  * post向服务器上传文件的方法
  * @param url                服务器端接收文件地址
  * @param sourceFilePath     源文件的绝对路径
  * @param targetRelativePath 目标文件的相对路径
  * @return
  */
 public static boolean postImageMethod(String url,String sourceFilePath,String targetRelativePath)
 {
  // 创建默认的httpClient实例    
        CloseableHttpClient httpclient = HttpClients.createDefault();  
        // 创建httppost    
        HttpPost httppost = new HttpPost(url); 
        try {
         FileBody file = new FileBody(new File(sourceFilePath));
            StringBody filePath = new StringBody(targetRelativePath);  
            
            MultipartEntity reqEntity = new MultipartEntity();
            reqEntity.addPart("file",file);
            reqEntity.addPart("relativePath",filePath);
          
            httppost.setEntity(reqEntity); 
            CloseableHttpResponse response = httpclient.execute(httppost);
            try { 
       HttpEntity entity = response.getEntity();
       if (entity != null) {  
           if(EntityUtils.toString(entity, "UTF-8").equals("{\"returnCode\":0,\"returnMsg\":\"success\",\"sendResult\":1}")){
            return true;
           }
             }
       EntityUtils.consume(entity);  
      }finally{
           response.close();  
         }
  }catch(Exception e){
   e.printStackTrace();
  } finally{
    // 关闭连接,释放资源    
   try {
    httpclient.close();
   } catch (IOException e) {
    e.printStackTrace();
   }  
  }
        
        return false;
 }

服务器端代码:

/**
  * 接受服务产品图像文件
  * @param response
  * @param getResultSet
  */
 @RequestMapping(value = "acceptVisFile")
 public void syncVisDataFile(HttpServletResponse response,HttpServletRequest request) throws IOException {
       
  System.out.println("+++++++++接受服务产品图像的接口被调用!!!");
  request.setCharacterEncoding("UTF-8");  
  boolean isMultipart = ServletFileUpload.isMultipartContent(request); 
  System.out.println("isMultipart:"+isMultipart);
  
  DiskFileItemFactory factory = new DiskFileItemFactory();   
  ServletFileUpload upload = new ServletFileUpload(factory);    
        try {    
         //得到所有的文件
            List<FileItem> items = upload.parseRequest(request);   
            Iterator<FileItem> iter = items.iterator(); 
            FileItem item = null;
            String paramName = null;
            String paramValue = null;
            String fieldName = null;
            String fileName = null;
            InputStream in = null;
            while (iter.hasNext()) {    
                item = (FileItem) iter.next();   
             System.out.println("item:"+item);
                if (item.isFormField()) {    
                    //普通文本信息处理    
                    paramName  = item.getFieldName();    
                    paramValue = item.getString("UTF-8");    
                    System.out.println("普通文本处理信息:"+"paramName: "+ paramName);
                    System.out.println("普通文本处理信息:"+"paramValue:"+ paramValue);
                } else {    
                    //上传文件信息处理    
                 fieldName = item.getFieldName();
                    fileName = item.getName();
                    System.out.println("上传文件信息处理:"+"fieldName:"+fieldName);  
                    System.out.println("上传文件信息处理:"+"fileName:"+fileName);
                    in = item.getInputStream();  
               }    
            }  
            //服务产品文件存储的相对路径(需要在数据库配置?)
            String realativePath = "/space/visCloud/"+paramValue;
            //服务产品文件的存储路径
            File storageDir = new File(realativePath);
            if(!storageDir.exists()){ //如果路径不存在,则创建目录
             storageDir.mkdirs();
            }
            String filePath = realativePath+"/"+ fileName;  
            System.out.println("服务产品文件存储的最终路径为:"+filePath);
            FileOutputStream fos = new FileOutputStream(filePath); 
            
            byte[] buffer = new byte[1024];  
            while (in.read(buffer) > 0) {  
                fos.write(buffer, 0, buffer.length);  
            }  
            fos.flush();
            fos.close();  
        } catch (FileUploadException e) {    
            e.printStackTrace();    
        }    
     StringBuffer str = new StringBuffer("{\"returnCode\":0,\"returnMsg\":\"success\",\"sendResult\":1}");
  renderText(str.toString(), response);
 }

转载于:https://my.oschina.net/bigdataer/blog/424729

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个使用 .NET HttpClient上传文件示例代码: ```csharp using System; using System.IO; using System.Net.Http; using System.Threading.Tasks; public static async Task UploadFile(string filePath, string uploadUrl) { using (var client = new HttpClient()) using (var formData = new MultipartFormDataContent()) { var fileContent = new StreamContent(File.OpenRead(filePath)); formData.Add(fileContent, "file", Path.GetFileName(filePath)); var response = await client.PostAsync(uploadUrl, formData); if (!response.IsSuccessStatusCode) { throw new Exception($"Upload failed. Status code: {response.StatusCode}"); } } } ``` 在上面的代码中,我们使用 HttpClient 类来创建一个 HTTP 客户端实例,并使用 MultipartFormDataContent 类来创建一个表单数据对象。然后,我们使用 StreamContent 类来创建一个文件内容对象,并将其添加到表单数据对象中。最后,我们使用 PostAsync 方法来将表单数据发送到服务器。 以下是一个使用 ASP.NET Web API 接收上传文件示例代码: ```csharp [HttpPost] public async Task<HttpResponseMessage> UploadFile() { try { var provider = new MultipartMemoryStreamProvider(); await Request.Content.ReadAsMultipartAsync(provider); foreach (var file in provider.Contents) { var fileName = file.Headers.ContentDisposition.FileName.Trim('\"'); var buffer = await file.ReadAsByteArrayAsync(); // Save the file to disk or do other processing // ... } return Request.CreateResponse(HttpStatusCode.OK); } catch (Exception ex) { return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, ex); } } ``` 在上面的代码中,我们使用 MultipartMemoryStreamProvider 类来接收上传的文件数据。然后,我们遍历 provider.Contents 集合来处理每个文件。在这个例子中,我们只是将文件的字节数组读取到一个缓冲区中,但你可以根据需要将它们保存到磁盘上或者进行其他处理。最后,我们返回一个 HTTP 响应,通知客户端上传已经成功完成。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值