首页 > 其他分享 >使用http请求发送文件,文件标题乱码

使用http请求发送文件,文件标题乱码

时间:2023-01-18 22:31:50浏览次数:36  
标签:文件 http 乱码 write END byte LINE append


使用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,乱码,write,END,byte,LINE,append
From: https://blog.51cto.com/u_15942107/6019548

相关文章

  • python基础: 垃圾回收机制、字符编码、文件操作
    目录垃圾回收机制引用计数标记清除分代回收字符编码简介发展史字符编码的实操文件操作垃圾回收机制说明:我们在编写代码的时候涉及到存储空间的申请和存储空间的释放的操......
  • python基础: 文件操作
    目录文件操作简介文件操作:什么是文件:打开文件的俩种方式文件读写模式r-----只读模式(默认模式):w----只写模式:a----只追加模式:文件操作模式拷贝功能文件的诸多操作方法文件操......
  • 文件管理
    最好用的图片视频文件管理专家,保护您的隐私照片视频,支持rmvb、mp4、mkv等各种格式视频播放功能,批量管理照片和视频,简单实用的用户界面,是iPhone装机必备工具。主要功能:*在......
  • Linux环境下nginx给wordpress站点配置http更换成https访问
    一、nginx添加ssl模块首先确认下自己的nginx是否有ssl模块,如没有,需要补安全,可以参考这篇文章《Nginx安装SSL模块教程及注意事项》。二、nginx配置#这个server是为了ht......
  • Spring MVC文件上传示例
    SpringMVC提供了一种上传文件的简便方法,它可以是图像或其他文件。让我们看一个使用SpringMVC上传文件的简单示例。必需的Jar文件要运行此示例,您需要加载:SpringCore......
  • 【转】PageOffice实现文件在线安全预览——禁止编辑、下载、复制等
    实际应用中,很多时候不仅需要在线编辑文件,还需要在线安全预览文件,要求不能复制、下载、另存到本地等情况。pageoffice可以实现文件在线安全预览,禁止:编辑、复制、粘贴、右键......
  • 【转】pageoffice在线编辑word文件实现表格赋值
    Word中的table是要借助数据区域(DataRegion)实现的,要求数据区域完整的包含了整个Table的内容,这样才可以通过数据区域控制和操作table。因此,要想使用table,则必须在word文件中......
  • linux 基础(3)基本文件操作
    目录的基本操作在linux文件系统里,以斜杠/开头的路径是绝对路径,从根目录开始寻找;其他的路径则都是相对路径,从当前目录(workingdirectory)开始寻找。相对目录中常用的符......
  • 父子进程文件共享
    学习地址继承了标准输入、标准输出、标准错误;文件描述符表里面是指针,父子进程指向一致,故位置指针也一致;接续写文件,不是各自写各自的;......
  • # yyds干货盘点 # 使用Python批量实现某一Excel文件中每3行数据存一个Excel文件
    大家好,我是Python进阶者。一、前言前几天在帮助粉丝解决问题的时候,遇到一个简单的小需求,这里拿出来跟大家一起分享,后面再次遇到的时候,可以从这里得到灵感。二、需求澄清粉丝......