का उपयोग कर बाइनरी फ़ाइल को अपलोड करने के लिए कैसे करें किसी URL पर बाइनरी फ़ाइल अपलोड करने के लिए, मुझे this guide का उपयोग करने की सलाह दी गई है। हालांकि, फ़ाइल निर्देशिका में नहीं है, लेकिन MySQL डीबी में एक BLOB फ़ील्ड में संग्रहीत है। ब्लॉब क्षेत्र जेपीए में एक byte[]
संपत्ति के रूप में मैप किया गया है:URLConnection
byte[] binaryFile;
मैं थोड़ा कोड गाइड से लिया संशोधित किया है इस तरह से,:
HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection();
// set some connection properties
OutputStream output = connection.getOutputStream();
PrintWriter writer = new PrintWriter(new OutputStreamWriter(output, CHARSET), true);
// set some headers with writer
InputStream file = new ByteArrayInputStream(myEntity.getBinaryFile());
System.out.println("Size: " + file.available());
try {
byte[] buffer = new byte[4096];
int length;
while ((length = file.read(buffer)) > 0) {
output.write(buffer, 0, length);
}
output.flush();
writer.append(CRLF).flush();
writer.append("--" + boundary + "--").append(CRLF).flush();
}
// catch and close streams
मैं chunked स्ट्रीमिंग का उपयोग नहीं कर रहा। उपयोग किए गए हेडर हैं:
username and password
Content-Disposition: form-data; name=\"file\"; filename=\"myFileName\"\r\nContent-Type: application/octet-stream"
Content-Transfer-Encoding: binary
मेजबान द्वारा सभी शीर्षलेख सही ढंग से प्राप्त किए जाते हैं। यह अपलोड की गई फ़ाइल भी प्राप्त करता है, लेकिन दुर्भाग्यवश शिकायत करता है कि फ़ाइल पठनीय नहीं है, और दावा करती है कि प्राप्त फ़ाइल का आकार मेरे कोड द्वारा आउटपुट आकार से 37 बाइट बड़ा है।
स्ट्रीम, कनेक्शन और बाइट [] का मेरा ज्ञान इसको ठीक करने के तरीके को समझने के लिए बहुत सीमित है। किसी भी संकेत की सराहना की।
संपादित
टिप्पणीकार ने सुझाव दिया है, मैं भी कोशिश की है बाइट [] सीधे लिखने के लिए, ByteArrayInputStream का उपयोग किए बिना:
output.write(myEntity.getBinaryFile());
दुर्भाग्य से मेजबान बिल्कुल वैसा ही जवाब देता है दूसरी तरफ के रूप में।
आप बीएआईएस के माध्यम से फाइल स्ट्रीम क्यों कर रहे हैं? क्यों न केवल बाइट सरणी से सीधे लिखें? –
@JimGarrison संकेत के लिए धन्यवाद, मैंने अपना प्रश्न – perissf
अपडेट किया है यदि 'file.available()' के उपयोग के बजाय यदि आप 'byte [] temp = myEntity.getBinaryFile(); 'और' temp.length' का उपयोग करते हैं तो क्या होता है? मुझे संदेह है कि 'file.available() 'बंद है। –