2016-12-07 8 views
5

प्रतिक्रिया ड्रॉपज़ोन का उपयोग करके, मैंने onDrop कॉलबैक का उपयोग कर छवि को सफलतापूर्वक एक्सेस कर लिया है। हालांकि, मैं अपने सर्वर पर छवि भेजकर, एस 3 बाल्टी में सहेजकर और क्लाइंट को छवि पर हस्ताक्षरित यूआरएल लौटकर अमेज़ॅन एस 3 पर अपलोड करने की कोशिश कर रहा हूं।प्रतिक्रिया ड्रॉपज़ोन, छवि अपलोड करने के लिए कैसे?

मैं अब तक की जानकारी के साथ ऐसा नहीं कर सकता और दस्तावेज़ मेरे ज्ञान के लिए इसका उल्लेख नहीं करते हैं।

onDrop फाइलों के साथ मेरी redux कार्यों में एक समारोह कॉल से चलाता है:

export function saveImageToS3 (files, user) { 
    file = files[0] 
    // file.name -> filename.png 
    // file -> the entire file object 
    // filepreview -> blob:http:localhost:3000/1ds3-sdfw2-23as2 

    return { 
    [CALL_API] : { 
     method:'post', 
     path: '/api/image', 
     successType: A.SAVE_IMAGE, 
     body: { 
     name: file.name, 
     file: file, 
     preview: file.preview, 
     username: user 
     } 
    } 
    } 
} 

हालांकि, जब मैं अपने सर्वर से मिलता है, मुझे यकीन है कि इस ब्लॉब छवि को बचाने के लिए (है कि केवल से संदर्भित है नहीं कर रहा हूँ ब्राउज़र।)

server.post('/api/image', (req, res) => { 
    // req.body.preview --> blob:http://localhost:3000/1ds3-sdfw2-23as2 
    // req.body.file -> {preview:blob:http://localhost:3000/1ds3-sdfw2-23as2}, no other properties for some reason 
}) 
+0

ऐसा लगता है कि आप ब्लॉब के बाइट्स के बजाय ब्लॉब के URL अपलोड कर रहे हैं। बाइट्स प्राप्त करने के लिए आपको फ़ाइल रीडर/ऐरेबफर का उपयोग करने में ब्लॉब को पढ़ने की आवश्यकता होगी - ऐसा करने के तरीके पर बहुत सारे नमूना कोड हैं। लेकिन जब मैंने थोड़ा सा खोज किया, तो मुझे यह पता चला, शायद यह आपकी मदद कर सकता है: https://www.npmjs.com/package/react-dropzone-s3-uploader –

+0

किसी और के लिए - मुझे भी मल्टर सर्वर-साइड का उपयोग करना पड़ा चूंकि उसने मल्टीपार्ट फॉर्म डेटा पंजीकृत नहीं किया है। मैंने ऑब्जेक्ट बनाने के लिए नए फॉर्मडाटा के साथ नीचे दिए गए सुझावों का उपयोग किया, और फिर node में m.pter को app.post ('/ api/image', upload.single ('file'), function() {...}) के रूप में इस्तेमाल किया इसका ध्यान रखें। –

उत्तर

7

प्रतिक्रिया Dropzone File वस्तुओं जो एक बहु हिस्सा अनुरोध के साथ एक सर्वर के लिए भेजा जा सकता है की एक सरणी देता है। आपके द्वारा उपयोग की जाने वाली लाइब्रेरी पर निर्भर करता है कि इसे अलग-अलग किया जा सकता है।

Fetch API का उपयोग करते हुए यह इस प्रकार है:

var formData = new FormData(); 
formData.append('file', files[0]); 

fetch('http://server.com/api/upload', { 
    method: 'POST', 
    body: formData 
}) 

Superagent का उपयोग करके आप की तरह कुछ करना होगा:

var req = request.post('/api/upload'); 
req.attach(file.name, files[0]); 
req.end(callback); 
+0

आप अपलोड प्रगति कैसे दिखा सकते हैं? –

संबंधित मुद्दे