2016-09-17 16 views
5

tôi có một vấn đề khi tôi tải lên một hình ảnh của 100kb để chia sẻ samba với JCIFS từ máy tính bảng của tôi mạng, nó mất khoảng 10-20 phút (trước khi tôi thay đổi bộ đệm của tôi từ 1024 to 20971520 nó mất gần 6 giờ) nhưng nó không đưa ra bất cứ tác dụng nữa để tăng nótải lên Android vào ổ (samba cổ phiếu) thực hiện vấn đề

nó không phải là vấn đề kết nối như tôi đã thử nghiệm nó với ES File nơi nó Tải Lên hình ảnh của tôi ngay lập tức

private class MyCopy extends AsyncTask<String, String, String> { 

    String z = ""; 
    String username = "", password = "", servername = "", filestocopy = ""; 

    @Override 
    protected void onPreExecute() { 
      username = edtusername.getText().toString(); 
      password = edtpassword.getText().toString(); 
      servername = "smb://" + edtservername.getText().toString(); 
      filestocopy = editdir.getText().toString(); 
     } 

     protected String doInBackground(String... params) { 
    //   String buffer; 
    //   buffer = setingPreferences.getString("buffer", ""); 
      File file = new File(filestocopy); 
      String filename = file.getName(); 

      NtlmPasswordAuthentication auth1 = new NtlmPasswordAuthentication(
        servername, username, password); 

      try { 

       SmbFile sfile = new SmbFile(servername + "/" + filename, auth1); 
       if (!sfile.exists()) 
        sfile.createNewFile(); 
       sfile.connect(); 

       InputStream in = new FileInputStream(file); 

       SmbFileOutputStream sfos = new SmbFileOutputStream(sfile); 

       byte[] buf = new byte[20971520]; //(parseInt(buffer)) 
       int len; 
       while ((len = in.read(buf)) > 0){ 
        sfos.write(buf, 0, len); 

       } 
       in.close(); 
       sfos.close(); 

       z = "File copied successfully"; 
      } catch (Exception ex) { 

       z = z + " " + ex.getMessage().toString(); 
      } 

      return z; 
     } 
    } 
+0

Bạn đã cố gắng sử dụng JCIFS trong môi trường J2SE để kiểm tra xem đó có phải là vấn đề Android hoặc có thể là JCIFS đơn giản là vấn đề không? Thư viện này có vẻ khá cũ (cập nhật lần cuối 2011) ... – Robert

Trả lời

0

Kích thước bộ đệm shouldn không tạo ra sự khác biệt đáng chú ý, nhưng chắc chắn không nên là 20 triệu. Sử dụng một cái gì đó giống như 4k thay thế.

Bạn có chắc đó là quá trình chuyển tệp thực sự mất quá nhiều thời gian? Không có lý do gì mà 100k nên mất nhiều hơn vài giây. Bạn đã thử đặt báo cáo nhật ký giữa mỗi bước, bao gồm cả trước và sau cuộc gọi xác thực, createNewFile()connect() để kiểm tra xem đó có phải là nút cổ chai không?

Ngoài ra, tôi tin rằng bạn nên sao chép byte trong khi chiều dài đọc là >= 0 thay vì nghiêm > 0, kể từ -1 báo hiệu sự kết thúc của dòng, không phải 0.

0

Bạn hãy thử

new SmbFile("username:[email protected]/")

thay vì sử dụng NTLM? Nó cũng có thể là một vấn đề DNS, do đó, cố gắng

jcifs.Config.setProperty("resolveOrder", "DNS");

Nếu không có công trình, bạn có thể muốn thử BufferedOutputStream với SmbFileOutputStream của bạn.

+0

'mới SmbFile ("username: password @ server /") 'cho tài khoản hiện bị vô hiệu hóa ' jcifs.Config.setProperty ("resolveOrder", "DNS ");' không cố định nó hoặc là cách sử dụng BufferedOutputStream với SmbFileOutputStream vì nó không thể được áp dụng ở đây 'SmbFileOutputStream sfos = new BufferedOutputStream (sfile);' và không tương thích ở đây 'BufferedOutputStream sfos = new SmbFileOutputStream (sfile);' –

Các vấn đề liên quan