Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.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 服务器上的上载映像已损坏_Java_Android_Image_Ftp - Fatal编程技术网

Java 服务器上的上载映像已损坏

Java 服务器上的上载映像已损坏,java,android,image,ftp,Java,Android,Image,Ftp,您好,我正在尝试使用ftp4j将图像上载到服务器。我的图像已上载到服务器上,但已损坏。我知道我的代码中缺少一些东西。我的代码是 private class UploadBackgroundTask extends AsyncTask<String, Void, String> { protected void onPreExecute() { dialog = new ProgressDialog(xxx.this); dialog.setM

您好,我正在尝试使用ftp4j将图像上载到服务器。我的图像已上载到服务器上,但已损坏。我知道我的代码中缺少一些东西。我的代码是

private class UploadBackgroundTask extends AsyncTask<String, Void, String> {

    protected void onPreExecute() {
        dialog = new ProgressDialog(xxx.this);
        dialog.setMessage("Loading");
        dialog.setCancelable(false);
        dialog.show();

    }

    protected String doInBackground(final String... args) {



        try{
            TrustManager[] trustManager = new TrustManager[] { new X509TrustManager() {
                public X509Certificate[] getAcceptedIssuers() {
                    return null;
                }
                public void checkClientTrusted(X509Certificate[] certs, String authType) {
                }
                public void checkServerTrusted(X509Certificate[] certs, String authType) {
                }
            } };

            SSLContext sslContext = null;
            try {
                sslContext = SSLContext.getInstance("TLS");
                sslContext.init(null, trustManager, new SecureRandom());
            } catch (Exception e) {
                e.printStackTrace();
            }
            SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
            FTPClient client = new FTPClient();

            client.setSSLSocketFactory(sslSocketFactory);
            client.setSecurity(FTPClient.SECURITY_FTPES);

            client.connect("xxx.xxx.com");
            client.login("xxx", "xxx");

            client.changeDirectory("product_images/import");
            client.setType(FTPClient.TYPE_BINARY);
            //@TODO read file from android system
            System.out.println("temPath -->"+picturepath);
            client.upload(new File(picturepath));


            FTPFile[] list = client.list();
            for(int i=0;i<list.length;i++){
                System.out.println("-->"+list[i]);
            }


            Log.v("SUCCESFULLY UPLOADED", "SUCCESFULLY UPLOADED");
            }catch(Exception ex){
                ex.printStackTrace();
            }


        return null;

    }

    protected void onPostExecute(String list) {
        dialog.dismiss();

    }
}
上传后,服务器上的文件大小始终为4KB。为什么

我搜索了很多,但没有得到答案。 请告诉我我的代码出了什么问题。
提前感谢。

尝试实现如下侦听器:

import it.sauronsoftware.ftp4j.FTPDataTransferListener;

public class MyTransferListener implements FTPDataTransferListener {

    public void started() {
        // Transfer started
    }

    public void transferred(int length) {
        // Yet other length bytes has been transferred since the last time this
        // method was called
    }

    public void completed() {
        // Transfer completed
    }

    public void aborted() {
        // Transfer aborted
    }

    public void failed() {
        // Transfer failed
    }

}
并使用
client.upload上传文件(新文件(picturepath),新MyTransferListener())
这样您就可以跟踪文件上传时发生的情况

编辑:

  • 检查方法
    transfer(int-length)
    is equals中上传的图像大小和参数。(如果图像小于64k)
  • 检查FTP服务器上收到的字节数是否相同(检查FTP服务器上的日志)
  • 如果上述条件之一不成立,则说明ftp4j存在问题;如果两者都成立,则说明FTP服务器存在问题
    你检查过文件大小了吗?这可能会给出一个提示。在移动设备上,图像大小是27 kb,但在服务器端,它只有4.0 kb。我的代码中缺少了一些东西。您的代码看起来不错,通常怀疑的是二进制/ascii转换,但您已经检查过了。结果文件有4k(4096字节),这是缓冲区或磁盘扇区的常用度量值,这一事实表明其他地方(ftp库?)出现了故障。日志(ftp服务器)是怎么说的?它只是开始,然后在Transfer中只显示很小的大小。在这之后,我得到了上述异常。那么我如何才能修复它呢?@Rash post full exception stacktrace。有很多地方可能发生FTPEException。另外,请检查您是否不恢复上载到服务器(如果您上载的文件具有相同的名称,则可能是这样)否我正在使用不同的名称进行保存。因为我已将时间戳附加到图像name@Rash您使用的是什么版本的ftp4j?
    import it.sauronsoftware.ftp4j.FTPDataTransferListener;
    
    public class MyTransferListener implements FTPDataTransferListener {
    
        public void started() {
            // Transfer started
        }
    
        public void transferred(int length) {
            // Yet other length bytes has been transferred since the last time this
            // method was called
        }
    
        public void completed() {
            // Transfer completed
        }
    
        public void aborted() {
            // Transfer aborted
        }
    
        public void failed() {
            // Transfer failed
        }
    
    }