当前位置: 首页 > 面试题库 >

如何使用URLConnection上传二进制文件

施兴言
2023-03-14
问题内容

为了将二进制文件上传到URL,建议使用本指南。但是,该文件不在目录中,而是存储在MySql
db的BLOB字段中。BLOB字段byte[]在JPA中映射为属性:

byte[] binaryFile;

我以这种方式稍微修改了指南中的代码:

HttpURLConnection connection = (HttpURLConnection ) new URL(url).openConnection();
// set some connection properties
OutputStream output = connection.getOutputStream();
PrintWriter writer = new PrintWriter(new OutputStreamWriter(output, CHARSET), true); 
// set some headers with writer
InputStream file = new ByteArrayInputStream(myEntity.getBinaryFile());
System.out.println("Size: " + file.available());
try {
    byte[] buffer = new byte[4096];
    int length;
    while ((length = file.read(buffer)) > 0) {
        output.write(buffer, 0, length);
    } 
    output.flush();
    writer.append(CRLF).flush();
    writer.append("--" + boundary + "--").append(CRLF).flush();
} 
// catch and close streams

我没有使用分块流。使用的标头是:

username and password
Content-Disposition: form-data; name=\"file\"; filename=\"myFileName\"\r\nContent-Type: application/octet-stream"
Content-Transfer-Encoding: binary

主机正确接收了所有标头。它还接收上载的文件,但不幸的是,它抱怨该文件不可读,并且断言所接收文件的大小比我的代码输出的大小大37个字节

我对流,连接和byte []的了解太有限,无法掌握解决问题的方法。任何提示表示赞赏。

编辑

正如评论者所建议的,我也尝试过直接编写byte [],而不使用ByteArrayInputStream:

output.write(myEntity.getBinaryFile());

不幸的是,主持人给出的答案与其他方式完全相同。


问题答案:

我的代码是正确的。

主机给出了一个错误,因为它不希望Content-Transfer-Encoding标题。删除后,一切正常。



 类似资料:
  • 下面是一个上传二进制文件的例子,WebService类的代码如下: package service; import java.io.InputStream; import java.io.OutputStream; import java.io.FileOutputStream; import javax.activation.DataHandler; public class 

  • 问题内容: 我正在尝试从URLConnection读取二进制文件。当我使用文本文件对其进行测试时,它似乎可以正常工作,但对于二进制文件则不能。发送文件时,我在服务器上使用以下mime类型: 但是到目前为止,似乎没有任何效果。这是我用来接收文件的代码: 问题答案: 我就是这样

  • 问题内容: 我正在使用Flash录制音频并将其上传到节点服务器。Flash客户端是jrecorder的变体。当用户完成录制后,将使用POST请求(而不是表单,因为Flash无法创建文件)来上传音频,并将音频ByteArray作为POST请求的数据(请参见此处的更多信息)。 我可以使用下面的代码在Node- land上正确接收文件,但是发出的音频被破坏了,您听不到任何声音。话虽如此,该文件的内容可以

  • 问题内容: 使用带有角的ResponseEntity下载任何文件不起作用 我需要在客户端使用angular下载文件,该文件可以具有pdf或excel或image或txt的任何格式…我的方法仅适用于txt文件,但给我excel和image的失败格式,对于pdf,它会给出一个空的pdf。 所以在我的控制器中,这里是调用service方法的函数: 而我的service.js具有: 我的服务方法是这样的:

  • 问题内容: 我正在使用FileReader.readAsBinaryString使用多部分/表单数据POST请求将文件上传到服务器。 文件被发送,服务器接收并保存文件。 当我尝试在服务器上打开文件时,收到消息称该文件已损坏(png图像),或者我看到一个空白文档(对于pdf)。显然出了点问题。 是否还需要对FileReader.onload处理程序中的event.target.result返回的数据

  • 更新:为了将来的参考,亚马逊现在已经更新了询问时的文档。根据@Loren Segal在下面的评论:- 我们已经更正了最新预览版中的文档,以正确记录此参数。很抱歉搞砸了! 有人能帮我使用上传二进制文件吗?