Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用http PUT上载的文件在服务器上的大小不准确_Java_Http_File Upload_Put - Fatal编程技术网

Java 使用http PUT上载的文件在服务器上的大小不准确

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

我正在尝试使用预先指定的URL将不同MIME类型的文件上载到AWS S3。我可以看到S3上的文档,但内容不合适。它要么是0字节,要么小于我正在尝试的每个文件的预期大小

这是代码,请告诉我缺少什么:

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我建议您重新测试。这个答案是正确的。是的,我也可以上传图像。我试图读取的基础图像有问题。谢谢您的回答!