Java 服务器上的上载映像已损坏
您好,我正在尝试使用ftp4j将图像上载到服务器。我的图像已上载到服务器上,但已损坏。我知道我的代码中缺少一些东西。我的代码是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
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)你检查过文件大小了吗?这可能会给出一个提示。在移动设备上,图像大小是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
}
}