使用http请求发送文件,文件标题乱码(内容正确)

项目中的代码大致如下:

最终的结果是,文件上送成功,文件的内容正常,但是文件的标题乱码。

InputStream is = null;
DataOutputStream dos = null;// 读取文件标题
String fileName = "文件标题";
// (方式1)将字符串直接写入
dos.writeBytes(buildHttpRequest(fileName));// (方式2)将字符串以字节的形式写入
dos.write(buildHttpRequest(fileName).getBytes());dos.flush();// 读取文件内容
is = new FileInputStream("文件File对象");
byte[] buffer = new byte[1024];
int len = 0;
while ((len = is.read(buffer)) != -1){dos.write(buffer,0,len);
}
dos.writeBytes(LINE_END);// 构建对应的请求信息(不重要)
public String buildHttpRequest(String fileName){StringBuffer sb = new StringBuffer();sb.append(PREFIX).append(BOUNDARY).append(LINE_END).append("Content-Disposition: form-data; name=\"file\"; filename=\""+ fileName + "\"" + LINE_END)// 文件上送形式.append("Content-Type: application/octet-stream" + LINE_END)// 文件上送类型.append("Content-Transfer-Encoding: binary" + LINE_END).append(LINE_END);return sb.toString();
}

使用方式1导致出现标题乱码,需要修改为方式2

writeBytes将中文标题中的字符串强转为了byte字节,会丢失精度(char16位,byte8位)。正确处理方式应该是,将String字符串先转化成byte数组,然后使用write方法直接把byte数组进行写入,这样就不会丢失精度了。

writeBytes方法:

public final void writeBytes(String s) throws IOException {int len = s.length();for (int i = 0 ; i < len ; i++) {out.write((byte)s.charAt(i));}incCount(len);
}

write方法:

public void write(byte b[]) throws IOException {write(b, 0, b.length);
}

使用http请求发送文件,文件标题乱码相关推荐

  1. Java以post请求发送文件或json数据

    分别给出了post发送文件和json数据的函数,其中使用到了Jackson库来转化Json数据,使用log4j2来打印日记,可自行剔除. public class HttpUtils {static ...

  2. java 转发上传文件_Java 发送http请求上传文件功能实例

    废话不多说了,直接给大家贴代码了,具体代码如下所示: package wxapi.WxHelper; import java.io.BufferedReader; import java.io.Dat ...

  3. 服务器 不支持gbk,解决JS请求服务器gbk文件乱码的问题

    JS获取服务器编码格式为gb2312的文件时内容为乱码,ajax网络请求内部使用的是XMLHttpRequest,所以在请求之前需要设置一下编码格式,但是设置xhr.setRequestHeader( ...

  4. linux下打开js乱码gbk,解决JS请求服务器gbk文件乱码的问题

    JS获取服务器编码格式为gb2312的文件时内容为乱码,ajax网络请求内部使用的是XMLHttpRequest,所以在请求之前需要设置一下编码格式,但是设置xhr.setRequestHeader( ...

  5. 解决python发送multipart/form-data请求上传文件的问题

    解决python发送multipart/form-data请求上传文件的问题 参考文章: (1)解决python发送multipart/form-data请求上传文件的问题 (2)https://ww ...

  6. 发送临时文件被服务器拒绝,临时会话说服务器拒绝了您发送离线文件的请求 - 卡饭网...

    qq 服务器拒绝了您发送离线文件请求的解决方法 qq 服务器拒绝了您发送离线文件请求的解决方法 qq服务器拒绝了您发送离线文件的原因?在我们日常工作中,因工作需要会用上qq离线文件接收.发送.而前面小 ...

  7. php curl form-data,在php curl multipart / form-data请求中发送一个文件和json数据

    我正在尝试在PHP的curl请求中上传文件和json数据 . 请求在命令行中使用curl正常工作 . 这是命令行中的curl请求: curl -v --basic -u'username' -F fi ...

  8. qt5中服务器文件传输,POST在Qt5中发送JSON文件的请求

    在Qt5的帮助下,通过POST请求将JSON文件发送到服务器时有点问题.我给你一张我的程序:POST在Qt5中发送JSON文件的请求 #include #include #include #inclu ...

  9. 如何使用apiPOST进行模拟发送get、post、delete、put请求(支持文件上传)

    现在的模拟发送请求插件很多,但亲测apiPOST更好用一些,因为它不仅可以模拟发送get.post.delete.put请求,还可以导出文档,中文界面更适合国内的程序员. 今天来分享如何使用apiPO ...

  10. java发送post请求上传文件和json数据

    java发送post请求上传文件和json数据 因为第三方的上传服务post参数使用了两个@requestpart参数. 但是feign不可以使用两个@requestpart参数.会报错:java.l ...

最新文章

  1. php 修改数据库表的字段的值
  2. 头发为什么会从中间断掉_谈谈保养头发的方法,教你如何让它变得更加健康
  3. usaco2013 mar【懒惰的奶牛】
  4. SSH连接服务器报错(WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED)的解决方案
  5. jacoco 源码分析 class字节码植入的冲突问题
  6. 端口如何支持非localhost访问_新特性解读 | MySQL 8.0.19 支持 DNS SRV
  7. AVB Digest转换成ASCII码
  8. 100款违法违规APP下架整改:微店、更美等在列
  9. Java使用正则表达式抓取日期和访问量
  10. linux系统各种日志存储路径和详细介绍
  11. JAVA经典算法40例
  12. 成为一个好的PHP工程师需要掌握什么技能
  13. 互联网电影上线,手机电影院移动端就可以看电影
  14. springboot启动 lombok 找不到符号
  15. 云米与友阿股份达成战略合作,家庭物联网落地湖南
  16. selenium三种方法isEnable()、isDisplayed()和isSelected()的区别
  17. Vim实用技巧高清完整版PDF中文
  18. 再见了,Python!2021 Excel 数据可视化已成气候!
  19. 碳基生命与硅基生命之间的一场思维碰撞
  20. 麒麟信安亮相2021核电数字化技术大会并发表主题演讲

热门文章

  1. [NOIp2017 TG Day2 T2] 宝藏
  2. python 消息队列 go_Python并发编程-RabbitMq消息队列
  3. redis list操作_PHP操作Redis相关函数
  4. Windows10使用命令行打开3389_如何在Windows 10上安装Python 3和设置本地编程环境
  5. win10显卡驱动怎么装_还在花钱装系统吗,3分钟教你怎么安装纯净版Win10
  6. c语言中有123f,C语言库函数(S类字母) - 3
  7. 数据库常用的事务隔离级别都有哪些?都是什么原理?
  8. 1.关于Python,你可能不知道的
  9. 保证服务4个9的可用性的核心思路
  10. 设计模式学习笔记(九:中介者模式)