Java 使用http PUT上载的文件在服务器上的大小不准确
我正在尝试使用预先指定的URL将不同MIME类型的文件上载到AWS S3。我可以看到S3上的文档,但内容不合适。它要么是0字节,要么小于我正在尝试的每个文件的预期大小 这是代码,请告诉我缺少什么:Java 使用http PUT上载的文件在服务器上的大小不准确,java,http,file-upload,put,Java,Http,File Upload,Put,我正在尝试使用预先指定的URL将不同MIME类型的文件上载到AWS S3。我可以看到S3上的文档,但内容不合适。它要么是0字节,要么小于我正在尝试的每个文件的预期大小 这是代码,请告诉我缺少什么: public static void main(String[] args) { URLConnection urlconnection = null; try { File file = new File(File_Path); if (isEn
public static void main(String[] args) {
URLConnection urlconnection = null;
try {
File file = new File(File_Path);
if (isEncoded == "false") {
URL obj = new URL(Upload_Url);
urlconnection = obj.openConnection();
} else {
try {
URI uri = new URI(Upload_Url);
URL url = uri.toURL();
urlconnection = url.openConnection();
} catch (URISyntaxException e) {
e.printStackTrace();
}
}
urlconnection.setDoOutput(true);
urlconnection.setDoInput(true);
if (urlconnection instanceof HttpURLConnection) {
((HttpURLConnection) urlconnection).setRequestMethod("PUT");
((HttpURLConnection) urlconnection).setRequestProperty("Content-Type", Content_Type);
((HttpURLConnection) urlconnection).connect();
}
BufferedOutputStream bos = new BufferedOutputStream(urlconnection.getOutputStream());
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
int i;
// read byte by byte until end of stream
while ((i = bis.read()) > 0) {
bos.write(i);
}
bis.close();
bos.close();
} catch (Exception e) {
e.printStackTrace();
}
看起来您的流结束检测是错误的,因此当您看到空字节时,您正在截断。是内容还是大小?任何异常?返回了什么HTTP状态代码?文件大小不合适。因此,当我下载该文件时,它已损坏。上载成功,因此我收到了200。您如何知道该代码的HTTP状态代码是什么?从上载到服务器的文本文件中,我看到当内容遇到以下字符时,内容停止:ã™VJŒ/Õ+)™T≤R V“Q*.I,IU≤RrvT“QJŒ,I8˙”“+8˙ñ”“+”a Côk0如何确保在实际到达文件结尾时检测到流结尾?我尝试了:while((I=bis.read())!=-1){bos.write(I);}这解决了文本文件的问题,我可以看到上传到服务器的文件的完整内容。但是图像仍然是0字节。有帮助吗?@Jayashree我建议您重新测试。这个答案是正确的。是的,我也可以上传图像。我试图读取的基础图像有问题。谢谢您的回答!