2012-01-18 11 views
1

マイコード:アップロードファイル

public static String newName =""; //the traditional Chinese file name 
public static String uploadFile =""; //the file path contain traditional Chinese 
public static String ActionUrl =""; //the server 

public static void upload() { 
String end = "\r\n"; 
String twoHyphens = "--"; 
String boundary = "*****"; 
try { 
URL url = new URL(ActionUrl); 
HttpURLConnection con = (HttpURLConnection) url.openConnection(); 
con.setDoInput(true); 
con.setDoOutput(true); 
con.setUseCaches(false); 
con.setRequestMethod("POST"); 
con.setRequestProperty("Connection", "Keep-Alive"); 
con.setRequestProperty("Accept", "text/*"); 
con.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary); 
DataOutputStream ds = new DataOutputStream(con.getOutputStream()); 
ds.writeBytes(twoHyphens + boundary + end); 
ds.writeBytes("Content-Disposition: form-data;" + "name=\"folder\"" + end + end + "/mnt/HD/HD_a2/test/" + end); 
ds.writeBytes(twoHyphens + boundary + end); 
ds.writeBytes("Content-Disposition: form-data;" + "name=\"Filedata\"; filename=\"" + newName + "\"" + end); 
ds.writeBytes(end); 
FileInputStream fStream = new FileInputStream(uploadFile); 
int bufferSize = 1024; 
byte[] buffer = new byte[bufferSize]; 
int length = -1; 
while((length = fStream.read(buffer)) != -1) { 
ds.write(buffer, 0, length); 
}  
ds.writeBytes(end); 
ds.writeBytes(twoHyphens + boundary + twoHyphens + end); 
fStream.close(); 
ds.flush(); 
InputStream is = con.getInputStream(); 
int ch; 
StringBuffer b = new StringBuffer(); 
while((ch = is.read()) != -1) { 
b.append((char)ch); 
} 
System.out.println("UPLOAD" + "SUCCESS"); 
ds.close(); 
} 
catch(Exception e) { 
e.printStackTrace(); 
} 
} 

これは、ファイルの成功をアップロードし、それが文字化けしたファイル名が表示されます。 変更方法

+0

どちらのファイル名は(おそらくUTF-8)、または受信サーバはその文字で入力データを処理するために知っていない、予想される文字セットで提供されていませんセット。ファイル名を送信しているときにwriteBytesの代わりにwriteUTFを使用することもできますが、実際のUTF-8をそのように書くのではなく、変更されたUTF-8(http ://docs.oracle.com/javase/6/docs/api/java/io/DataInput.html#modified-utf-8) - 変更されたUTF-8が実際のUTF-8と異なる場合、サーバーは不平を言う。 –

+0

なぜDataOutputStreamを使用していますか?なぜあなたはそれがwriteBytesを介して中国語のテキストで正しいことをすると思いますか? – bmargulies

+0

それでは、どうすればいいですか? – brian

答えて

2

は、以下に置き換えてみてください:

ds.writeBytes(twoHyphens + boundary + end); 
ds.writeBytes("Content-Disposition: form-data;" + "name=\"folder\"" + end + end + "/mnt/HD/HD_a2/test/" + end); 
ds.writeBytes(twoHyphens + boundary + end); 
ds.writeBytes("Content-Disposition: form-data;" + "name=\"Filedata\"; filename=\""); 
ds.write(newName.getBytes("UTF-8")); 
ds.writeBytes("\"" + end); 
ds.writeBytes(end); 
+0

ありがとうございます。完璧に動作します。 – rydgaze

関連する問題